Learn
Dify/08-variables-context

变量与上下文

静态提示词只能「一招鲜」。真实应用需要根据用户输入、会话历史、外部数据动态调整——这就要靠变量(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(下拉:中文/英文)。改提示词引用它们,验证不同输入产生不同问候。

小结

  • 输入变量让提示词参数化;类型与默认值要设好
  • 会话记忆靠记忆窗口控制,别无限拉长
  • 上下文 = 记忆 + 知识库 + 变量 + 工具返回
  • 下一步:给应用装上「工具」能力 →