开场类比: 医院主任医师看病快,是因为有助理提前把病人档案整理好交给他。如果AI化,直接把病人历史资料在叫号时自动推给医生,医生扫一眼、问两个关键问题——"20分钟能降到10分钟"。这个类比比"客服"类比更容易让非技术背景的人理解RAG的价值:前面几章搭的检索节点,做的就是"提前把资料整理好交给医生"这件事,这一章要做的,是让"医生"(LLM)真正照着资料看病,而不是凭印象瞎开药方。
11.1 每条分支各自添加一个"生成回答"节点
在三个知识检索节点后面,各自添加一个「LLM」节点,命名为"生成回答"(三个独立配置,不要合并成一个,这样逻辑更清晰、更容易排查问题)。
11.2 配置模型
三个都选 deepseek-flash
11.3 配置Prompt
导购分支:
你是生鲜电商的AI导购助手,语气亲切自然,像朋友聊天一样,不要太正式。
以下是检索到的相关信息:
{上下文占位符 —— 见下方"如何正确插入"}
用户问题:{{#Query改写.text#}}
请基于以上信息回答用户问题。要求:
1. 如果检索到的信息里有相关商品,可以自然地推荐并附上规格和价格
2. 如果用户问题比较开放(比如"有什么水果推荐"),应该列出所有相关商品供用户选择,
不要只推荐一个,也不要脑补用户没有表达过的情境(比如担心发胖、热量偏好)
3. 如果检索到的信息完全不相关,诚实说"这个我暂时不太清楚,建议问一下客服哦",不要编造
4. 回答控制在3句话以内,口语化
知识分支:
你是生鲜电商的AI导购助手,语气亲切自然,像朋友聊天一样,不要太正式。
以下是检索到的相关信息:
{上下文占位符}
用户问题:{{#Query改写.text#}}
请基于以上信息回答用户问题。要求:
1. 优先回答知识类问题(怎么挑选、怎么保存、怎么做)
2. 如果检索到的知识和某个商品相关,可以顺带提一句"我们店里也有卖哦"
3. 如果检索到的信息完全不相关,诚实说"这个我暂时不太清楚,建议问一下客服哦",不要编造
4. 回答控制在3句话以内,口语化
默认(模糊)分支:
你是生鲜电商的AI导购助手,语气亲切自然,像朋友聊天一样,不要太正式。
以下是检索到的相关信息(可能包含商品信息和相关知识):
{上下文占位符}
用户问题:{{#Query改写.text#}}
请基于以上信息回答用户问题。要求:
1. 这类问题往往既涉及商品又涉及知识,尽量两方面都照顾到
2. 如果检索到的信息中有一部分完全不相关,就只用相关的那部分回答,不要硬凑
3. 如果都不相关,诚实说"这个我暂时不太清楚,建议问一下客服哦",不要编造
4. 回答控制在3句话以内,口语化
**注意三条Prompt里"用户问题"这一行,引用的都是{{#Query改写.text#}},不是{{#开始.query#}}**——跟第10章检索节点的查询变量保持一致,理由见第7章:如果这里漏改成原始输入,用户问"有货吗"这类省略句时,LLM看到的还是没头没脑的三个字,答案照样会跑偏。
这三条Prompt里都有第3条"检索到的信息完全不相关就诚实说不知道"的约束——但这条约束有一个隐藏漏洞:它只覆盖了"检索到的信息不相关",没覆盖"检索结果完全空白"这种情况。这个漏洞真实发生过一次,而且被完整记录了下来,详见附录C的"幻觉解剖案例",非常值得在这里提前预告给学生,留一个悬念。
11.4 如何正确插入"上下文占位符"(真实踩坑重点)
错误做法: 直接手打或者用{x}选择检索节点的result变量(比如{{#导购.result#}}),这样虽然内容能显示,但Dify会一直提示"要启用上下文功能,请在提示中填写上下文变量",警告不会消失。
正确做法:
- 光标停在SYSTEM框里想插入的位置
- 点击
{x}图标 - 在弹出的变量列表最下方,找到「上下文」这个专门的选项(带文档图标)
- 点击插入
插入成功的标志:文本框里会出现一个紫色背景的标签块(不是普通文字),这时候警告提示会自动消失。
根因: 普通变量引用和"上下文"占位符是两种不同的东西。普通的{{#节点.result#}}语法虽然能显示内容,但不会被系统正式识别为"上下文",也就不会消除警告——只有用列表底部的专门选项插入,才会被正式标记。
11.5 每个"生成回答"节点后面,添加"直接回复"节点
这一步经常被遗漏,是导致"预览测试时明明LLM生成了内容,但对话框里什么都看不到"的直接原因。
- 在每个"生成回答"节点右侧点「+」
- 添加「直接回复」节点
- 在"回复"输入框里,点
{x}图标 - 选择"生成回答"节点的
text变量插入(不要手打)
为什么必须要这一步:
"生成回答"(LLM节点) → 只负责"思考",生成的文字存在内部变量里,
不会自动显示给用户
"直接回复"节点 → 负责"说出来",把某个变量的内容
正式输出到对话框
因为Chatflow可能有多个LLM节点在不同分支工作,系统无法自动判断该展示哪一个的结果,必须用"直接回复"节点明确指定"这次要把哪个变量的内容,正式输出给用户看"。
三条分支都要各自配置一个"直接回复"节点。