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

承接上一品,这一品学习自我修正 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): 串行调用,解决复杂的多步逻辑。
相关推荐
小此方2 小时前
LangChain/LangGraph(一)提示词篇一:Prompt工程实战:从CO-STAR、Few-Shot到思维链与自我迭代,系统掌握提示词设计方法
ai·langchain·prompt
梦想不只是梦与想4 小时前
LangGraph控制流:条件边、循环与并行(二)
langchain·大模型·边
Maiko Star11 小时前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
染指111014 小时前
128.Agent-LangChain核心组件-中间件-调用模型的时候
人工智能·windows·中间件·langchain·agent
不好听61317 小时前
LangSmith 入门:让你的Agent链路可追踪
langchain
似梦的苏烟1 天前
Langchain实战3-Model和Prompt
langchain·agent
Maiko Star1 天前
* LangChain Agent智能体详解(上):创建调用、工具绑定与系统提示词
python·langchain·agent
打工仔折腾 AI1 天前
蓝耘元生代实测:用WorkBuddy与TextIn xParse拆解43页建模论文
人工智能·后端·python·数学建模·langchain·ai agent 实战
the局外人1 天前
读懂LangGraph 的分支执行逻辑
后端·langchain·llm
染指11101 天前
129.Agent-LangChain核心组件-自定义中间件-通过类实现(AgentMiddleware)
人工智能·中间件·langchain·agent·agents