Appearance
14.2.3 一个成熟 RAG 系统最重要的设计原则有哪些?
先给结论:成熟 RAG 的核心原则,不是“功能越多越好”,而是“可用、可控、可评测、可更新、可回退”。
如果前面两篇是在讲为什么要先稳住系统,那么这一篇就是把“稳住系统”具体拆开。
下面这些原则,不是用来背诵的,而是你在做设计取舍时可以直接拿来判断的标准。
1. 可观测优先
没有可观测性,问题就只能靠猜。
所以第一原则不是“先把功能做满”,而是“先让系统内部发生了什么能够被看到”。
至少建议记录:
- 用户问题
- 检索返回了哪些候选
- 每条候选的关键 metadata
- 最终拼给模型的上下文
- 最终答案和引用来源
只要这些信息缺失,排障成本就会非常高。
2. 评估先于优化
没有评估,就没有真正意义上的优化。
你做的每一次改动,都应该可以被比较,而不是只能靠印象判断。
哪怕一开始没有完整评测体系,也至少应该先建立一组最小评测集,用来覆盖:
- 高频问题
- 容易出错的问题
- 权限和范围敏感的问题
- 更新后容易回归的问题
只要这个基础在,系统就具备了持续改进的可能。
3. 证据优先于模型
答案质量的上限,很大程度上由证据质量决定。
如果关键证据都没稳定进入上下文,那么再强的模型也只是更流畅地输出不完整答案。
所以当团队讨论“是不是该换模型”时,更值得先问的是:
- 关键证据是否稳定可召回
- 证据是否足够完整
- 证据是否带着正确边界和时间信息
只有这些基本成立后,模型能力才真正开始成为主要变量。
4. 更新与回退必须内置
成熟系统必须假设这些事情一定会发生:
- 文档会更新
- 数据会误入库
- 某次索引构建会导致回归
- 某条规则会在未来失效
所以更新策略和回退能力不是附加项,而是系统生命线。
如果系统不能快速失效旧知识、重建索引、对比新旧结果、必要时回滚,那它迟早会在持续运行中失稳。
5. 权限与范围控制必须前置
生产环境里,权限和范围是刚性约束,不能等到生成之后再补救。
这条原则非常重要,因为错误内容一旦进入上下文,就已经构成风险。
所以更合理的做法是:
- 在检索前或检索中就做范围约束
- 让 metadata / payload 过滤成为索引设计的一部分
- 把租户、版本、产品线、地域、状态等边界前置
这样系统才是真正可上线的。
6. 复杂能力延后
重排、多路召回、多模态、Agentic Retrieval 都是有价值的。
但它们都应该建立在“基础链路已经稳定”的前提上。
这条原则不是保守,而是为了控制复杂度增长速度。
成熟系统不是“能堆多少能力”,而是“每加一层复杂度,都知道它在解决什么问题,以及怎么证明它真的有效”。
7. 参数服务于结构,不要反过来
像 chunk_size、overlap、TopK 这些参数都很重要,但它们应该服务于数据结构、检索策略和上下文预算,而不是被当成一切问题的总开关。
如果系统性问题还没解决,就过早沉迷参数微调,通常只会在局部补丁上反复打转。
8. 优先建设最小可维护闭环
一个系统真正进入“可持续优化”阶段的标志,不是它已经很强,而是它至少具备下面这个最小闭环:
- 能稳定跑通
- 能复现问题
- 能记录关键过程
- 能比较改动前后
- 能在出问题时回退
只要这个闭环建立起来,系统就能逐步变强;
如果这个闭环没有建立,再强的局部能力也很难长期稳定。
一句话总结
成熟 RAG 的设计原则,可以浓缩成一句话:先让系统可控,再让系统变强。
可观测、可评测、可更新、可回退,是长期稳定的真正基础。