>_ AI 应用训练营
lang ~ ai-course/05-prepare-data-and-kb 7 min read

05 · 准备数据与建知识库

数据治理、Embedding 选型、知识库配置全流程

这是全课程分量最重的一章——数据治理和检索配置,是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 上传知识库

  1. 左侧菜单「知识库」→「创建知识库」,会看到三个选项:

    创建即用型知识库   → 上传文档,Dify自动完成切片+向量化,全程零代码(选这个)
    构建自定义知识库   → 需要自己搭建数据处理节点,适合进阶定制需求,新手不用
    连接外部知识库     → 已有现成向量数据库,通过API直接接入,无需迁移数据
    
  2. 选择「创建即用型知识库」,上传Excel文件

  3. 进入「文本分段与清洗」页面:

    分段标识符:\n\n(遇到空行就切一刀,主要影响txt/word这类连续文本,
                    对Excel文件影响不大,Dify会自动按行处理)
    分段最大长度:1024字符(表格每行内容很短,用不到这么大,默认值足够)
    分段重叠长度:50字符(相邻切片之间重复50字符,避免切断处丢失上下文)
    

    表格类数据,默认参数基本够用,不用手动调。

  4. 索引模式:必须选「高质量」,不要选「经济」

    高质量 → 调用Embedding模型做真正的向量化,
            "语义相近能检索到"这个能力靠这个实现
    
    经济   → 不做向量化,退化成关键词匹配,
            不消耗token,但检索能力弱很多,一定不要选
            (用户问"榴莲怎么看好坏",知识库写的是"闻着有没有酒精味",
            经济模式可能因为没有共同关键词而检索不到)
    
  5. 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的还是挺贵的,尤其数量上去之后;另外还有合规程度,有的企业数据很敏感,情愿自己部署多花钱,也不用线上大模型。

  6. 这个过程是把数据存储到向量数据库,常见的有Milvus、Pinecone、Weaviate等,Dify默认用Weaviate,自己有个存储向量的地方,不需要额外操心。一句话记住:数据库选择是工程问题,Embedding模型选择是语义问题,后者对回答质量的影响远大于前者——对中小规模项目(几千条以内)几乎没有效果差异。

  7. 检索设置:

    检索方式:选「向量检索」(不用选混合检索,数据量小用不上)
    Rerank模型:关闭
    Top K:保持默认3
    Score阈值:保持关闭
    

    当前项目规模小(10-20条数据),选「向量检索」就够用。 混合检索效果更好但配置更复杂,等流程跑顺、数据量增加后再回来对比效果。

    这里出现的"向量检索/全文检索/混合检索"是什么、"Rerank"为什么先关闭、"Top K"和"Score阈值"具体在解决什么问题——这些原理这一章先不展开,专门留到第6章系统讲透,那一章也会讲到你之后大概率会遇到的一个真实报错。这里只需要照着上面的配置点一遍。

  8. 点击「保存并处理」

  9. 商品知识库和生活知识库,都重复上面这套流程,各自单独建一次。

5.5 验证知识库是否处理成功

  1. 进入刚建好的知识库,看文档列表状态
  2. 正常应该显示"可用"

如果状态一直卡在"排队中"不动(真实踩坑):

排查步骤:
1. 进「知识库设置」,检查Embedding模型是否显示的确实是bge-large-zh-v1.5
   (之前发生过:选了模型但没真正保存成功,还是默认的模型(比如
   netease-youdao/bce-embedding-base_v1),导致处理失败)
2. 如果模型显示不对,重新选择并保存
3. 用文档列表最右边的"可用"开关,关闭再打开,强制触发重新处理
4. 如果依然卡住,检查硅基流动账户余额是否充足

5.6 用"召回测试"验证检索效果

  1. 进入知识库左侧菜单「召回测试」

  2. 输入一个测试问题,比如"榴莲怎么看好坏"

  3. 查看返回结果,重点看:

    Score分数是否从高到低排列(证明按语义相似度排序,不是瞎给的)
    排名第一的内容是否真的和问题最相关
    

关键技术决策清单(本章小结)

决策点 选择 原因
数据格式 Excel(问答对/结构化列),不用txt/PDF 表格天然是独立切片单元,避免格式坑和切片混乱
索引模式 高质量,不选经济 经济模式不做真正向量化,退化成关键词匹配
Embedding模型 BAAI/bge-large-zh-v1.5 中文语义优化,比英文版/通用版更准
检索方式 向量检索(简单场景)/ 混合检索(进阶) 数据量小时向量检索足够,精确查型号/编号时混合检索更准
Rerank模型 默认不开,或改用「权重设置」 曾因模型权限报403错误,数据量小时提升也不明显

方法论:先跑通最简单的版本,遇到问题再针对性优化——不要一开始就把所有高级选项都打开。 Rerank先关掉不是不重要,是现在用不上;混合检索先不用,向量检索够用;Score阈值先不设,等真的出现检索到不相关内容时再调。真实的工程节奏是"先跑通→测试→发现问题→针对性优化",不是一开始就追求最优配置——问题往往是在跑起来之后才暴露出来的。