AI Agent学习Day9:让Agent自主选择工具(RAG + Tool Calling进阶)
前言
在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机制
更多推荐


所有评论(0)