变量与上下文
静态提示词只能「一招鲜」。真实应用需要根据用户输入、会话历史、外部数据动态调整——这就要靠变量(Variables) 与上下文(Context)。本章把它们讲透。
1. 输入变量(Input Variables)
在编排页「变量」区定义变量,运行时由用户填写或由上游传入。
| 字段 | 说明 |
|---|---|
| 变量名 | 英文字符,如 user_name |
| 类型 | 文本 / 段落 / 下拉选择 / 数字 等 |
| 必填 | 是否必须提供 |
| 默认值 | 未填时使用 |
定义后在提示词中以 {{user_name}} 引用:
欢迎你,{{user_name}}!我是你的 {{product_name}} 助手。对话型应用里,变量可在开场时通过表单收集;文本生成型应用里,变量直接作为生成入参。
💡用下拉减少无效输入
像「语言偏好」这类有限枚举,用「下拉选择」变量比自由文本更可控,也能避免模型收到千奇百怪的值。
2. 会话上下文(Conversation Context)
对话型应用自带会话记忆,模型能记住本轮对话前文。Dify 把上下文管理能力可视化:
- 记忆窗口(Memory):保留最近 N 轮,避免无限增长撑爆上下文
- 对话角色前缀:可定制「用户/助手」标签
- 上下文引用:在提示词里可用特殊标记引用历史
# 典型多轮效果
用户:帮我查订单 ORD-123
助手:该订单状态为「已发货」。
用户:那什么时候到? ← 模型借助上下文理解「那」指上一单
助手:预计 2 天内送达。⚠️记忆窗口别设太大
保留轮数过多会拉长每次请求的 token、增加成本与延迟;设太小又「忘性大」。一般 5–10 轮是平衡点,长文档场景优先靠知识库而非长记忆。
3. 上下文来源:知识库与外部
除了会话记忆,「上下文」还包括:
- 知识库片段:第 5 章配置,检索后注入
- 变量注入:用户/外部传入的结构化数据
- 工具返回:工具调用结果(第 9、12 章)
它们共同组成模型「当前能看到的信息」。
4. 变量与上下文的配合示例
系统提示:
你服务于 {{company}} 的 {{department}} 部门。
参考以下资料回答:
{{#context#}} ← 知识库检索结果占位
历史对话已自动包含在上下文中。这里 {{company}} 是输入变量,{{#context#}} 是知识库上下文占位,二者合一形成动态提示。
5. 调试与排错
- 预览窗口会显示「当前变量值」,确认替换是否正确
- 变量为空导致怪异输出 → 检查必填与默认值
- 上下文不相关 → 回到第 5 章调检索参数
🎯动手做
为第 6 章的应用增加两个变量:user_name(文本,必填)、language(下拉:中文/英文)。改提示词引用它们,验证不同输入产生不同问候。
小结
- 输入变量让提示词参数化;类型与默认值要设好
- 会话记忆靠记忆窗口控制,别无限拉长
- 上下文 = 记忆 + 知识库 + 变量 + 工具返回
- 下一步:给应用装上「工具」能力 →