大模型rag实战原理与应用构建

接入与开发

给应用开发者讲清 RAG 的工程落地做法,覆盖切分入库、检索拼装、超时并发、降级日志到上线评测的完整流程。

很多人把 RAG 卡在「知道原理但搭不起来」这一步:文档切完不知道合不合适,检索回来接不上提示词,上线后偶发超时和空答案也说不清哪一环坏了。这篇按工程顺序拆一遍,从知识库构建到服务化上线,每步给出可照做的动作和排查顺序,并说明什么情况下这套做法不适用。

RAG 的原理几句话能讲完:把资料切块存进向量库,问题来了先检索相关块,再拼进提示词让模型照着答。难点从来不在原理,而在工程链路上——切多大切多小、召回几条、超时设几秒、答不上来怎么办。任何一环没想清楚,上线后就是偶发空答案和莫名超时。

这篇按工程顺序从进料走到上线,每一步给出可照做的动作和排查顺序。要注意的是,这套流程适合「答案基本写在文档里」的场景;如果你的问题需要跨十几个文档做多步推理,或者资料本身在快速变化,下面的做法要按节末说的方式调整。

进料与切分:决定后面能不能检索到

这一步做砸了,后面怎么调提示词都救不回来。核心原则是:切之前先洗,切的时候保证「一个问题能被完整回答」,切完带上元数据。很多人跳过清洗直接切 PDF,结果每块都夹着页眉页脚和目录残渣,检索命中率自然难看。

  1. 清洗文档把页眉页脚、页码、目录、水印、乱码去掉。扫描件先走 OCR,表格类资料单独处理,不要和正文混在一个流程里。验证方式:随机抽几页输出纯文本,肉眼扫一遍有没有噪声。
  2. 确定切分粒度段落优先、句子保底,块与块之间留少量重叠,避免答案正好被切断。判断标准是拿一个典型问题去问:这一块单独拿出来能不能回答它。不能就说明切得太碎或太大。
  3. 补齐元数据每块除了正文,至少带上来源文件名、标题路径、更新时间。后面做过滤、展示引用、判断资料新旧全靠它。缺了元数据的块,等于无法追溯。
  4. 小规模试检索入库前抽十几条真实问题跑一遍,看命中的块是不是你想给的那几块。切得不对在这步就能发现,别等全量灌完再返工,那时候改切分策略等于重来一遍。

检索与拼装:召回到喂给模型这一段

检索不是「向量搜一下就完事」。纯向量对编号、专有名词、型号这类精确匹配容易漏,常见做法是向量召回拿候选,再用关键词或重排模型做二次筛选。拼提示词时顺序也有讲究:资料在前、问题在后,并明确要求它只依据资料回答。

环节常见做法判断标准
初次召回向量检索取一批候选候选里至少有一条真的相关
二次筛选关键词匹配或重排排序后第一条通常就是答案所在块
提示词拼装资料在前、问题在后、限定依据资料明确给出「资料不足就直说」的出口
上下文预算控制塞入的资料总量块多不等于答得好,超预算会挤掉对话历史
  • 命中为空或相似度普遍偏低时,不要让模型硬答,走兜底回复或转人工,这条兜底要可配置
  • 拼多块资料时做去重和排序,来源相近的块合并,避免同一段话占掉一半上下文
  • 具体上下文长度阈值按你用的模型去 /models 核对,不要照搬别人的数字
  • 把每次检索的命中块 ID 记下来,方便后面判断答错是没检索到还是模型没用上

服务化:超时、并发、降级怎么设

本地跑通和上线服务是两回事。上线后最常见的问题是偶发超时和整条链路一起挂。解决办法是把检索和生成拆开设超时、限制并发、准备降级路径,并把关键日志记全。没有日志,出了问题只能靠猜。

分段超时
检索慢通常是本地库或网络问题,生成慢是接口问题,混在一起设一个超时就没法定位
并发排队
批量导入或批量问答要限流,按接口方给的额度分档排队,失败请求走指数退避重投
降级策略
生成失败时切备选模型或直接返回检索原文,别让整条链路一起挂,降级要能开关
关键日志
至少记问题原文、命中的块 ID、耗时分解、最终回答,缺一项复盘就得靠猜
# 排查顺序:先看哪一段超时,再决定改什么
1. 看日志里的耗时分解,区分检索耗时和生成耗时
2. 检索超时 → 查索引、网络、数据库连接
3. 生成超时 → 查接口额度、并发、是否触发限流
4. 两者都正常但偶发失败 → 查重试逻辑和降级开关是否生效

评测与迭代:改完到底变好没有

没有评测的调优就是玄学。你需要一组固定的问题集,每次改动前后都跑一遍对比。更关键的是把检索命中率和回答质量分开看:答错可能是没检索到,也可能是检索到了但模型没用上,这两者的修法完全不同。

现象可能原因先查哪一环
答非所问检索没命中相关块切分粒度、召回条数
答得含糊检索到了但模型没用上提示词限定语、上下文顺序
空答案相似度低或超时兜底策略、超时设置
新问题答不出知识库没覆盖是否需要补资料而非调参数
  • 问题集覆盖三类:资料里有答案、资料里没有、问法很口语,每次改动都跑对比
  • 上线后定期回看真实问题里漏答和多答的那批,优先补资料而不是反复调提示词
  • 记录每次改动的版本和对应评测结果,否则改多了自己都记不清哪版更好
  • 如果业务问题高度依赖多步推理或跨文档整合,纯 RAG 可能不够,要评估是否引入 Agent 式检索循环
下一步想横向比一下各家模型的上下文长度和接口限制,或者看看别人踩过的中转站坑,可以去站内对应页面核对当时的数字。

常见问题

知识库文档量不大,还需要向量检索吗?

几十篇以内的稳定资料,直接把全文塞进上下文加上关键词过滤往往更省事,效果也不差。只有当资料量让上下文装不下、或者更新频繁需要局部替换时,向量检索的收益才明显。判断标准是装不装得下,不是资料多高级。

检索明明命中了,模型还是答错,问题出在哪?

先看拼进去的资料是不是被截断或排序靠后被模型忽略,再看提示词有没有明确约束「只依据资料」。还有一种常见情况是命中的块本身不完整,答案被切成了两半,这属于切分环节的问题,要从进料那步回头查。

RAG 上线后需要一直维护吗?

需要,但维护量取决于资料变更频率。资料基本不动的场景,主要工作是定期看漏答样本;资料天天更新的场景,要保证增量入库和旧块失效能自动跑通,否则模型会拿着过期内容一本正经地答。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。