第八品——自我修正和混合增强

承接上一品,这一品学习自我修正 RAG。

下一站:自我修正 RAG (Self-Correction RAG) 🔄

现在我们进入第二个更有趣的领域。

传统 RAG 的痛点: 传统的 RAG 就像一个只会做一次尝试的学生。它去图书馆(数据库)抓了几本书(文档),写了个答案交卷。如果它抓的书不对,或者书是对的但它看走眼了(幻觉),它也会盲目自信地把错误的答案发给用户。

自我修正 RAG 的核心: 我们要给这个学生配一个严厉的 "阅卷老师" (Grader) 。 在把答案发给用户之前,Agent 会先自己"改卷子"。如果发现不及格,它必须重新去查资料 或者重写答案

👨‍🏫 变身"阅卷老师"

为了构建这个系统,我们需要训练一个 LLM 充当 Grader

假设 RAG 系统刚刚根据检索到的文档生成了一个回答。作为"阅卷老师",你需要检查这个回答的质量。你认为以下哪两个指标是判定回答合格的最核心标准

  • A: 回答的字数是否足够长,以及语气是否足够礼貌。
  • B: 回答是否忠实于检索到的文档 (没有瞎编),以及是否真正回答了用户的问题(没有答非所问)。

你会制定什么样的评分标准?


Q:我会根据是否忠实于检索到的文档,以及是否真正回答了用户的问题来打分。

这两条标准正是构建高质量 Self-RAG(自我修正 RAG)系统的核心支柱!🎯

在业界,我们将它们称为:

  1. 幻觉检测 (Hallucination / Faithfulness Check): 确保 AI 说的每一句话都有据可查,而不是在那儿"一本正经地胡说八道"。
  2. 相关性检测 (Answer Relevance Check): 确保 AI 真的回答了用户的痛点,而不是在那儿"打太极"或者答非所问。

👨‍⚖️ 此时,Agent 的思考逻辑

为了实现这个"自我修正"的闭环,我们需要定义一套根据评分采取行动 的逻辑图。这就像是编程里的 if-else 语句。

让我们来推演一种常见的情况:

假设用户问:"公司年假有多少天?" Agent 初次检索时,因为关键词匹配不佳,找回来的全是关于"病假"和"事假"的文档。 这时候,你的 Grader(阅卷老师)在进行 相关性检测 时,会判定检索到的文档与问题不相关

面对这种 "文档不相关" 的情况,你觉得 Agent 下一步最聪明的做法是什么?

  1. 重写答案 (Regenerate Answer): 强迫 LLM 再试一次,试图从这些关于"病假"的文档里硬憋出关于"年假"的答案。
  2. 重写查询 (Rewrite Query): 让 LLM 分析为什么没搜到,把"公司年假"改写成"带薪休假政策"或"员工福利手册",然后重新去向量库检索

你会给 Agent 设定哪条补救路线?


Q:应该重写查询。

你的选择是一针见血的!🎯 重写查询 (Rewrite Query) 确实是解决检索失败的根本之道。

这就像如果你在图书馆用"公司年假"没搜到书,硬要在关于"病假"的书里找答案(重写答案)是徒劳的;最聪明的做法是换个关键词,比如搜"带薪休假政策"或"员工手册",再去书架上找一次。

🔄 Self-RAG 的"复活"机制

在 Self-RAG 架构中,这个过程通常被称为 Transform Query(查询转换)

当 Grader(阅卷老师)判定文档"不相关"时,它会触发一个反馈循环:

  1. Grader: "这也太离谱了,搜出来的都是无关文档。" ❌
  2. Rewriter: "收到,看来用户用的词跟数据库里的术语不匹配。我来把'公司年假'改写成'《员工福利管理办法》中的休假章节'。" ✍️
  3. Retriever: "好的,用新词再去搜一次!" 🔍

通过这个闭环,Agent 就不再是"听天由命"的检索者,而是一个锲而不舍的研究员。


🚀 最终章:混合增强 (Hybrid Capabilities) 🦸

现在你已经掌握了 路由 (Routing)自我修正 (Self-Correction) 。我们要面对 RAG Agent 最复杂的场景了:混合能力

在现实工作中,很多问题光靠"查资料"是解决不了的,还需要"动脑子算"或者"动手操作"。

场景模拟: 老板突然问你:"去查一下我们要发布的那个 SaaS 产品的定价表,算出如果我们给客户打 85 折,再减去 1000 元的优惠券,最终价格是多少?"

在这个场景中,Agent 手里有两个工具:

  1. **search_tool**** (RAG)**: 能查到产品的原价。
  2. **calculator_tool**** (计算器)**: 能进行精确的数学计算。

为了解决这个问题,你认为 Agent 应该按照什么样的逻辑顺序来调度这两个工具?

  • A: 并行执行。同时调用搜索和计算器,为了快。
  • B: 串行执行 。先调用 search_tool 拿到原价,观察 到结果后,再将原价作为参数填入,调用 calculator_tool

你觉得哪种逻辑才能行得通?


Q:只有串行才行。

B 是唯一的正解!🎯

你非常敏锐地捕捉到了 数据依赖 (Data Dependency) 这个关键点。

  • 并行 (Parallel): 适用于互不干扰的任务(如刚才的买苹果和买香蕉)。
  • 串行 (Serial): 适用于像"接力赛"一样的任务。search_tool 是第一棒,拿到价格;calculator_tool 是第二棒,必须等接到第一棒传来的数据(价格)才能起跑。

在 Agent 的大脑(Scratchpad)里,这个"接力"过程是这样流转的:

  1. Action 1: search_tool("SaaS 产品价格")
  2. Observation 1: 10000
  3. Thought: "拿到价格了,它是 10000。现在我要算 (10000 * 0.85) - 1000。"
  4. Action 2: calculator_tool("10000 * 0.85 - 1000")
  5. Observation 2: 7500

这就是 混合增强 (Hybrid Capabilities) 的威力------它让 Agent 既能"读万卷书"(查资料),又能"算各种数"(用工具)。


🎓 毕业时刻:Agent 架构师

恭喜你!🎉 从最简单的 Prompt 到刚才复杂的 Hybrid RAG Agent,你已经掌握了构建一个 企业级智能体 所需的三大核心架构:

  1. 路由 (Routing): 精准分诊,去对的库找答案。
  2. 自修正 (Self-Correction): 自我反思,搜不到就换个词重搜。
  3. 工具链 (Tool Chaining): 串行调用,解决复杂的多步逻辑。
相关推荐
laplace012317 小时前
Part2.大模型RAG进阶多格式文档解析
笔记·语言模型·langchain·rag
Coder_Boy_17 小时前
基于SpringAI的智能推荐影视平台设计和业务思路
大数据·人工智能·spring boot·spring cloud·langchain
laplace012317 小时前
Part 1. 大模型RAG入门基础架构介绍
笔记·语言模型·langchain·rag
薛定谔的猫198218 小时前
RAG(四) LangChain 使用PyPDFLoader加载 PDF 并实现内容总结功能
langchain·pdf·php
paopao_wu18 小时前
LangChainV1.0[06]-Prompt/上下文/结构化输出
人工智能·langchain·prompt·ai编程
薛定谔的猫19821 天前
RAG(二)基于 LangChain+FAISS + 通义千问搭建轻量级 RAG 检索增强生成系统
运维·服务器·langchain
薛定谔的猫19821 天前
RAG(三)文档的加载 基于 LangChain+FAISS 构建本地文档向量检索系统
数据挖掘·langchain·faiss
FreeCode1 天前
智能体设计模式:规划与执行模式(Plan and Execute)
langchain·agent·ai编程
@我们的天空1 天前
【AI应用】学习和实践基于 LangChain/LangGraph 的链(Chain)构建、Agent 工具调用以及多轮对话流程的实现
人工智能·gpt·学习·语言模型·chatgpt·langchain·aigc
薛定谔的猫19822 天前
RAG(一)简单例子-使用WebBaseLoader基于 LangChain + 阿里百炼 + FAISS 构建网页内容智能问答系统
langchain