前言

在Day8中,我们已经完成了RAG系统的基础搭建:

  • 文档切片

  • Embedding向量化

  • 向量数据库检索

  • 基于知识库的问答

但是在实际使用中,我发现一个问题:

现在的RAG是“被动执行”的,不够智能。

无论用户问什么问题,系统都会去查知识库,这显然是不合理的。

例如:

  • “你好” → 也去查知识库

  • “123*456” → 也去查知识库

  • “密码多久修改?” → 才应该查知识库

因此,今天进入一个更关键的阶段:

让 Agent 学会“判断是否需要使用RAG”。


一、为什么需要Agent来控制RAG?

在之前的RAG系统中,流程是固定的:

用户问题
 ↓
向量检索
 ↓
返回结果
 ↓
LLM生成回答

问题在于:

没有“判断步骤”。

而真实的智能系统应该是:

用户问题
 ↓
Agent判断
 ↓
是否需要查询知识库?
        ↓
   是 -------- 否
   ↓            ↓
RAG检索      直接回答
   ↓
LLM生成答案

也就是说:

RAG不应该自动执行,而应该由Agent决定是否调用。


二、什么是Agent的“工具选择能力”?

Agent的核心能力之一是:

根据用户问题,自动选择合适的工具。

例如:

用户输入:

123 + 456 等于多少?

Agent判断:

这是计算问题 → 调用 calculator()

用户输入:

公司密码多久修改?

Agent判断:

这是企业知识问题 → 调用 search_knowledge()

用户输入:

你好

Agent判断:

普通对话 → 不调用工具

三、引入第二个工具:Calculator

为了让Agent具备“选择能力”,我们新增一个工具:

1. 计算工具

def calculator(expression):
    try:
        return str(eval(expression))
    except:
        return "计算错误"

这个工具的作用是:

处理数学计算任务。

例如:

输入:100 + 200
输出:300

2. 当前系统拥有两个工具

现在Agent具备两个能力:

search_knowledge()  → RAG知识库查询
calculator()        → 数学计算

四、Tool Calling机制

Agent如何调用工具?

核心流程如下:

用户问题
 ↓
LLM分析
 ↓
返回工具名称
 ↓
Python执行对应函数
 ↓
结果返回LLM
 ↓
生成最终回答

例如:

用户输入:

123 * 456

LLM返回:

{
  "name": "calculator"
}

Python执行:

tools_map["calculator"]("123*456")

五、RAG作为Tool接入Agent

我们将RAG封装成工具:

def search_knowledge(question):
    result = search(question)
    return result

这样RAG就变成了:

Agent可以调用的一个能力模块


六、Agent工具注册机制

为了让Agent知道有哪些工具,我们定义:

tools = [
    {
        "name": "search_knowledge",
        "description": "查询企业安全知识库"
    },
    {
        "name": "calculator",
        "description": "执行数学计算"
    }
]

同时建立映射关系:

tools_map = {
    "search_knowledge": search_knowledge,
    "calculator": calculator
}

七、Agent如何“自主选择工具”?

核心在于:

LLM根据“工具描述”来判断使用哪个工具。

例如:

用户问题:

密码多久修改?

LLM分析:

涉及企业安全规范 → 使用 search_knowledge

用户问题:

100 * 200

LLM分析:

数学计算 → 使用 calculator

用户问题:

你好

LLM分析:

普通对话 → 不使用工具

八、完整Agent执行流程

现在系统流程变成:

                用户
                  |
                  ↓
               Agent
                  |
        判断是否需要工具调用
                  |
        ---------------------
        |                   |
     不使用工具         使用工具
        |                   |
      LLM直接回答     Tool Calling
                            |
              -------------------------
              |                       |
     search_knowledge         calculator
              |                       |
           RAG检索              Python计算
              |
              ↓
           向量数据库
              |
              ↓
             LLM
              |
              ↓
           最终回答

九、RAG + Agent的本质区别

1. 传统RAG

特点:

  • 固定流程

  • 必定检索

  • 没有判断能力

用户 → 检索 → LLM → 输出

2. Agent + RAG

特点:

  • 可判断

  • 可选择工具

  • 可跳过RAG

用户 → Agent → 判断 → Tool / LLM

十、实际测试案例

测试1:知识查询

输入:

密码多久修改?

输出:

调用 search_knowledge
普通用户密码需要90天修改一次

测试2:数学计算

输入:

123 * 456

输出:

调用 calculator
56088

测试3:普通对话

输入:

你好

输出:

你好,有什么可以帮助你?

十一、Agent能力升级总结

通过这一节,我们完成了一个关键升级:

从“固定RAG系统”升级为“智能Agent系统”

能力变化如下:

能力 RAG系统 Agent系统
是否自动判断
是否调用工具 固定 动态
是否支持多工具
是否支持跳过检索

十二、核心理解(非常重要)

这一节最重要的理解是:

RAG不是Agent,RAG只是Agent的一个工具。

可以这样理解:

Agent = 大脑(负责思考和决策)
RAG = 记忆库(负责提供知识)
Calculator = 计算能力

总结

今天我们完成了从:

“只能查知识的RAG系统”

升级到:

“可以自主选择工具的AI Agent”

核心变化是:

  • RAG被封装成Tool

  • Agent具备判断能力

  • 引入多工具系统

  • 实现Tool Calling机制

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐