智能体深度解析 / 智能体的工具使用(Tool Use)
CHAPTER 05 · TOPIC 04

智能体的工具使用(Tool Use)

工具使用是智能体区别于纯对话 AI 的核心能力。通过调用外部工具,Agent 可以访问实时数据、执行计算、操作系统、调用 API——从"能说"变成"能做"。本章从 Agent 视角深入讲解工具使用的设计模式、最佳实践和安全考量。

一句话理解

工具使用是智能体区别于纯对话 AI 的核心能力。通过调用外部工具,Agent 可以访问实时数据、执行计算、操作系统、调用 API——从"能说"变成"能做"。本章从 Agent 视角深入讲解工具使用的设计模式、最佳实践和安全考量。

阅读前置

理解提示工程与工具调用

本文关注

Agent 可用的工具类型、工具选择策略、工具执行的错误处理

所在知识层

行动系统 · 智能体深度解析

文章导航
主教学视觉智能体的工具使用(Tool Use) · 知识结构

点击图中节点可定位到对应正文。

核心主题关系与流向

引言

工具使用是智能体区别于纯对话 AI 的核心能力。通过调用外部工具,Agent 可以访问实时数据、执行计算、操作系统、调用 API——从"能说"变成"能做"。本章从 Agent 视角深入讲解工具使用的设计模式、最佳实践和安全考量。

注:工具调用的底层技术原理见 工具调用(Function Calling),本章聚焦 Agent 层面的工具设计和使用策略。


1. Agent 可用的工具类型

1.1 工具分类

语义 SVG 重绘智能体的工具使用(Tool Use) · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文信息获取工具系统核心搜索引擎、数据库查询、API 调用、文件读取工具、结果与反馈
查看原文结构
┌─ 信息获取工具 ─────────────────────────────────────┐
│  搜索引擎、数据库查询、API 调用、文件读取          │
└────────────────────────────────────────────────────┘
语义 SVG 重绘智能体的工具使用(Tool Use) · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文计算与分析工具系统核心计算器、代码执行器、数据分析工具工具、结果与反馈
查看原文结构
┌─ 计算与分析工具 ───────────────────────────────────┐
│  计算器、代码执行器、数据分析工具                   │
└────────────────────────────────────────────────────┘
语义 SVG 重绘智能体的工具使用(Tool Use) · 结构 3

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文通信与协作工具系统核心邮件发送、消息推送、日历管理、任务创建工具、结果与反馈
查看原文结构
┌─ 通信与协作工具 ───────────────────────────────────┐
│  邮件发送、消息推送、日历管理、任务创建             │
└────────────────────────────────────────────────────┘
语义 SVG 重绘智能体的工具使用(Tool Use) · 结构 4

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文操作与执行工具系统核心文件操作、系统命令、浏览器操作、UI 自动化工具、结果与反馈
查看原文结构
┌─ 操作与执行工具 ───────────────────────────────────┐
│  文件操作、系统命令、浏览器操作、UI 自动化          │
└────────────────────────────────────────────────────┘
语义 SVG 重绘智能体的工具使用(Tool Use) · 结构 5

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文生成与创作工具系统核心图像生成、文档生成、代码生成、PPT 生成工具、结果与反馈
查看原文结构
┌─ 生成与创作工具 ───────────────────────────────────┐
│  图像生成、文档生成、代码生成、PPT 生成             │
└────────────────────────────────────────────────────┘

1.2 工具描述模板

每个工具需要清晰的描述,让 LLM 知道何时以及如何使用(业界也在通过 MCP 协议 推动工具描述的标准化):

JSON
{
  "name": "query_database",
  "description": "执行 SQL 查询并返回结果。当需要从数据库获取数据时使用此工具。支持 SELECT 查询,不支持修改操作。",
  "parameters": {
    "type": "object",
    "properties": {
      "sql": {
        "type": "string",
        "description": "要执行的 SQL 查询语句"
      },
      "database": {
        "type": "string",
        "enum": ["production", "analytics", "test"],
        "description": "目标数据库"
      }
    },
    "required": ["sql", "database"]
  },
  "returns": {
    "type": "array",
    "description": "查询结果的行列表"
  }
}

2. 工具选择策略

2.1 自动工具选择

LLM 根据用户请求和工具描述自动选择工具:

语义 SVG 重绘智能体的工具使用(Tool Use)

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文LLM 的决策过程:系统核心1. 用户需要"查数据"需要信息获取工具2. "销售数据"工具、结果与反馈可能在数据库中3. 选择工具: querydatabase
查看原文结构
LLM 的决策过程:
  1. 用户需要"查数据" → 需要信息获取工具
  2. "销售数据" → 可能在数据库中
  3. 选择工具: query_database
  4. 生成参数: sql="SELECT * FROM sales WHERE month='上月'", database="analytics"

2.2 工具路由

当工具很多时,先用一个路由步骤筛选相关工具:

语义 SVG 重绘智能体的工具使用(Tool Use)

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文用户请求系统核心工具路由器(可以是另一个 LLM 调用或分类器)筛选出 3-5 个相关工具主 Agent 在筛选后的工具中选择工具、结果与反馈
查看原文结构
用户请求 → 工具路由器(可以是另一个 LLM 调用或分类器)
              ↓
          筛选出 3-5 个相关工具
              ↓
          主 Agent 在筛选后的工具中选择

2.3 工具链编排

复杂任务需要多个工具按特定顺序协作:

语义 SVG 重绘智能体的工具使用(Tool Use)

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文工具链:系统核心querydatabase(sql="...")获取数据analyzedata(data)工具、结果与反馈分析趋势generatechart(analysis)
查看原文结构
工具链:
  query_database(sql="...") → 获取数据
      ↓
  analyze_data(data) → 分析趋势
      ↓
  generate_chart(analysis) → 生成图表
      ↓
  create_report(analysis, charts) → 生成报告
      ↓
  send_email(to="boss@company.com", body=report) → 发送

3. 工具执行的错误处理

3.1 常见错误类型

公式视图智能体的工具使用(Tool Use) · 关系式

把公式、变量和含义拆开呈现,便于对照阅读。

1. 工具调用失败
- API 超时、返回错误码、参数错误
2. 工具返回意外结果
- 数据为空、格式不对、数据量过大
3. 工具返回矛盾信息
- 两个工具返回相互矛盾的结果
4. 工具不可用
- 服务宕机、权限不足

3.2 错误处理策略

PYTHON
def execute_tool_with_retry(tool_name, params, max_retries=3):
    for attempt in range(max_retries):
        try:
            result = execute_tool(tool_name, params)
            
            # 验证结果合理性
            if is_valid(result):
                return result
            
            # 结果异常,尝试修正参数
            llm_reflection = llm.generate(f"""
                工具 {tool_name} 返回了异常结果: {result}
                参数是: {params}
                可能是什么问题?如何修正参数?
            """)
            params = adjust_params(llm_reflection)
            
        except ToolError as e:
            if attempt < max_retries - 1:
                # 等待后重试
                time.sleep(2 ** attempt)
            else:
                # 最终失败,让 LLM 决定如何处理
                return llm.generate(f"""
                    工具 {tool_name} 连续失败 {max_retries} 次
                    错误信息: {e}
                    请决定:1) 换一种方法完成任务 
                            2) 告知用户无法完成
                            3) 请求用户帮助
                """)

3.3 降级策略

语义 SVG 重绘智能体的工具使用(Tool Use)

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

数据库查询失败尝试从缓存获取最近数API 调用超时使用本地缓存 + 提示用户数据可能不是…代码执行失败让 LLM 手动计算(不精确但可用)
查看原文结构
数据库查询失败 → 尝试从缓存获取最近数据
API 调用超时 → 使用本地缓存 + 提示用户数据可能不是最新
代码执行失败 → 让 LLM 手动计算(不精确但可用)
搜索无结果 → 扩大搜索范围或换关键词

4. 工具安全

4.1 权限控制

TEXT
不同角色的 Agent 有不同的工具权限:

管理员 Agent:
  ✓ 所有查询工具
  ✓ 数据修改工具
  ✓ 系统管理工具
  ✓ 用户管理工具

普通用户 Agent:
  ✓ 只读查询工具
  ✓ 个人数据修改工具
  ✗ 系统管理工具
  ✗ 其他用户数据工具

访客 Agent:
  ✓ 公开信息查询
  ✗ 任何修改操作
  ✗ 敏感数据查询

4.2 沙箱执行

PYTHON
# 代码执行必须在沙箱中
class CodeSandbox:
    def __init__(self):
        self.allowed_modules = ["math", "json", "datetime", "pandas", "numpy"]
        self.blocked_modules = ["os", "sys", "subprocess", "shutil", "socket"]
        self.max_execution_time = 30  # 秒
        self.max_memory = "512MB"
    
    def execute(self, code):
        # 1. 检查代码是否包含被禁模块
        for module in self.blocked_modules:
            if f"import {module}" in code:
                raise SecurityError(f"不允许使用 {module} 模块")
        
        # 2. 在隔离环境中执行
        result = run_in_container(
            code, 
            timeout=self.max_execution_time,
            memory_limit=self.max_memory,
            network=False  # 禁止网络访问
        )
        return result

4.3 Human-in-the-Loop

对于高风险操作,需要人类确认:

TEXT
Agent: "我需要执行以下操作来完成任务:
  1. 删除旧数据库备份(释放 500GB 空间)
  2. 运行数据迁移脚本
  3. 重启生产服务器
  
  这些操作不可逆,是否继续?[Y/n]"

用户: "1 可以,2 可以,但 3 等到凌晨再执行"

Agent: 调整计划,按用户指示执行

5. Computer Use:操作桌面应用

5.1 工作原理

TEXT
Agent 操作桌面应用的循环:

1. 截取屏幕截图
2. VLM(视觉语言模型)理解屏幕内容
3. 决定下一步操作(点击、输入、滚动等)
4. 执行操作
5. 再次截图,检查结果
6. 循环直到完成

支持的操作:
- 鼠标:点击、双击、拖拽、滚动
- 键盘:输入文本、按键、快捷键
- 窗口:切换、最大化、最小化

5.2 应用场景

场景说明
操作旧系统没有 API 的旧版软件
跨应用流程需要在多个应用间切换
测试自动化UI 测试和用户流程测试
数据采集从网页或应用中提取信息

6. 本章小结

维度最佳实践
工具设计单一职责、清晰命名、详尽描述
工具选择让 LLM 自动选择 + 路由过滤
错误处理重试 + 参数修正 + 降级策略
安全权限控制 + 沙箱 + 人类确认
工具链明确依赖关系,支持顺序/并行/条件执行

相关章节


延伸阅读

  • Schick, T. et al. (2023). "Toolformer: Language Models Can Teach Themselves to Use Tools". NeurIPS
  • Qin, Y. et al. (2023). "ToolLLM: Facilitating Large Language Models to Master 16000+ Real-world APIs". arXiv
  • Anthropic (2024). "Computer Use". anthropic.com/news