这是全课程分量最重的一章——数据治理和检索配置,是RAG项目里"苦力活"最多、但也最能决定效果好坏的部分。
5.1 数据格式:优先 Markdown / Excel
提醒: 如果用Mac自带的TextEdit写txt文件,默认保存格式是富文本(RTF),Finder里显示"多信息文本文稿",即使文件后缀是.txt,Dify也解析不了,会上传失败。可以去TextEdit偏好设置里把默认格式从"丰富文本"改成"纯文本",但更省心的做法是直接换成表格。
直接用Excel,理由不只是避坑:
txt格式:一大段文字,Dify要自己判断从哪里切,容易切错、切乱
Excel格式:每一行天然就是一个独立、完整的知识单元,不需要猜切片边界
表格的每一行天然就是一个独立的知识单元,不需要系统去猜"从哪里切片",比大段文字更可控,检索也更精准。
企业知识: 建立知识库管理机制,谁是负责人,资料范围有哪些,更新频率,切分方式,文件格式,拒答规则,都要定清楚。知识资料更新的SOP也很关键,最怕新旧规则同时存在、版本相互冲突,要多检测。
原始素材的预处理比切分更重要,PPT、PDF等要先转化成结构化的markdown文件。飞书文档(数据打通方便,但也不算纯markdown格式)的应用其实在企业是非常好的数据标准化过程。
5.2 商品知识库数据结构
四列:商品名 / 规格 / 价格 / 卖点
鲈鱼 500g一条 20元 肉多刺少,鲜活
三文鱼块 600g一条 69元
榴莲(金枕) 约3kg一个 89元 现切可选
草莓 250g一盒 15元 当季新鲜
基围虾 500g 35元 鲜活现捞
建议准备10-15条,覆盖多个品类。
5.3 生活知识库数据结构
两列:问题 / 回答(问答对结构,检索精准度最高)——用户问题去匹配"问题"列,命中后直接返回"回答"列,比自由文本段落检索精准度更高。
鲈鱼怎么做? 清蒸红烧都可以
草莓怎么保存? 不洗直接冷藏,吃之前再洗,洗完容易坏得快
基围虾怎么挑新鲜的? 看虾壳是否透亮发青,虾头不发黑,闻着没有腥臭味
关键提醒——问题字段不要混合不同粒度的提问方式:
真实踩坑案例:一开始把"榴莲怎么看好坏"和"我的有酒精味"这两种不同粒度的问法写在同一条数据的问题字段里——
错误示范:
问题:榴莲怎么看好坏,我的有酒精味
回答:有酒精味说明过熟发酵了,不建议吃,正常应该是浓郁果香味
结果是:当用户只问通用的"榴莲怎么看好坏"(没有说自己的具体情况)时,AI依然会用"针对具体场景"的语气回答,显得答非所问。
正确做法:把通用问法和具体场景问法拆成两条独立数据:
正确示范一(通用挑选方法):
问题:榴莲怎么看好坏
回答:看果壳是否裂开一条缝,闻着有没有浓郁果香味,按压软硬适中说明成熟度刚好
正确示范二(具体场景判断):
问题:榴莲有酒精味还能吃吗
回答:有酒精味说明过熟发酵了,不建议吃,正常应该是浓郁果香味
这是数据治理里最容易被忽视、但影响很大的一个细节,培训时建议专门用这个案例给学生讲清楚。(这个案例后续在测试阶段还会返工一次,完整的"第一次没做对→重新定位→真正修复"过程见附录C。)
企业情况:知识库不能太大,一定要精准。
5.4 上传知识库
左侧菜单「知识库」→「创建知识库」,会看到三个选项:
创建即用型知识库 → 上传文档,Dify自动完成切片+向量化,全程零代码(选这个) 构建自定义知识库 → 需要自己搭建数据处理节点,适合进阶定制需求,新手不用 连接外部知识库 → 已有现成向量数据库,通过API直接接入,无需迁移数据选择「创建即用型知识库」,上传Excel文件
进入「文本分段与清洗」页面:
分段标识符:\n\n(遇到空行就切一刀,主要影响txt/word这类连续文本, 对Excel文件影响不大,Dify会自动按行处理) 分段最大长度:1024字符(表格每行内容很短,用不到这么大,默认值足够) 分段重叠长度:50字符(相邻切片之间重复50字符,避免切断处丢失上下文)表格类数据,默认参数基本够用,不用手动调。
索引模式:必须选「高质量」,不要选「经济」
高质量 → 调用Embedding模型做真正的向量化, "语义相近能检索到"这个能力靠这个实现 经济 → 不做向量化,退化成关键词匹配, 不消耗token,但检索能力弱很多,一定不要选 (用户问"榴莲怎么看好坏",知识库写的是"闻着有没有酒精味", 经济模式可能因为没有共同关键词而检索不到)Embedding模型:选
BAAI/bge-large-zh-v1.5把一段文字变成一串数字向量化。
类比:向量化 = 把文字变成宇宙里的坐标点。 "青苹果"会转化成
0.12、0.85这样的一个点,存在一个库里;用户提问也会转化成一个点,然后在这个海量的宇宙中去找哪个点跟它最近。判断"近不近"的概念叫余弦相似度——看两个向量方向有多接近。不要选: BAAI/bge-large-en-v1.5 → 后缀-en是英文优化,不适合中文数据 netease-youdao/bce-embedding-base_v1 → 中英通用,但不如专精中文的准 BAAI/bge-m3 → 多语言通用,能力强但更重,中文场景没必要 要选: BAAI/bge-large-zh-v1.5 → 后缀-zh专门为中文语义优化,这个项目选这个其他知识:维度,每个模型都对应一个维度,维度越高精度越准,但成本和速度都会变慢,768-1024维度差不多。
企业知识:跑分第一不代表符合你的场景,需要进行实际测试,先用中文通用的跑通再进行评估。企业内部还需要评估价格和数据敏感度——OpenAI的还是挺贵的,尤其数量上去之后;另外还有合规程度,有的企业数据很敏感,情愿自己部署多花钱,也不用线上大模型。
这个过程是把数据存储到向量数据库,常见的有Milvus、Pinecone、Weaviate等,Dify默认用Weaviate,自己有个存储向量的地方,不需要额外操心。一句话记住:数据库选择是工程问题,Embedding模型选择是语义问题,后者对回答质量的影响远大于前者——对中小规模项目(几千条以内)几乎没有效果差异。
检索设置:
检索方式:选「向量检索」(不用选混合检索,数据量小用不上) Rerank模型:关闭 Top K:保持默认3 Score阈值:保持关闭当前项目规模小(10-20条数据),选「向量检索」就够用。 混合检索效果更好但配置更复杂,等流程跑顺、数据量增加后再回来对比效果。
这里出现的"向量检索/全文检索/混合检索"是什么、"Rerank"为什么先关闭、"Top K"和"Score阈值"具体在解决什么问题——这些原理这一章先不展开,专门留到第6章系统讲透,那一章也会讲到你之后大概率会遇到的一个真实报错。这里只需要照着上面的配置点一遍。
点击「保存并处理」
商品知识库和生活知识库,都重复上面这套流程,各自单独建一次。
5.5 验证知识库是否处理成功
- 进入刚建好的知识库,看文档列表状态
- 正常应该显示"可用"
如果状态一直卡在"排队中"不动(真实踩坑):
排查步骤:
1. 进「知识库设置」,检查Embedding模型是否显示的确实是bge-large-zh-v1.5
(之前发生过:选了模型但没真正保存成功,还是默认的模型(比如
netease-youdao/bce-embedding-base_v1),导致处理失败)
2. 如果模型显示不对,重新选择并保存
3. 用文档列表最右边的"可用"开关,关闭再打开,强制触发重新处理
4. 如果依然卡住,检查硅基流动账户余额是否充足
5.6 用"召回测试"验证检索效果
进入知识库左侧菜单「召回测试」
输入一个测试问题,比如"榴莲怎么看好坏"
查看返回结果,重点看:
Score分数是否从高到低排列(证明按语义相似度排序,不是瞎给的) 排名第一的内容是否真的和问题最相关
关键技术决策清单(本章小结)
| 决策点 | 选择 | 原因 |
|---|---|---|
| 数据格式 | Excel(问答对/结构化列),不用txt/PDF | 表格天然是独立切片单元,避免格式坑和切片混乱 |
| 索引模式 | 高质量,不选经济 | 经济模式不做真正向量化,退化成关键词匹配 |
| Embedding模型 | BAAI/bge-large-zh-v1.5 | 中文语义优化,比英文版/通用版更准 |
| 检索方式 | 向量检索(简单场景)/ 混合检索(进阶) | 数据量小时向量检索足够,精确查型号/编号时混合检索更准 |
| Rerank模型 | 默认不开,或改用「权重设置」 | 曾因模型权限报403错误,数据量小时提升也不明显 |
方法论:先跑通最简单的版本,遇到问题再针对性优化——不要一开始就把所有高级选项都打开。 Rerank先关掉不是不重要,是现在用不上;混合检索先不用,向量检索够用;Score阈值先不设,等真的出现检索到不相关内容时再调。真实的工程节奏是"先跑通→测试→发现问题→针对性优化",不是一开始就追求最优配置——问题往往是在跑起来之后才暴露出来的。