rag 实战篇:构建一个最小可行性的 rag 系统

接入与开发

讲清最小可行 RAG 系统从切片到检索的落地步骤,给切片参数、检索配置和排查顺序,跑通第一版再谈优化。

想给模型接上自己的资料,翻了一圈教程全是架构图和术语,真正动手时卡在「文档切多大」「检索召回几条」「怎么知道答得好不好」。这篇按最小可行系统的目标走一遍:先定一个能跑通的最小闭环,再把切片和检索这几个关键旋钮拧到位,最后用一组小用例验证,别一上来就上高级技巧。

想给模型接上自己的资料,翻了一圈教程全是架构图和术语,真正动手时卡在「文档切多大」「检索召回几条」「怎么知道答得好不好」。这篇按最小可行系统的目标走一遍:先定一个能跑通的最小闭环,再把切片和检索这几个关键旋钮拧到位,最后用一组小用例验证,别一上来就上高级技巧。

看这篇之前先对齐一个心态:第一版的目标不是「好用」,是「跑通且可回查」。你需要的其实就是一个能读文档、能按问题找片段的脚本,加上十来个真实问题当验收尺子。想优化之前,先让这套东西稳定输出、每步可打印可核对。

先划一个能跑通的最小闭环

最小闭环只包含四步:读文档、切片、向量化入库、按问题检索并拼进提示词。重排、多路召回、知识图谱这些都属于增量项,先别碰。每步都要能单独打印中间结果,不然出问题不知道卡在哪一环。

  • 给自己一个明确验收口径:准备若干条真实问题,人工看答案有没有引到正确段落,而不是看模型说得像不像
  • 入库和检索用同一套向量模型,中途换模型必须整库重算,否则相似度分数没有可比性
  • 保留原始文档 ID 和片段 ID 的映射,检索出来能反查原文位置
  • 什么情况下不适用:资料本身是扫描件、表格或图文混排,得先做清洗再谈切片,直接切会把内容切碎

切片这一步决定后面能不能召回

切片粒度是整个系统里最容易被低估的旋钮。按语义边界切(标题、段落、列表项),比按固定字数硬切强;固定长度兜底时留一段重叠,别让一个完整句子被劈成两半。每片必须带上来源标识,检索时随正文一起进提示词。

切片做法适用资料容易踩的坑
按标题层级切手册、说明书、长文档层级太深时上层的上下文丢失
按段落或列表项切FAQ、参数表、条目式内容单条太短,检索时上下文不足
固定长度加重叠结构混乱的纯文本重叠过多导致重复召回、浪费上下文
  1. 切完先抽查随机抽十来片读一遍,看是不是一段能独立看懂的话;如果一片里塞了好几个主题,说明切得太粗
  2. 给每片补元信息文件、章节、页码写在片头或元数据字段里,检索时一起拼进提示词,出问题才好回查是哪一段答的
  3. 短条目单独处理FAQ、参数表这类天然短条目逐条入库,别强行合并,合并后检索命中反而变模糊

检索配置按「先够用」来定

召回条数从小往大调:先取少量片段看答案是否已够用,不够再加。召回越多上下文越贵,还容易把噪声一起喂进去。相似度阈值要在自己的数据上试,太严会漏掉正确段,太松会召回一堆不相关内容,用那组固定问题对照调整。

拼提示词的时候明确写一句「只依据给定片段回答,片段里没有就说没有」,能明显减少编造。片段按相关度排序放进去,最相关的放最前面,模型对位置是有偏好的。

召回条数
先取少量看是否够用,不够再加,加到答案不再变好为止
相似度阈值
在自有数据上试出来的边界值,不同向量模型不能复用
提示词约束
要求只依据片段作答、缺失就说缺失,是成本最低的防编造手段

验证与排查:出问题按这个顺序看

答错了别急着怪模型,按「切片 → 检索 → 拼装」的顺序往下查,绝大多数问题在第一步就能定位。下面这个顺序建议固定成习惯,每次出错都走一遍。

  1. 先看切片把命中片段原文打印出来,答错多半是没召回到正确段,而不是模型不行
  2. 再看检索换一两个措辞相近的问法,如果换个说法就召不到了,是向量化或切片粒度的问题
  3. 最后看拼装片段对了但答错,检查提示词里片段有没有被截断、上下文是不是超了长度
现象先查哪里常见原因
完全答不出切片正确段落根本没入库或切碎了
换个问法就失效检索向量化质量或阈值设置不合适
片段对但答案错拼装提示词被截断或没加约束句
答案时好时坏用例集没有固定回归用例,无法判断改动效果
RAG 的第一版不是拼谁的技巧多,是拼谁先把「召回到没召回到」这件事看清楚。

常见问题

最小可行 RAG 一定要用向量数据库吗?

不一定。资料量小的时候,把向量存本地文件、检索时在内存里算相似度也能跑通,先验证效果再换正式库。等条目到几万、要过滤字段或多人同时用时,再迁到向量数据库。向量库选型可以到 /stacks/vector-dbs 对照各家能力。

文档切片长度有没有一个通用推荐值?

没有能照抄的数值,取决于你的文档类型和提问粒度:条目式的资料切短些,长叙述切长些,并允许互相重叠。做法是先定一两组候选切法,用固定问题集对比召回效果,谁命中的正确段落多就用谁。

检索出来的片段都对,模型还是答偏怎么办?

多半出在拼装环节:片段被截断、顺序太乱,或者提示词没有限定「只依据片段」。先把片段按相关度排好、留完整句子、明确约束回答依据,再跑一遍。改完记得用同一组用例复测。

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