如果说大模型是“引擎”,那么 Prompt 就是方向盘

在 Dify 平台中,Prompt 不仅是简单的文本输入,更是一个可编程、可编排、可调试的逻辑核心。掌握 Prompt 工程技巧,能让你的 AI 应用从“能用”进化到“好用”。

本文将带你深入 Dify 的 Prompt 编排能力,系统讲解:
✅ 如何高效使用变量与上下文
✅ 如何设计动态 Prompt 模板
✅ 如何管理多轮对话状态与记忆机制

无论你是想提升问答准确率、实现个性化交互,还是构建复杂 Agent,这篇文章都将成为你的 Prompt 实战手册


一、变量:让 Prompt 动起来

Dify 支持通过 {{variable}} 语法注入运行时参数,这是实现“个性化 AI”的第一步。

✅ 基础用法:定义并使用变量

例如,创建一个欢迎机器人:

你好 {{name}},我是 {{bot_name}}。
今天是 {{date}},你有什么问题我可以帮忙吗?

前端调用时传入:

{
  "name": "小李",
  "bot_name": "Dify 助手",
  "date": "2025年4月5日"
}

AI 就会输出:

“你好 小李,我是 Dify 助手。今天是 2025年4月5日,你有什么问题我可以帮忙吗?”


🔧 变量配置路径

在 Dify 控制台:

  1. 进入应用 → “Prompt 编排”
  2. 点击右上角“输入变量”按钮
  3. 添加变量名(如 name, company
  4. 在 Prompt 中使用 {{name}} 引用

💡 提示:变量名建议使用小写字母+下划线(如 user_age),避免空格和特殊字符。


🎯 高级技巧:条件变量渲染(Jinja2 语法)

Dify 支持 Jinja2 模板语法,可实现动态逻辑控制。

示例:根据用户身份切换回复风格
{% if user_type == "vip" %}
尊敬的 VIP 客户 {{name}},您享有优先服务权限,请直接告诉我您的需求。
{% else %}
您好 {{name}},我是您的 AI 助手,请问有什么可以帮您?
{% endif %}

这样就能实现 差异化服务策略,适用于客服、营销等场景。


二、上下文与历史消息:构建连贯对话

真正的智能对话不是“一问一答”,而是有记忆、有上下文的交流。Dify 提供了强大的上下文管理机制。

📚 上下文类型说明

类型 作用
系统提示词(System Prompt) 定义 AI 的角色、语气、行为规范
用户输入(Query) 当前用户提问内容
历史消息(History) 过往对话记录(自动拼接)
知识库内容(Retrieved Context) RAG 检索结果,增强回答准确性

⚙️ 配置历史消息

在“Prompt 编排”页面底部,Dify 自动生成如下结构:

{% for message in chat_history %}
{{message.role}}: {{message.content}}
{% endfor %}

User: {{query}}
Assistant:

你也可以手动调整:

  • 限制历史轮数(如只保留最近 5 轮)
  • 过滤敏感信息(如隐藏手机号)
  • 添加时间戳增强上下文感知

✅ 建议:对于长对话应用,启用“自动摘要”功能(需自定义节点),防止上下文过长导致 token 超限。


💡 实战技巧:控制上下文长度

大模型有 token 限制(如 GPT-4 最多 8192),过多历史会挤占生成空间。

优化方案

  1. 在“高级设置”中启用“自动截断”
  2. 使用“摘要节点”定期生成对话摘要
  3. 将旧对话存入“长期记忆”(可结合知识库存储)

三、动态 Prompt 模板设计

静态 Prompt 只能应对固定场景,而动态模板才能适应复杂业务。

🧩 模板设计原则

原则 说明
模块化 将 Prompt 拆分为角色、指令、示例、约束等部分
可配置 使用变量替代硬编码内容
可复用 设计通用模板,供多个应用继承

📄 示例:智能客服 Prompt 模板

# 角色设定
你是一个专业的 {{company}} 客服助手,名叫 {{bot_name}}。
你的服务态度要礼貌、耐心、简洁。

# 回答规则
- 如果问题涉及产品功能,请参考知识库内容回答
- 如果用户情绪激动,请先安抚:“很抱歉给您带来不便…”
- 不知道的问题不要编造,可以说:“我需要进一步确认”

# 知识库参考
<context>
{{retrieved_content}}
</context>

# 历史对话
{% for message in chat_history %}
{{message.role}}: {{message.content}}
{% endfor %}

# 当前问题
User: {{query}}
Assistant:

✅ 这个模板具备:

  • 角色可替换(适用于不同企业)
  • 知识库动态注入
  • 支持情绪识别与安抚逻辑

四、多轮对话状态管理

很多 AI 应用需要记住“当前进度”,比如表单填写、任务引导、问卷调查等。这就涉及到 对话状态管理(Dialog State Management)

🔄 状态管理的挑战

  • 用户可能中途跳转话题
  • 需要记住已填写的字段
  • 要支持“上一步”、“重新填写”等操作

✅ Dify 中的解决方案

虽然 Dify 默认不提供“状态机”功能,但我们可以通过以下方式实现:

方法 1:使用变量存储状态

定义一个状态变量 current_step

{
  "user_name": "",
  "user_phone": "",
  "current_step": "ask_name"  // 或 "ask_phone", "confirm"
}

然后在 Prompt 中判断:

{% if current_step == "ask_name" %}
请问您的姓名是?
{% elif current_step == "ask_phone" %}
请留下您的联系方式。
{% elif current_step == "confirm" %}
您提供的信息是:姓名 {{user_name}},电话 {{user_phone}},确认无误吗?
{% endif %}

前端根据 AI 输出动态更新 current_step,实现流程控制。


方法 2:结合 Workflow 实现复杂状态流

对于更复杂的流程(如贷款申请、工单提交),建议使用 Workflow 工作流模式

  1. 每个节点代表一个步骤(如“收集姓名”、“验证手机号”)
  2. 使用“变量赋值”节点保存中间结果
  3. 用“条件分支”节点判断是否进入下一步

🧩 这才是真正意义上的“对话状态机”。


五、最佳实践总结

实践 建议
✅ 变量命名清晰 使用 user_name 而非 a1
✅ 控制 Prompt 长度 总 token 建议 ≤ 模型上限的 70%
✅ 添加输出约束 明确要求格式(如 JSON、Markdown)
✅ 启用调试模式 每次修改后测试 3 次以上
✅ 分离角色与逻辑 系统提示词只定义“你是谁”,业务逻辑由流程控制

✅ 总结:Prompt 是 AI 应用的“操作系统”

在 Dify 中,Prompt 不再是“一句话指令”,而是:

  • 🧩 可编程的交互逻辑
  • 📦 可复用的模板资产
  • 🧠 可演进的智能核心

通过合理使用变量、上下文、动态模板和状态管理,你可以构建出:

  • 个性化的 AI 助手
  • 流程化的业务机器人
  • 智能化的客户服务系统

💬 互动时间
你在设计 Prompt 时遇到过哪些坑?AI 总是答非所问?还是上下文丢失?欢迎在评论区分享!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐