Appearance
1.2.1 一个最小可用的 RAG 系统由哪些部分组成?
如果你只是想先把一个最小可用的 RAG 系统搭起来,不需要一上来就把所有复杂能力都补齐。先把核心链路跑通更重要。
一个最小可用的 RAG 系统,通常至少包含下面六个部分:
1. 知识来源
首先你得有一批可用资料。这些资料可以是:
- 文档
- FAQ
- 网页内容
- 产品手册
- Markdown 知识库
- 数据库导出的文本字段
没有知识来源,就没有 RAG。因为 RAG 的前提就是:回答要建立在外部资料之上。
2. 数据处理
原始资料通常不能直接拿去检索,所以要做最基本的处理,比如:
- 清洗噪声
- 切块
- 补充元数据
这一步的目标,是让资料变得更适合后续检索,而不是只把原文原样存进去。
3. 索引或知识存储
处理完之后,需要把资料组织成可检索的形式。最常见的是:
- 向量索引
- 关键词索引
- 或两者结合
这一层的作用,是让系统在用户提问时,能尽快找到相关内容。
4. 检索器
用户提问后,系统要根据问题到知识库里找相关内容。这个过程通常就是检索器在工作。
它负责回答一个问题:
这批知识里,哪些内容最可能和当前问题有关?
5. 上下文构造
找到资料以后,不能直接把所有结果原样扔给模型。通常还要做一些整理,比如:
- 去重
- 排序
- 截断
- 拼接
这一步的目标,是让模型拿到一份更适合回答的上下文,而不是一堆杂乱材料。
6. 大模型生成
最后,大模型会根据:
- 用户问题
- 检索结果
- 你构造好的上下文
生成最终答案。
所以最小 RAG 的核心闭环就是:
准备知识 -> 处理知识 -> 建索引 -> 检索 -> 构造上下文 -> 生成答案
如果系统答不好,最先该看哪一部分
理解“最小系统由哪些部分组成”之后,更重要的是知道:出问题时应该先往哪一层查。
一个很实用的初步判断可以是这样:
1. 系统完全找不到答案
优先看:
- 知识来源里是否真的有这份资料
- 数据处理时有没有把关键信息清洗掉
- 建索引时有没有把这批内容写进去
2. 系统能找到相关内容,但回答还是偏
优先看:
- 检索出来的片段是不是最关键的
- 上下文构造时有没有把关键信息排在前面
- 是否混入了太多噪声
3. 系统回答像在“自己发挥”
优先看:
- 给模型的材料够不够完整
- Prompt 是否要求模型基于材料回答
- 资料不足时有没有要求模型明确说不知道
也就是说,理解这六个模块的意义,不只是知道“系统由什么组成”,而是要能把它们变成后面排查问题的坐标系。
一个最小系统通常还没有什么
很多时候,一个“能跑”的最小系统还没有下面这些能力:
- 权限控制
- 增量更新
- 混合检索
- 重排
- 评测体系
- 观测与告警
- 缓存与降级
但这并不影响它作为最小可用系统存在。因为最小系统的重点不是一步到位,而是先把最基本的因果链路跑通,确认:
- 系统能不能找到资料
- 模型能不能基于资料回答
- 回答质量有没有明显比裸模型更好
可以先这样理解“最小可用”
“最小可用”的意思不是“最简单”,而是:
- 元件最少
- 链路完整
- 可以验证价值
只要你已经能用一批外部资料稳定回答问题,这个系统就已经具备了 RAG 的最小形态。
但也要注意,“最小可用”不等于“已经足够上线”。它只是意味着:你已经可以开始验证这条链路到底有没有真实价值。