第一章:Dify提示词模板变量替换语法概述
在构建智能对话系统时,动态生成提示词是提升模型响应灵活性的关键。Dify 提供了一套简洁而强大的模板变量替换机制,允许开发者在提示词中嵌入可变参数,运行时自动替换为实际值。
基本语法结构
变量替换使用双大括号
{{ }} 包裹变量名,支持字符串、数字、布尔值等多种数据类型。例如:
你好,{{name}}!你来自{{city}},年龄为{{age}}岁。
当传入上下文数据:
{
"name": "张三",
"city": "北京",
"age": 28
}
输出结果将自动替换为:
你好,张三!你来自北京,年龄为28岁。
支持的变量特性
- 变量名区分大小写,如
{{Name}} 与 {{name}} 被视为不同变量 - 支持嵌套对象访问,使用点号表示层级:
{{user.profile.email}} - 未定义变量默认替换为空字符串,避免渲染错误
常见应用场景
| 场景 | 模板示例 | 说明 |
|---|
| 个性化问候 | 欢迎回来,{{username}}! | 根据用户登录信息动态生成欢迎语 |
| 数据查询构造 | 查询{{date}}的日志记录 | 动态插入时间参数用于日志检索 |
graph TD
A[原始模板] --> B{变量存在?}
B -->|是| C[替换为实际值]
B -->|否| D[替换为空字符串]
C --> E[输出最终提示词]
D --> E
第二章:变量替换基础与核心语法
2.1 变量定义与引用:掌握{{variable}}语法规范
在模板引擎中,
{{variable}} 是最基础的变量引用语法,用于动态输出上下文中的数据值。变量通常以键值对形式存在于数据模型中,模板解析时会自动替换为实际内容。
基本语法结构
{{user.name}}
{{config.apiEndpoint}}
{{count}}
上述代码展示了多层级变量引用方式。
{{user.name}} 表示从上下文中获取
user 对象的
name 属性,支持嵌套结构访问。
常见变量类型对照表
| 变量类型 | 示例 | 说明 |
|---|
| 字符串 | {{title}} | 直接渲染文本内容 |
| 数字 | {{count}} | 可用于计算或条件判断 |
| 布尔值 | {{isActive}} | 常用于控制显示逻辑 |
2.2 默认值机制:使用{{variable|default:"value"}}提升鲁棒性
在模板渲染过程中,变量缺失或为空是常见问题。Django模板语言提供的默认值过滤器 `{{variable|default:"value"}}` 能有效防止空值导致的界面异常,增强系统的容错能力。
基本语法与应用场景
{{ user.nickname|default:"游客" }}
当
user.nickname 不存在或为
None、空字符串时,输出“游客”。该机制适用于用户信息、配置项等可能缺失的数据字段。
常用默认值类型对比
| 变量状态 | 是否触发默认值 |
|---|
| None | 是 |
| ""(空字符串) | 是 |
| False | 否 |
注意:布尔值
False 不会触发默认值,需使用
default_if_none 配合处理。
2.3 变量类型解析:字符串、数字、布尔值的处理差异
在JavaScript中,不同类型变量的处理方式存在显著差异。理解这些差异有助于避免隐式转换带来的陷阱。
字符串处理特性
字符串在拼接时会触发隐式类型转换,尤其与数字结合时需格外注意。
let num = 42;
let str = "The answer is " + num; // "The answer is 42"
该代码中,数字
num 被自动转换为字符串类型进行拼接,体现了JavaScript的弱类型特性。
数字与布尔值的运算行为
布尔值参与数学运算时,
true 转为1,
false 转为0。
2.4 嵌套变量调用:多层级数据结构中的路径访问实践
在处理复杂配置或API响应时,常需访问嵌套对象中的深层字段。JavaScript中可通过点符号或方括号逐层访问。
基本访问方式
- 点表示法:
user.profile.name - 动态键访问:
data['users'][0]['settings']['theme']
安全访问模式
为避免深层访问时报错,推荐使用可选链操作符:
const theme = user?.profile?.settings?.theme ?? 'light';
该写法确保即使中间某层为
null或
undefined,也不会抛出异常,而是返回
undefined,配合空值合并操作符可提供默认值。
结构化数据示例
| 层级 | 路径 | 值类型 |
|---|
| 1 | config.api.baseUrl | string |
| 2 | config.db.pool.maxConnections | number |
2.5 特殊字符与转义:避免模板渲染错误的关键技巧
在模板引擎中,特殊字符如 `<`, `>`, `&`, `{`, `}` 等常用于标记语法或HTML结构,若未正确处理,极易导致渲染异常或XSS漏洞。
常见需转义的字符
< 替代 <,防止被解析为HTML标签开始> 替代 >& 替代 &,避免误认为实体引用{ 和 } 用于转义模板占位符如 {{}}
Go模板中的安全转义示例
package main
import (
"html/template"
"os"
)
func main() {
const tpl = `用户输入: {{.}}
`
t := template.Must(template.New("demo").Parse(tpl))
// 自动转义HTML特殊字符
t.Execute(os.Stdout, "")
}
该代码中,Go模板引擎会自动将 `