mirror of
https://github.com/langgenius/dify-docs.git
synced 2026-03-27 13:28:32 +07:00
132 lines
4.2 KiB
Plaintext
132 lines
4.2 KiB
Plaintext
---
|
|
title: "模板"
|
|
icon: "note-sticky"
|
|
---
|
|
|
|
<Note> ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考[英文原版](/en/use-dify/nodes/template)。</Note>
|
|
|
|
|
|
模板节点使用 Jinja2 模板语法将来自多个来源的数据转换和格式化为结构化文本。使用它来组合变量、格式化输出,并为下游节点或最终用户准备数据。
|
|
|
|
<Frame caption="模板节点配置界面">
|
|
<img src="https://assets-docs.dify.ai/2025/04/0838bb5c7e1d1a58ed30fcd9fc48920f.png" alt="Template node interface" />
|
|
</Frame>
|
|
|
|
## Jinja2 模板
|
|
|
|
模板节点使用 Jinja2 模板语法创建基于工作流数据自适应的动态内容。这提供了类似编程的功能,包括循环、条件判断和过滤器,用于复杂的文本生成。
|
|
|
|
### 变量替换
|
|
|
|
使用双花括号引用工作流变量:`{{ variable_name }}`。你可以使用点号和括号语法访问嵌套对象属性和数组元素。
|
|
|
|
```jinja
|
|
{{ user.name }}
|
|
{{ items[0].title }}
|
|
{{ data.metrics.score }}
|
|
```
|
|
|
|
### 条件逻辑
|
|
|
|
使用 if-else 语句根据数据值显示不同内容:
|
|
|
|
```jinja
|
|
{% if user.subscription == 'premium' %}
|
|
欢迎回来,高级会员!你可以访问所有功能。
|
|
{% else %}
|
|
考虑升级到高级会员以获得更多功能。
|
|
{% endif %}
|
|
```
|
|
|
|
### 循环和迭代
|
|
|
|
使用 for 循环处理数组和对象以生成重复内容:
|
|
|
|
```jinja
|
|
{% for item in search_results %}
|
|
### 结果 {{ loop.index }}
|
|
**分数**: {{ item.score | round(2) }}
|
|
{{ item.content }}
|
|
---
|
|
{% endfor %}
|
|
```
|
|
|
|
<Frame caption="模板处理知识检索结果">
|
|
<img src="https://assets-docs.dify.ai/2025/04/0ae3f13cf725cb2c52c72cc354e592ee.png" alt="Template formatting example" />
|
|
</Frame>
|
|
|
|
## 数据格式化
|
|
|
|
### 过滤器
|
|
|
|
Jinja2 过滤器在模板渲染期间转换数据:
|
|
|
|
```jinja
|
|
{{ name | upper }}
|
|
{{ price | round(2) }}
|
|
{{ content | replace('\n', '<br>') }}
|
|
{{ timestamp | strftime('%B %d, %Y') }}
|
|
{{ score | default('无可用分数') }}
|
|
```
|
|
|
|
### 错误处理
|
|
|
|
使用默认值和条件检查优雅地处理缺失或无效数据:
|
|
|
|
```jinja
|
|
{{ user.email | default('未提供邮箱') }}
|
|
{{ metrics.accuracy | round(2) if metrics.accuracy else '未计算' }}
|
|
```
|
|
|
|
## 交互式表单
|
|
|
|
模板可以生成交互式 HTML 表单,用于在聊天界面中进行结构化数据收集:
|
|
|
|
```html
|
|
<form data-format="json">
|
|
<label for="username">用户名:</label>
|
|
<input type="text" name="username" required />
|
|
|
|
<label for="priority">优先级:</label>
|
|
<input type="select" name="priority" data-options='["low","medium","high"]'/>
|
|
|
|
<label for="message">消息:</label>
|
|
<textarea name="message" placeholder="输入你的消息"></textarea>
|
|
|
|
<input type="checkbox" name="urgent" data-tip="标记为紧急"/>
|
|
<button data-variant="primary">提交</button>
|
|
</form>
|
|
```
|
|
|
|
<Frame caption="在聊天界面中渲染的交互式表单">
|
|
<img src="https://assets-docs.dify.ai/2025/04/9d24e9cfa3cdde00e4eee15bd4bbea76.png" alt="Interactive form rendering" />
|
|
</Frame>
|
|
|
|
当用户提交表单时,响应会成为结构化 JSON 数据,可立即在下游工作流节点中处理。
|
|
|
|
## 输出限制
|
|
|
|
模板输出限制为 **80,000 个字符**(可通过 `TEMPLATE_TRANSFORM_MAX_LENGTH` 配置)。这可以防止内存问题并确保大型模板输出的合理处理时间。
|
|
|
|
## 常见用例
|
|
|
|
**报告生成** - 将来自多个来源的数据组合成具有一致结构和样式的格式化报告。
|
|
|
|
**API 响应格式化** - 将内部数据结构转换为用户友好的格式以供外部使用。
|
|
|
|
**大型语言模型提示词准备** - 将复杂数据结构化为格式良好的提示词,以提高大型语言模型处理准确性。
|
|
|
|
**邮件和通知模板** - 基于用户数据和工作流结果生成具有动态内容的个性化消息。
|
|
|
|
**数据转换据格式和结构之间进行转换,以便与外部系统集成。
|
|
|
|
## 最佳实践
|
|
|
|
**使用描述性变量名** 使模板可读且易于维护,特别是在处理复杂数据结构时。
|
|
|
|
**处理缺失数据** 使用默认值和条件检查来防止模板渲染错误。
|
|
|
|
**格式化以提高可读性** 通过使用适当的间距、换行符和格式来创建干净、专业的输出。
|
|
|
|
**使用示例数据测试** 确保模板处理边缘情况并在不同输入场景下产生预期结果。
|