Agent 工具调用与执行
工具系统是 Agent 与外部世界交互的桥梁,赋予了 Agent"手"和"脚",使其从单纯的对话者变为行动者。掌握工具调用机制是构建实用 Agent 的核心能力。
一、为什么需要工具系统?
1.1 LLM 的局限性
大语言模型(LLM)虽然具备强大的语言理解和生成能力,但存在本质局限:
| 局限性 | 具体表现 | 工具解决方案 |
|---|---|---|
| 知识截止 | 训练数据有时间边界 | 搜索工具获取实时信息 |
| 无法计算 | 复杂数学计算易出错 | 计算器工具精确计算 |
| 无执行能力 | 只能"说"不能"做" | 代码执行工具落地操作 |
| 无外部感知 | 无法访问外部系统 | API 工具连接外部服务 |
| 无持久记忆 | 会话结束后遗忘 | 数据库工具存储信息 |
1.2 工具系统的价值
┌─────────────────────────────────────────────────────────────┐
│ 工具系统的核心价值 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 无工具的 LLM: │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 用户 │ ──→ │ LLM │ ──→ │ 文本 │ │
│ └─────────┘ │ (大脑) │ │ 回答 │ │
│ └─────────┘ └─────────┘ │
│ 只能"纸上谈兵" │
│ │
│ 有工具的 Agent: │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 用户 │ ──→ │ Agent │ ──→ │ 结果 │ │
│ └─────────┘ │ (大脑) │ │ (行动) │ │
│ └────┬────┘ └─────────┘ │
│ │ │
│ ↓ │
│ ┌─────────────────────┐ │
│ │ 工具箱 │ │
│ │ ┌───┐ ┌───┐ ┌───┐│ │
│ │ │搜索│ │计算│ │API││ │
│ │ └───┘ └───┘ └───┘│ │
│ │ ┌───┐ ┌───┐ ┌───┐│ │
│ │ │代码│ │数据│ │文件││ │
│ │ └───┘ └───┘ └───┘│ │
│ └─────────────────────┘ │
│ "手"+"脚",能执行实际操作 │
│ │
└─────────────────────────────────────────────────────────────┘1.3 工具系统的演进历程
┌─────────────────────────────────────────────────────────────┐
│ 工具系统演进历程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 2023.03 2023.06 2023.11 2024.11 │
│ │ │ │ │ │
│ ↓ ↓ ↓ ↓ │
│ ┌──────┐ ┌──────────┐ ┌─────────┐ ┌─────────┐ │
│ │Prompt│ ──→ │ Function │ ──→ │ Tool │ ──→ │ MCP │ │
│ │Hack │ │ Calling │ │ Use API │ │ Protocol│ │
│ └──────┘ └──────────┘ └─────────┘ └─────────┘ │
│ │
│ 手动解析 OpenAI 原生 多模态工具 标准化协议 │
│ 正则提取 结构化输出 图片/文件 跨平台兼容 │
│ 易出错 高可靠性 多输入类型 生态互联 │
│ │
│ LangChain GPT-4 Claude 3 Anthropic │
│ ReAct Prompt Tool Choice Computer Use Model Context │
│ │
└─────────────────────────────────────────────────────────────┘二、工具系统核心概念
2.1 核心组件概览
| 组件 | 英文 | 作用 | 示例 |
|---|---|---|---|
| 工具描述 | Tool Description | 告诉 LLM 工具的用途 | "搜索互联网获取实时信息" |
| 参数模式 | Parameter Schema | 定义输入参数结构 | JSON Schema |
| 执行环境 | Execution Environment | 工具运行的安全沙箱 | Docker、进程隔离 |
| 结果处理 | Result Processing | 处理工具返回结果 | 截断、摘要、格式化 |
| 注册中心 | Tool Registry | 管理可用工具列表 | 工具目录、索引 |
2.2 工具调用生命周期
┌─────────────────────────────────────────────────────────────┐
│ 工具调用生命周期 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ │
│ │ 1. 意图 │ 分析用户需求,判断是否需要工具 │
│ │ 识别 │ │
│ └────┬─────┘ │
│ │ │
│ ↓ │
│ ┌──────────┐ │
│ │ 2. 工具 │ 根据意图匹配最合适的工具 │
│ │ 选择 │ │
│ └────┬─────┘ │
│ │ │
│ ↓ │
│ ┌──────────┐ │
│ │ 3. 参数 │ 生成工具调用的输入参数 │
│ │ 构建 │ │
│ └────┬─────┘ │
│ │ │
│ ↓ │
│ ┌──────────┐ │
│ │ 4. 安全 │ 权限检查、参数校验 │
│ │ 校验 │ │
│ └────┬─────┘ │
│ │ │
│ ↓ │
│ ┌──────────┐ │
│ │ 5. 执行 │ 在隔离环境中运行工具 │
│ │ 工具 │ │
│ └────┬─────┘ │
│ │ │
│ ↓ │
│ ┌──────────┐ │
│ │ 6. 结果 │ 处理返回值,转换为 LLM 可理解格式 │
│ │ 处理 │ │
│ └────┬─────┘ │
│ │ │
│ ↓ │
│ ┌──────────┐ │
│ │ 7. 反馈 │ 将结果返回给 Agent 进行下一步决策 │
│ │ 整合 │ │
│ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘2.3 工具分类
┌─────────────────────────────────────────────────────────────┐
│ 工具类型分类 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 按功能分类: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ • 信息获取类:搜索、数据库查询、API 调用 │ │
│ │ • 计算处理类:数学计算、代码执行、数据处理 │ │
│ │ • 文件操作类:读写文件、文档处理、图片处理 │ │
│ │ • 系统交互类:命令执行、进程管理、网络请求 │ │
│ │ • 通信协作类:邮件发送、消息推送、日程管理 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 按风险等级分类: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ • 低风险:只读操作(搜索、查询) │ │
│ │ • 中风险:有限写入(创建文件、发送通知) │ │
│ │ • 高风险:系统操作(删除、修改配置、执行代码) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 按执行方式分类: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ • 同步工具:即时返回结果(计算、查询) │ │
│ │ • 异步工具:后台执行(文件上传、长任务) │ │
│ │ • 流式工具:持续返回数据(日志监控、实时数据) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘三、核心架构流程
3.1 整体架构图
┌─────────────────────────────────────────────────────────────────────┐
│ Agent 工具系统架构 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 用户层 │ │
│ │ ┌─────────────┐ │ │
│ │ │ 用户请求 │ │ │
│ │ └──────┬──────┘ │ │
│ └───────────────────────────┼─────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────┼─────────────────────────────────┐ │
│ │ Agent 层 │ │
│ │ ┌───────────────────────┼───────────────────────┐ │ │
│ │ │ LLM 核心 │ │ │
│ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │
│ │ │ │意图识别 │ │工具选择 │ │参数构建 │ │ │ │
│ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │
│ │ └───────────────────────┬───────────────────────┘ │ │
│ └───────────────────────────┼─────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────┼─────────────────────────────────┐ │
│ │ 工具管理层 │ │
│ │ ┌───────────────────────┼───────────────────────┐ │ │
│ │ │ 工具注册中心 │ │ │
│ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │
│ │ │ │工具索引 │ │权限管理 │ │版本控制 │ │ │ │
│ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │
│ │ └───────────────────────┬───────────────────────┘ │ │
│ └───────────────────────────┼─────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────┼─────────────────────────────────┐ │
│ │ 执行层 │ │
│ │ ┌───────────────────────┼───────────────────────┐ │ │
│ │ │ 执行环境 │ │ │
│ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │
│ │ │ │ 沙箱 │ │ 资源池 │ │ 监控器 │ │ │ │
│ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │
│ │ └───────────────────────┬───────────────────────┘ │ │
│ └───────────────────────────┼─────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────┼─────────────────────────────────┐ │
│ │ 工具层 │ │
│ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │
│ │ │搜索 │ │计算 │ │代码 │ │文件 │ │API │ │数据库│ │ │
│ │ │工具 │ │工具 │ │执行 │ │工具 │ │工具 │ │工具 │ │ │
│ │ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘3.2 核心流程详解
[用户请求]
-> [意图分类器] # 判断是否需要工具
-> [工具检索器] (如果工具数量多) # 从工具库中检索相关工具
-> [LLM (带工具 Schema)] # LLM 决定调用哪个工具
-> [参数解析器] # 解析工具参数
-> [权限网关] # 检查调用权限
-> [工具执行器 (沙箱/API)] # 安全执行工具
-> [结果处理器 (摘要/截断)] # 处理工具返回结果
-> [LLM (最终回答)] # 生成最终答案四、章节内容导航
五、学习建议
5.1 学习路径
入门 → 工具调用概述(理解工具系统价值)
↓
进阶 → Function Calling(掌握原生调用机制)
↓
深入 → 工具定义与注册(学会设计工具)
↓
扩展 → 工具选择策略(优化工具匹配)
↓
高级 → 工具组合编排、MCP 协议(企业级应用)5.2 实践建议
| 阶段 | 实践内容 | 预期收获 |
|---|---|---|
| 入门 | 使用 OpenAI Function Calling | 理解工具调用基本流程 |
| 进阶 | 自定义工具并注册 | 掌握工具设计原则 |
| 深入 | 实现工具选择策略 | 提升工具匹配准确率 |
| 扩展 | 多工具编排执行 | 处理复杂任务场景 |
| 高级 | 集成 MCP 协议 | 企业级工具生态 |
六、总结
| 概念 | 一句话总结 | 面试关键词 |
|---|---|---|
| 工具系统 | Agent 与外部世界交互的桥梁 | Tool Use、Function Calling |
| 核心组件 | 描述、参数、执行、结果处理 | JSON Schema、沙箱、权限 |
| 调用流程 | 意图识别 → 工具选择 → 参数构建 → 执行 → 结果处理 | Tool Lifecycle |
| 协议标准 | MCP 实现跨平台工具互联 | Model Context Protocol |
| 最佳实践 | 安全隔离、权限控制、可观测性 | 沙箱、审计、监控 |
一句话总结:工具系统赋予 Agent 执行能力,是构建实用 Agent 的核心基础设施,需要关注安全性、可靠性和可扩展性。
最后更新:2026年3月18日