Agent Engineering 课程阅读
首页/课程二 · Agent 手写/Agentic RAG:Agent + RAG

在 GitHub 查看原文

本页目录

L07 — Agentic RAG:Agent + RAG

本课目标:把你学过的 RAG 和 Agent 两大体系连起来。把 RAG 包装成一个"工具",让 Agent 自主决定什么时候检索、检索什么。这是知识闭环的一课。

传统 RAG(你前 9 课学的)每次都检索,不管问题需不需要。Agentic RAG 让 Agent 按需检索——更聪明、更省钱。


1. 传统 RAG 的局限:无脑检索

回顾你在 RAG 课程学的标准流程:

用户问题 → 【必定检索】→ 拼接上下文 → 生成答案

问题在于"必定检索"。考虑这些场景:

用户问题 传统 RAG 的做法 问题
"你好,你是谁?" 去知识库检索一堆无关内容 🚫 浪费(不需要检索)
"1+1 等于几?" 检索出"年假制度"等无关内容 🚫 浪费 + 干扰
"帮我查北京天气" 在内部知识库里找(找不到) 🚫 应该调天气工具而非 RAG
"张三的年假和病假分别怎么请?" 检索一次,可能召回不全 ⚠️ 需要多次检索

核心问题:传统 RAG 没有"判断力"——不管什么问题都去翻文档。有些问题根本不需要翻文档,有些需要翻多次。


2. Agentic RAG:让 Agent 自主决定

Agentic RAG 的思路:把"检索知识库"变成 Agent 的一个工具,让 Agent 自己判断:

用户问题 → Agent 思考:
  ├─ 这个问题需要查知识库吗?
  │   ├─ 不需要(如"1+1")→ 直接回答 / 调别的工具
  │   └─ 需要 → 调用 search_knowledge_base 工具
  │       └─ 查一次够吗?
  │           ├─ 够了 → 基于结果回答
  │           └─ 不够 → 换关键词再查(多轮检索)

传统 RAG vs Agentic RAG

传统 RAG Agentic RAG
检索时机 每次都检索 Agent 自主决定
不需要检索的问题 也去检索(浪费) 跳过检索直接答
检索不够时 只查一次 多轮检索(换关键词再查)
能调其他工具吗 不能 能(天气、计算器等一起配)
成本 每次都检索(贵) 按需检索(省)

🎯 核心认知:Agentic RAG 不是替代传统 RAG,而是把 RAG 升级成 Agent 的一个能力。RAG 变成了 Agent 工具箱里的一把"扳手"——需要时拿出来,不需要时收起来。


3. 多轮检索:查不到就换关键词

这是 Agentic RAG 最有价值的能力。传统 RAG 查一次就结束,如果召回不准,答案就错了。Agentic RAG 可以:

用户:"张三的审批流程是什么?"
Agent 第1轮:检索 "张三 审批流程" → 没找到相关内容
Agent 第2轮:换个关键词检索 "审批流程" → 找到了!
Agent:基于结果回答

Agent 能根据第一次检索的结果判断够不够,不够就自动调整。这模拟了人类查资料的行为——找不到就换个搜法。


4. 怎么把 RAG 包装成工具

技术上很简单——你在 RAG 课程写过的检索逻辑,包装成一个函数 + tools 定义:

def search_knowledge_base(query: str) -> str:
    """检索知识库。直接复用你 RAG 课的代码!"""
    # 1. 向量化 query(embedding)
    # 2. Chroma 检索 top-k
    # 3. 返回相关文档片段
    ...

# 然后注册成 Agent 的一个工具
TOOLS_SPEC = [
    {"type": "function", "function": {
        "name": "search_knowledge_base",
        "description": "在公司知识库里搜索相关信息。当用户问公司制度、流程、政策等问题时使用。",
        ...
    }},
    # 还可以配其他工具(天气、计算器等)
]

💡 看,RAG 课程的 embedding + Chroma 检索代码,原封不动变成 Agent 的一个工具。这就是知识的复用和闭环。


5. 本课代码会做什么

code.py 实现一个 Agentic RAG 系统:

① RAG 工具化

把你 RAG 课的 employee_handbook + it_policy 文档建库,包装成 search_knowledge_base 工具。同时配 get_weathercalculator 工具。

② Agentic RAG Agent

Agent 面对不同问题自主决策: - "年假有几天?" → 调 search_knowledge_base - "1+1 等于几?" → 调 calculator(不碰知识库) - "你好" → 直接回答(不调任何工具)

③ 对比传统 RAG

同样的问题,传统 RAG 无脑检索 vs Agentic RAG 按需检索——看哪个更聪明、更省。


6. 跑起来

python agent-lessons/07_agentic_rag/code.py

终端会打印 Agent 面对不同问题的工具选择。重点看:简单问题(如"你好")Agent 跳过检索,只有真正需要查文档时才检索。


下一课 L08 — 多智能体协作 会讲:多个 Agent 怎么分工合作。