很多人第一次做 RAG,卡在不是不会调模型,而是不知道先做哪一步:文档怎么切、向量存哪、检索结果怎么塞进提示词、答得不好该改哪一段。这篇按搭建顺序拆成几步,每步给出可执行的检查点,最后列几组高频故障和对应动作。文中不写死任何数字,价格和模型规格到站内对应页面按当时数据核对。
很多人第一次做 RAG,卡的不是不会调模型,而是不知道先做哪一步:文档怎么切、向量存哪、检索结果怎么塞进提示词、答得不好该改哪一段。这篇按搭建顺序拆成几步,每步给一个可以停下来检查的点,跑通了再往下走。
文中不写死任何数字,价格和模型规格到站内对应页面按当时数据核对。整套链路建议从小样本开始,别一上来就清洗全量数据,否则很容易在进料阶段耗掉全部精力。
先把环境和密钥跑通,别急着做检索
第一步只做一件事:确认你的程序能向 DeepSeek 发一次最小的对话请求,拿到正常回复。这一步没通就去写切片脚本,后面出了问题分不清是网络、密钥还是检索逻辑。接口地址和参数写法以站内兼容说明为准,同样的调用有时要换 Base URL。
- 发一次最小请求只发一句固定问题,打印完整返回。能拿到回复说明密钥和网络都没问题,把返回结构记下来,后面解析用得上。
- 单独选向量模型向量模型和对话模型是两条线,别默认沿用同一个供应商。选型看中文语义效果、调用稳定性和批量入库速度,到站内模型资料库对照。
- 准备小样本先拿十来份自己熟悉内容的文档跑通全链路,因为你知道正确答案长什么样,召回对不对一眼能看出来。
文档进料与切片:决定后面能不能检到
检索效果的上限在入库时就定了。这一阶段最容易出问题的是脏数据:页眉页脚、断行、表格错位、扫描件没做 OCR。先清洗再切,不要指望模型在检索阶段帮你补。
- 去页眉页脚和重复水印,合并被硬换行打断的句子
- 表格单独抽成结构化文本,别和正文混在一起切
- 扫描件先过 OCR,识别完抽查几页,乱码多的整份丢掉重做
- 按语义边界切,标题、段落、条款各自成片,别按固定字数硬切
- 每片带上来源标题和位置信息,回答才能标出处
入库后先别急着接对话,抽十来个你确定答案在库里的问题做召回自测。看命中的片段里有没有正确内容,命中不了就回头改清洗和切片,不要往下走。这一步的判断标准很直接:正确片段在不在召回结果里。
| 现象 | 可能原因 | 先做什么 |
|---|---|---|
| 召回里完全没正确片段 | 切片切断了答案或清洗过度 | 换切片粒度,按标题分段重试 |
| 召回有片段但很碎 | 切得太细,上下文不完整 | 合并相邻片段,或加父块索引 |
| 召回一堆无关内容 | 切片里杂质多,相似度被稀释 | 回去做清洗,去掉模板文字 |
| 同一问题每次结果差很多 | 向量库或检索参数不稳定 | 固定检索参数,先复现再调 |
检索与拼装:把片段变成模型能用的上下文
召回条数和上下文长度是一对取舍。先小后大,条数多了会稀释关键信息,token 成本也跟着涨。判断标准是:加条数之后答对率有没有提升,没提升就退回上一档。
提示词里要明确写「只依据给定资料回答,资料没有就说没有」,这条能明显压住编造。把来源标识一起喂进去,回答里才好标出处。拼装模板可以参考站内提示词相关文章,别自己从零憋。
- 召回条数
- 先小后大,用答对率验证每一步增量
- 上下文长度
- 受模型窗口限制,超了要截断或分批
- 来源标识
- 片段附带的标题和位置,用来标引用和排查
- 拒答规则
- 资料里没有就明确说没有,减少编造
系统提示:只依据下面资料回答;资料没有覆盖的内容,直接说明未找到,不要推测。
资料片段:
[来源1] ...
[来源2] ...
用户问题:...上线前的验证清单
上线前别只看几个demo问题答得漂亮,要跑一批有标准答案的问题,同时记录延迟和 token 用量。检索和生成两段分别计时,哪段慢一目了然,后面调优有据可依。
| 检查项 | 怎么测 | 不达标怎么办 |
|---|---|---|
| 答对率 | 一批有标准答案的问题跑一遍 | 回看是召回问题还是提示词问题 |
| 引用对不对 | 抽查回答里的出处和原文是否一致 | 检查片段来源标识有没有带对 |
| 延迟 | 检索和生成分开计时 | 慢在检索看向量库,慢在生成看条数 |
| 成本 | 记录每次请求的片段数和 token | 砍召回条数或压缩上下文 |
| 拒答表现 | 问库里没有的问题,看会不会编 | 强化提示词里的拒答规则 |
调优时按排查顺序走:先看召回里有没有正确片段,有就看拼装和提示词,都对再看模型输出。跳着改最容易来回折腾。价格和模型规格到站内页面按当时数据核对,别凭印象选型。
下一步选好模型和向量方案后,把成本算清楚再开工;站内价格追踪页有各家的当时数据,可以对着算一轮。→常见问题
检索到的内容明明对,模型还是答错怎么办?
先看拼装环节:片段是否被截断、顺序是否把关键信息压在很后面。再看提示词有没有明确要求以资料为准。最后才怀疑模型本身,换一版提示词加几条少样本示例,通常比换模型见效快。
DeepSeek 只能做生成那一段吗,向量化要用别的?
对话和生成用 DeepSeek,向量化和重排建议另选专门的嵌入模型,站内向量库和嵌入模型目录可以按当时的口径挑。两段分开也方便你单独替换和调参。
答得不准到底是切片问题还是检索问题,怎么分?
拿同样的问题打印召回片段:片段里压根没有答案,是切片或入库的问题;片段里有但没被排到前面,是检索排序的问题;片段对且排前但答案偏,是提示词或生成的问题。按这个顺序定位,别一上来就调模型参数。