模板¶
Note: ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考英文原版。
模板节点使用 Jinja2 模板语法将来自多个来源的数据转换和格式化为结构化文本。使用它来组合变量、格式化输出,并为下游节点或最终用户准备数据。

Jinja2 模板¶
模板节点使用 Jinja2 模板语法创建基于工作流数据自适应的动态内容。这提供了类似编程的功能,包括循环、条件判断和过滤器,用于复杂的文本生成。
变量替换¶
使用双花括号引用工作流变量:{{ variable_name }}。你可以使用点号和括号语法访问嵌套对象属性和数组元素。
条件逻辑¶
使用 if-else 语句根据数据值显示不同内容:
{% if user.subscription == 'premium' %}
欢迎回来,高级会员!你可以访问所有功能。
{% else %}
考虑升级到高级会员以获得更多功能。
{% endif %}
循环和迭代¶
使用 for 循环处理数组和对象以生成重复内容:
{% for item in search_results %}
### 结果 {{ loop.index }}
**分数**: {{ item.score | round(2) }}
{{ item.content }}
---
{% endfor %}

数据格式化¶
过滤器¶
Jinja2 过滤器在模板渲染期间转换数据:
{{ name | upper }}
{{ price | round(2) }}
{{ content | replace('\n', '<br>') }}
{{ timestamp | strftime('%B %d, %Y') }}
{{ score | default('无可用分数') }}
错误处理¶
使用默认值和条件检查优雅地处理缺失或无效数据:
{{ user.email | default('未提供邮箱') }}
{{ metrics.accuracy | round(2) if metrics.accuracy else '未计算' }}
交互式表单¶
模板可以生成交互式 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>

当用户提交表单时,响应会成为结构化 JSON 数据,可立即在下游工作流节点中处理。
输出限制¶
模板输出限制为 80,000 个字符(可通过 TEMPLATE_TRANSFORM_MAX_LENGTH 配置)。这可以防止内存问题并确保大型模板输出的合理处理时间。
常见用例¶
报告生成 - 将来自多个来源的数据组合成具有一致结构和样式的格式化报告。
API 响应格式化 - 将内部数据结构转换为用户友好的格式以供外部使用。
大型语言模型提示词准备 - 将复杂数据结构化为格式良好的提示词,以提高大型语言模型处理准确性。
邮件和通知模板 - 基于用户数据和工作流结果生成具有动态内容的个性化消息。
**数据转换据格式和结构之间进行转换,以便与外部系统集成。
最佳实践¶
使用描述性变量名 使模板可读且易于维护,特别是在处理复杂数据结构时。
处理缺失数据 使用默认值和条件检查来防止模板渲染错误。
格式化以提高可读性 通过使用适当的间距、换行符和格式来创建干净、专业的输出。
使用示例数据测试 确保模板处理边缘情况并在不同输入场景下产生预期结果。