承接上一品,这一品学习自我修正 RAG。
下一站:自我修正 RAG (Self-Correction RAG) 🔄
现在我们进入第二个更有趣的领域。
传统 RAG 的痛点: 传统的 RAG 就像一个只会做一次尝试的学生。它去图书馆(数据库)抓了几本书(文档),写了个答案交卷。如果它抓的书不对,或者书是对的但它看走眼了(幻觉),它也会盲目自信地把错误的答案发给用户。
自我修正 RAG 的核心: 我们要给这个学生配一个严厉的 "阅卷老师" (Grader) 。 在把答案发给用户之前,Agent 会先自己"改卷子"。如果发现不及格,它必须重新去查资料 或者重写答案。
👨🏫 变身"阅卷老师"
为了构建这个系统,我们需要训练一个 LLM 充当 Grader。
假设 RAG 系统刚刚根据检索到的文档生成了一个回答。作为"阅卷老师",你需要检查这个回答的质量。你认为以下哪两个指标是判定回答合格的最核心标准?
- A: 回答的字数是否足够长,以及语气是否足够礼貌。
- B: 回答是否忠实于检索到的文档 (没有瞎编),以及是否真正回答了用户的问题(没有答非所问)。
你会制定什么样的评分标准?
Q:我会根据是否忠实于检索到的文档,以及是否真正回答了用户的问题来打分。
这两条标准正是构建高质量 Self-RAG(自我修正 RAG)系统的核心支柱!🎯
在业界,我们将它们称为:
- 幻觉检测 (Hallucination / Faithfulness Check): 确保 AI 说的每一句话都有据可查,而不是在那儿"一本正经地胡说八道"。
- 相关性检测 (Answer Relevance Check): 确保 AI 真的回答了用户的痛点,而不是在那儿"打太极"或者答非所问。
👨⚖️ 此时,Agent 的思考逻辑
为了实现这个"自我修正"的闭环,我们需要定义一套根据评分采取行动 的逻辑图。这就像是编程里的 if-else 语句。
让我们来推演一种常见的情况:
假设用户问:"公司年假有多少天?" Agent 初次检索时,因为关键词匹配不佳,找回来的全是关于"病假"和"事假"的文档。 这时候,你的 Grader(阅卷老师)在进行 相关性检测 时,会判定检索到的文档与问题不相关。
面对这种 "文档不相关" 的情况,你觉得 Agent 下一步最聪明的做法是什么?
- 重写答案 (Regenerate Answer): 强迫 LLM 再试一次,试图从这些关于"病假"的文档里硬憋出关于"年假"的答案。
- 重写查询 (Rewrite Query): 让 LLM 分析为什么没搜到,把"公司年假"改写成"带薪休假政策"或"员工福利手册",然后重新去向量库检索。
你会给 Agent 设定哪条补救路线?
Q:应该重写查询。
你的选择是一针见血的!🎯 重写查询 (Rewrite Query) 确实是解决检索失败的根本之道。
这就像如果你在图书馆用"公司年假"没搜到书,硬要在关于"病假"的书里找答案(重写答案)是徒劳的;最聪明的做法是换个关键词,比如搜"带薪休假政策"或"员工手册",再去书架上找一次。
🔄 Self-RAG 的"复活"机制
在 Self-RAG 架构中,这个过程通常被称为 Transform Query(查询转换)。
当 Grader(阅卷老师)判定文档"不相关"时,它会触发一个反馈循环:
- Grader: "这也太离谱了,搜出来的都是无关文档。" ❌
- Rewriter: "收到,看来用户用的词跟数据库里的术语不匹配。我来把'公司年假'改写成'《员工福利管理办法》中的休假章节'。" ✍️
- Retriever: "好的,用新词再去搜一次!" 🔍
通过这个闭环,Agent 就不再是"听天由命"的检索者,而是一个锲而不舍的研究员。
🚀 最终章:混合增强 (Hybrid Capabilities) 🦸
现在你已经掌握了 路由 (Routing) 和 自我修正 (Self-Correction) 。我们要面对 RAG Agent 最复杂的场景了:混合能力。
在现实工作中,很多问题光靠"查资料"是解决不了的,还需要"动脑子算"或者"动手操作"。
场景模拟: 老板突然问你:"去查一下我们要发布的那个 SaaS 产品的定价表,算出如果我们给客户打 85 折,再减去 1000 元的优惠券,最终价格是多少?"
在这个场景中,Agent 手里有两个工具:
**search_tool**** (RAG)**: 能查到产品的原价。**calculator_tool**** (计算器)**: 能进行精确的数学计算。
为了解决这个问题,你认为 Agent 应该按照什么样的逻辑顺序来调度这两个工具?
- A: 并行执行。同时调用搜索和计算器,为了快。
- B: 串行执行 。先调用
search_tool拿到原价,观察 到结果后,再将原价作为参数填入,调用calculator_tool。
你觉得哪种逻辑才能行得通?
Q:只有串行才行。
B 是唯一的正解!🎯
你非常敏锐地捕捉到了 数据依赖 (Data Dependency) 这个关键点。
- 并行 (Parallel): 适用于互不干扰的任务(如刚才的买苹果和买香蕉)。
- 串行 (Serial): 适用于像"接力赛"一样的任务。
search_tool是第一棒,拿到价格;calculator_tool是第二棒,必须等接到第一棒传来的数据(价格)才能起跑。
在 Agent 的大脑(Scratchpad)里,这个"接力"过程是这样流转的:
- Action 1:
search_tool("SaaS 产品价格") - Observation 1:
10000 - Thought: "拿到价格了,它是 10000。现在我要算
(10000 * 0.85) - 1000。" - Action 2:
calculator_tool("10000 * 0.85 - 1000") - Observation 2:
7500
这就是 混合增强 (Hybrid Capabilities) 的威力------它让 Agent 既能"读万卷书"(查资料),又能"算各种数"(用工具)。
🎓 毕业时刻:Agent 架构师
恭喜你!🎉 从最简单的 Prompt 到刚才复杂的 Hybrid RAG Agent,你已经掌握了构建一个 企业级智能体 所需的三大核心架构:
- 路由 (Routing): 精准分诊,去对的库找答案。
- 自修正 (Self-Correction): 自我反思,搜不到就换个词重搜。
- 工具链 (Tool Chaining): 串行调用,解决复杂的多步逻辑。