本手册用于培训带教,包含完整操作步骤 + 真实踩坑排查方法 基于Dify平台搭建,全程零代码 平台:dify.ai 模型:DeepSeek(对话)+ 硅基流动(Embedding)
手册使用说明
这份手册分两部分:
第一部分(第一至第七章) 是从零开始的完整搭建步骤,照着做能跑通整个项目。
第二部分(第八章) 是常见故障排查清单,收录了实际带教/自己操作时真实遇到的问题,按"现象→原因→解决方法"的格式整理,遇到问题直接查对应条目。
建议培训时,讲师自己先完整跑一遍全流程,熟悉每个环节可能出现的报错,再带学生操作。
第一章:账号准备
1.1 注册Dify
- 打开 dify.ai,用邮箱注册
- 有免费额度,足够教学场景反复测试使用
1.2 注册DeepSeek(对话模型)
- 打开 platform.deepseek.com,注册登录
- 左侧「API Keys」→「创建API Key」,复制保存(只显示一次)
- 建议充值(费用很低,几十次测试对话大概几毛到几块钱)
为什么选DeepSeek: 价格比OpenAI/Claude便宜一个数量级,适合教学反复试错;国内访问稳定,不用处理海外网络问题。
1.3 注册硅基流动(Embedding模型,DeepSeek官方不提供)
- 打开 siliconflow.cn,注册登录
- 创建API Key
- 充值一点余额(Embedding调用成本很低,10-20条数据几分钱量级)
为什么需要单独配置这个: DeepSeek只提供对话模型,不提供把文字转成向量的Embedding模型,必须额外找一个供应商。
第二章:创建应用与配置模型
2.1 创建Chatflow应用
- 登录Dify,进入「工作室」
- 点击「创建空白应用」
- 选择「Chatflow」(不要选"聊天助手",因为需要意图分流的条件判断能力,只有Chatflow支持可视化的分支编排)
- 应用命名,比如"AI生鲜导购"
2.2 配置DeepSeek模型
左侧菜单「设置」→「模型供应商」
找到「深度求索」(DeepSeek中文名),点击「添加API密钥」
表单填写:
凭据名称:随意起名,比如"DeepSeek教学用" API Key:粘贴DeepSeek平台生成的密钥 API Base URL:留空,不用填保存
回到「模型供应商」页面顶部,点击「默认模型设置」
「系统推理模型」选择
deepseek-chat(不要选deepseek-reasoner,那个更贵更慢,这个项目用不上复杂推理)
2.3 配置硅基流动(Embedding供应商)
- 同样在「模型供应商」页面,找到「硅基流动」
- 添加API密钥(操作同上)
- 这一步先不用在"默认模型设置"里选Embedding模型,等到建知识库时再选(后面第三章会讲)
第三章:准备数据 + 建知识库
3.1 数据格式:优先markdown,Excel

提醒: 如果用Mac自带的TextEdit写txt文件,默认保存格式是富文本(RTF),即使文件后缀是.txt,Dify也解析不了,会上传失败。
直接用Excel,理由不只是避坑:
表格的每一行天然就是一个独立的知识单元,不需要系统去猜"从哪里切片",比大段文字更可控,检索也更精准。
企业知识: 建立知识库管理机制,谁是负责人,资料范围有哪些,更新频率,切分方式,文件格式,拒答规则. 以及知识资料更新的sop也是很关键.最怕新旧规则同时存在,版本相互冲突.多检测.
原始素材的预处理比切分更重要,PPT,PDF等要转化成结构化的markdown文件.飞书文档(数据打通方便,但是也不算纯markdown格式)的应用其实在企业是非常好的数据标准化的过程.
3.2 商品知识库数据结构
四列:商品名 / 规格 / 价格 / 卖点
鲈鱼 500g一条 20元 肉多刺少,鲜活
三文鱼块 600g一条 69元
榴莲(金枕) 约3kg一个 89元 现切可选
草莓 250g一盒 15元 当季新鲜
基围虾 500g 35元 鲜活现捞
建议准备10-15条,覆盖多个品类。
3.3 生活知识库数据结构
两列:问题 / 回答(问答对结构,检索精准度最高)
鲈鱼怎么做? 清蒸红烧都可以
草莓怎么保存? 不洗直接冷藏,吃之前再洗,洗完容易坏得快
基围虾怎么挑新鲜的? 看虾壳是否透亮发青,虾头不发黑,闻着没有腥臭味
关键提醒——问题字段不要混合不同粒度的提问方式:
真实踩坑案例:一开始把"榴莲怎么看好坏"和"我的有酒精味"这两种不同粒度的问法写在同一条数据的问题字段里——
错误示范:
问题:榴莲怎么看好坏,我的有酒精味
回答:有酒精味说明过熟发酵了,不建议吃,正常应该是浓郁果香味
结果是:当用户只问通用的"榴莲怎么看好坏"(没有说自己的具体情况)时,AI依然会用"针对具体场景"的语气回答,显得答非所问。
正确做法:把通用问法和具体场景问法拆成两条独立数据:
正确示范一(通用挑选方法):
问题:榴莲怎么看好坏
回答:看果壳是否裂开一条缝,闻着有没有浓郁果香味,按压软硬适中说明成熟度刚好
正确示范二(具体场景判断):
问题:榴莲有酒精味还能吃吗
回答:有酒精味说明过熟发酵了,不建议吃,正常应该是浓郁果香味
这是数据治理里最容易被忽视、但影响很大的一个细节,培训时建议专门用这个案例给学生讲清楚。
企业情况:知识库不能太大,一定要精准
3.4 上传知识库
- 左侧菜单「知识库」→「创建知识库」
- 选择「创建即用型知识库」(不要选"构建自定义知识库",那个需要自己搭数据处理节点,新手不用)
- 上传Excel文件
- 进入「文本分段与清洗」页面:
分段设置:保持默认(分段最大长度1024字符、重叠50字符)
表格数据每行内容很短,用不到这么大,默认值足够

- 索引模式:必须选「高质量」,不要选「经济」
高质量 → 调用Embedding模型做真正的向量化,
"语义相近能检索到"这个能力靠这个实现
经济 → 不做向量化,退化成关键词匹配,
检索能力弱很多,一定不要选
- Embedding模型:选
BAAI/bge-large-zh-v1.5
把一段文字变成一串数字向量化:

概念:余弦相似度,看两个向量方向有多接近


不要选:
BAAI/bge-large-en-v1.5 → 后缀-en是英文优化,不适合中文数据
netease-youdao/bce-embedding-base_v1 → 中英通用,但不如专精中文的准
要选:
BAAI/bge-large-zh-v1.5 → 后缀-zh专门为中文语义优化,这个项目选这个
其他知识:维度,每个模型都对应一个维度.维度越高精度越准,但是成本和速度都会变慢,768-1024维度差不多.
企业知识: 跑分第一不代表复合你的场景,需要进行实际测试,先用中文通用的跑通再进行评估 企业内部还需要评估价格和数据敏感度.openai的还是挺贵的,尤其数量上去之后.另外还有合规程度,有的企业数据很敏感,情愿自己部署多花钱,也不用线上大模型.
- 检索设置:
召回:从知识库里把可能相关的 chunk 捞出
- 全文检索 / 关键词检索(BM25):靠命中的关键词进行寻找,大部分位置都找不到,但比较精准
- BM25 是关键词检索的标准打分算法,命中的词越多、命中的越稀有,得分越高,只会字面命中,不懂近义词
- 算分逻辑小概念(比老检索方式 TF-IDF 的优势):1、稀有词更值钱;2、出现词的频率高不代表相关度越高,越多能加的分越少;3、文档越长扣分越多
- BM25 是关键词检索的标准打分算法,命中的词越多、命中的越稀有,得分越高,只会字面命中,不懂近义词
- 向量检索:靠意思相近的去寻找,懂语义,例如"水果"与"瓜果"是类似的

检索的配置方式,复杂的地方在这里,在企业中要达到应用层面,苦力活就在这里:

检索方式:选「向量检索」(不用选混合检索,数据量小用不上)
Rerank模型:关闭(原因见下方"真实踩坑")
Top K:保持默认3
Score阈值:保持关闭
- 点击「保存并处理」
为什么Rerank要关闭(真实踩坑案例): 教学测试中发现,某些Rerank模型(比如网易有道的reranker)在部分账号下会出现403权限报错,导致检索直接返回空结果。数据量小(10-20条)时Rerank带来的提升也不明显,建议直接关闭,避免不必要的报错风险。
这个过程是存储到向量数据库,常见的有 milvus、pinecone 等,Dify 自己有个存储向量的地方:

- 商品知识库和生活知识库,都重复上面这套流程,各自单独建一次。
3.5 验证知识库是否处理成功
- 进入刚建好的知识库,看文档列表状态
- 正常应该显示"可用"
如果状态一直卡在"排队中"不动(真实踩坑):
排查步骤:
1. 进「知识库设置」,检查Embedding模型是否显示的确实是bge-large-zh-v1.5
(之前发生过:选了模型但没真正保存成功,还是默认的模型,导致处理失败)
2. 如果模型显示不对,重新选择并保存
3. 用文档列表最右边的"可用"开关,关闭再打开,强制触发重新处理
4. 如果依然卡住,检查硅基流动账户余额是否充足
3.6 用"召回测试"验证检索效果
- 进入知识库左侧菜单「召回测试」
- 输入一个测试问题,比如"榴莲怎么看好坏"
- 查看返回结果,重点看:
Score分数是否从高到低排列(证明按语义相似度排序,不是瞎给的)
排名第一的内容是否真的和问题最相关
第四章:搭建意图判断节点
4.1 添加LLM节点
- 进入Chatflow应用画布
- 点击「开始」节点右侧的「+」
- 添加「LLM」节点
- 双击节点标题,改名为"意图判断"(如果双击改不了名字,不影响功能,跳过即可)
4.2 配置模型
模型选择 deepseek-chat
4.3 配置 意图识别
分类框:
- 导购:导购类,用户想了解购买咨询具体商品
- 知识:知识类,用户想了解知识、挑选方法、保存方法等
- 模糊:同时涉及商品和知识,无法明确分类的
指令框:
- 导购类例子:有什么鱼推荐?鲈鱼多少钱?
- 知识类例子:榴莲怎么看好坏?西瓜如何保存?
- 模糊类例子:榴莲怎么看,有什么推荐吗?家里有一条鱼,怎么做合适,需要搭配些什么菜?
企业知识:用户根本不会提问,需要理解用户到底在问什么就需要大量的调整和迭代. 这次不涉及,但是复杂系统更多还是要实现query改写+多轮对话上下文传递.
第五章:搭建条件分支
5.1 添加条件分支节点
- 在"意图判断"节点右侧点「+」
- 添加「条件分支」节点
5.2 配置判断条件(这里是真实踩坑重灾区,务必仔细核对)
点击条件分支节点本身,配置三个分支:
IF(CASE1):
变量:意图判断 → text
判断方式:是(等于)
值:导购
ELIF(CASE2):
变量:意图判断 → text
判断方式:是(等于)
值:知识
ELSE:
(默认兜底,对应"模糊"的情况,不需要额外配置)
真实踩坑警告: 曾经发生过IF和ELIF两个条件都被误填成"导购"(复制粘贴时没改值),导致所有问题(不管是导购还是知识类)全部被判进同一个分支。配置完一定要逐条核对IF和ELIF的判断值是否不同。
5.3 连接分支到对应的知识检索节点
重要操作提醒:连接已有节点,不要用"+"新建
点条件分支节点右侧的"+"号,弹出的列表只能"新建"一个节点,不能选择连接到画布上已经存在的节点。
正确操作: 鼠标移到分支连接点上,直接按住拖拽一条线,拉到目标节点上再松手,这样才是"连接到已有节点",不会重复新建。
三条分支分别连接:
CASE1(导购) → 连接到"商品知识库"检索节点
CASE2(知识) → 连接到"生活知识库"检索节点
ELSE(默认) → 连接到一个同时检索"商品+生活"两个知识库的节点
第六章:搭建知识检索节点
6.1 导购分支的检索节点
- 添加「知识检索」节点
- 知识库选择「商品知识库.xlsx」
6.2 知识分支的检索节点
- 添加「知识检索」节点
- 知识库选择「生活知识库.xlsx」
6.3 默认(模糊)分支的检索节点
- 添加「知识检索」节点
- 同时勾选两个知识库:商品知识库.xlsx + 生活知识库.xlsx
重要:这个节点有独立的"召回设置",跟单个知识库自己的设置是分开的(真实踩坑重点)
点击这个检索节点的「召回设置」按钮,会弹出一个独立的配置窗口,里面有两个标签页:
「权重设置」 → 用语义相似度和关键词匹配的比例来排序,
不需要调用额外的Rerank模型
「Rerank模型」→ 用一个专门的模型对结果重新排序
真实踩坑案例: 曾经这里默认选中了"Rerank模型"标签,用的是网易有道的reranker模型,结果调用时报403 Forbidden错误(权限不足),导致这个分支的检索一直返回空结果,AI因为没有任何参考内容,开始编造不存在的信息(比如把榴莲问题答成了牛油果)。
解决方法:把这里切换到「权重设置」标签,滑块设置为"语义1.0",完全绕开有问题的Rerank模型。
第七章:搭建生成回答与输出节点
7.1 每条分支各自添加一个"生成回答"节点
在三个知识检索节点后面,各自添加一个「LLM」节点,命名为"生成回答"(三个独立配置,不要合并成一个,这样逻辑更清晰、更容易排查问题)。
7.2 配置模型
三个都选 deepseek-chat
7.3 配置Prompt
导购分支:
你是生鲜电商的AI导购助手,语气亲切自然,像朋友聊天一样,不要太正式。
以下是检索到的相关信息:
{上下文占位符 —— 见下方"如何正确插入"}
用户问题:{{#开始.query#}}
请基于以上信息回答用户问题。要求:
1. 如果检索到的信息里有相关商品,可以自然地推荐并附上规格和价格
2. 如果用户问题比较开放(比如"有什么水果推荐"),应该列出所有相关商品供用户选择,
不要只推荐一个,也不要脑补用户没有表达过的情境(比如担心发胖、热量偏好)
3. 如果检索到的信息完全不相关,诚实说"这个我暂时不太清楚,建议问一下客服哦",不要编造
4. 回答控制在3句话以内,口语化
知识分支:
你是生鲜电商的AI导购助手,语气亲切自然,像朋友聊天一样,不要太正式。
以下是检索到的相关信息:
{上下文占位符}
用户问题:{{#开始.query#}}
请基于以上信息回答用户问题。要求:
1. 优先回答知识类问题(怎么挑选、怎么保存、怎么做)
2. 如果检索到的知识和某个商品相关,可以顺带提一句"我们店里也有卖哦"
3. 如果检索到的信息完全不相关,诚实说"这个我暂时不太清楚,建议问一下客服哦",不要编造
4. 回答控制在3句话以内,口语化
5. 不要用"你是想问...吧"这类复述句开头,直接回答
默认(模糊)分支:
你是生鲜电商的AI导购助手,语气亲切自然,像朋友聊天一样,不要太正式。
以下是检索到的相关信息(可能包含商品信息和相关知识):
{上下文占位符}
用户问题:{{#开始.query#}}
请基于以上信息回答用户问题。要求:
1. 这类问题往往既涉及商品又涉及知识,尽量两方面都照顾到
2. 如果检索到的信息中有一部分完全不相关,就只用相关的那部分回答,不要硬凑
3. 如果都不相关,诚实说"这个我暂时不太清楚,建议问一下客服哦",不要编造
4. 回答控制在3句话以内,口语化
7.4 如何正确插入"上下文占位符"(真实踩坑重点)
错误做法: 直接手打或者用{x}选择检索节点的result变量(比如{{#导购.result#}}),这样虽然内容能显示,但Dify会一直提示"要启用上下文功能,请在提示中填写上下文变量",警告不会消失。
正确做法:
- 光标停在SYSTEM框里想插入的位置
- 点击
{x}图标 - 在弹出的变量列表最下方,找到「上下文」这个专门的选项(带文档图标)
- 点击插入
插入成功的标志:文本框里会出现一个紫色背景的标签块(不是普通文字),这时候警告提示会自动消失。
7.5 每个"生成回答"节点后面,添加"直接回复"节点
这一步经常被遗漏,是导致"预览测试时明明LLM生成了内容,但对话框里什么都看不到"的直接原因。
- 在每个"生成回答"节点右侧点「+」
- 添加「直接回复」节点
- 在"回复"输入框里,点
{x}图标 - 选择"生成回答"节点的
text变量插入(不要手打)
为什么必须要这一步: "生成回答"节点只负责让LLM"思考"生成内容,这段内容存在内部变量里,不会自动显示给用户。因为Chatflow可能有多个LLM节点在不同分支工作,系统无法自动判断该展示哪一个的结果,必须用"直接回复"节点明确指定"这次要把哪个变量的内容,正式输出给用户看"。
三条分支都要各自配置一个"直接回复"节点。
第八章:测试与迭代
8.1 十道标准测试题
导购类(4题):
1. 有什么鱼推荐吗
2. 鲈鱼多少钱一条
3. 有没有新鲜的虾
4. 想买点水果,有什么推荐
知识类(4题):
5. 鲈鱼怎么做好吃
6. 榴莲怎么看好坏
7. 草莓怎么保存
8. 鸡蛋怎么判断新不新鲜
模糊类(2题):
9. 家里有条鲈鱼,怎么做,你们还有卖吗
10. 想吃榴莲但怕挑到不好的,有推荐的吗
8.2 三层打分标准
硬错误:回答了错误信息(比如推荐了不存在的商品,说错价格)—— 最严重,优先修
软错误:方向对但不精准(比如脑补了用户没提过的情境,检索范围过宽带出无关内容)
体验问题:内容准确但表达生硬(比如机械的复述式开头)—— 优先级较低但影响体验
8.3 真实测试中发现的典型问题案例(可直接用于培训举例)
案例一:复述式开头(体验问题,影响多题)
测试发现,知识类问题的回答统一以"你是想问...吧"这种复述句开头,显得生硬,不像真人对话。
修复方法: 在Prompt里明确加一条约束"不要用'你是想问...吧'这类复述句开头,直接回答"。
效果: 加了这条约束后,涉及的题目评分从4/5统一提升到5/5。
案例二:数据切片粒度问题(软错误,技术含量最高的案例)
测试"榴莲怎么看好坏"这个通用问题时,回答语气却像在回应"我的榴莲有酒精味"这种具体场景,答非所问。
根因: 原始知识库数据把"通用问法"和"具体场景问法"混在了同一条数据的问题字段里。
第一次尝试(未完全成功): 只新增了一条通用挑选方法的数据,但没修改旧数据,导致新旧数据同时被检索到,AI仍然优先套用旧数据的语气。
真正的修复: 把旧数据的问题字段也同步修改,让两条数据的语义边界清晰分开。
这个案例适合重点讲给学生听——它展示了"第一次没做对,重新定位问题,第二次才真正解决"的完整迭代过程,比一次性做对更有教学价值,也更符合真实工程场景。
8.4 测试记录表格模板
| 题号 | 问题 | 回答摘要 | 硬错误 | 软错误 | 体验问题 | 评分(1-5) |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| ... |
附录:故障速查表
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| txt文件上传失败 | TextEdit默认RTF格式,不是真纯文本 | 改用Excel格式 |
| 知识库处理卡在"排队中"不动 | Embedding模型没有真正保存生效 | 重新选择模型保存,用开关重启触发重新处理 |
| 检索完全不生效,像关键词搜索 | 索引方式误选了"经济"模式 | 改选「高质量」 |
| 意图判断准确,但流程总走进同一个分支 | 条件分支的IF/ELIF判断值填错或重复 | 逐条核对每个CASE的判断值是否不同 |
| ELIF连接的节点是空的 | 用"+"新建导致没连到已有节点 | 改用拖拽连接线的方式手动连接 |
| 某分支检索返回空结果,AI开始编造内容 | 多知识库检索节点的独立"召回设置"里,Rerank模型403权限报错 | 把召回设置切换到「权重设置」模式 |
| SYSTEM里插入了变量,但"上下文未设置"警告不消失 | 用了普通变量语法,不是专门的"上下文"占位符 | 用{x}图标从列表底部选「上下文」选项插入 |
| 生成回答节点显示成功,但对话框看不到任何回复 | 忘记在后面接"直接回复"节点 | 添加直接回复节点,插入text变量 |
| AI回答答非所问,语气像在回应用户没说过的具体情况 | 知识库数据的问题字段混合了不同粒度的提问 | 把通用问法和具体场景问法拆成独立的两条数据 |
| 回答开头总是"你是想问...吧" | Prompt里没有约束表达方式 | 加一条"不要用复述句开头,直接回答"的要求 |
本手册基于真实Dify项目搭建全过程整理,所有故障案例均为实际操作中真实发生,非假设场景。