Agent工具调用技术详解
Agent 工具调用技术详解
概述
现代 AI Agent 需要与外部世界交互才能完成实际任务。本文详细介绍三种核心技术:Function Calling、MCP 和 Agent Skills,它们构成了 Agent 工具调用的完整技术栈。
1 | |
一、Function Calling(函数调用)
1.1 定义
Function Calling 是大模型的一种原生能力,允许模型:
- 识别何时需要调用外部工具
- 生成结构化的函数调用参数(JSON 格式)
- 理解函数返回结果并继续对话
1.2 工作流程
sequenceDiagram
participant U as 用户
participant M as 大模型
participant T as 外部工具
U->>M: 发送请求
M->>M: 判断需要调用工具
M->>T: 输出函数名 + 参数(JSON)
T->>T: 执行函数
T->>M: 返回执行结果
M->>U: 整合结果并回复
1.3 示例
用户请求:“北京今天天气怎么样?”
模型输出:
1 | |
1.4 主流平台支持
| 平台 | 支持情况 |
|---|---|
| OpenAI | ✅ 原生支持(2023年6月推出) |
| Anthropic Claude | ✅ Tool Use |
| 通义千问 | ✅ Function Calling |
| 文心一言 | ✅ 函数调用 |
1.5 特点
- 底层能力:是其他工具调用技术的基础
- 结构化输出:强制模型输出符合 JSON Schema 的参数
- 各厂商不统一:每个平台的实现细节略有差异
二、MCP(Model Context Protocol)
2.1 定义
MCP 是 Anthropic 于 2024 年推出的开放协议标准,用于统一 AI 应用与外部数据源/工具的连接方式。
核心理念:一次适配,多处复用——解决”每个工具都要单独适配”的问题。
2.2 架构
1 | |
2.3 三种能力类型
| 类型 | 描述 | 示例 |
|---|---|---|
| Resources | 静态数据资源 | 文件、数据库记录、API 响应 |
| Tools | 可执行的操作 | 发送邮件、执行代码、调用 API |
| Prompts | 预定义的提示词模板 | 代码审查模板、翻译模板 |
2.4 类比理解
MCP 就像 AI 领域的 USB 接口标准:
- USB 出现前:每种设备需要专用接口
- USB 出现后:统一接口,即插即用
- MCP:统一 AI 与工具的连接标准
2.5 与 Function Calling 的关系
- Function Calling 是模型输出调用意图的能力
- MCP 是执行调用的标准化协议
- MCP Server 内部可能使用 Function Calling 来触发工具
三、Agent Skills
3.1 定义
Agent Skills 是 Anthropic 于 2025 年 10 月推出的一种新方式,用于将专业知识封装成可复用的能力模块。
核心理念:为 Agent 准备”入职指南”——不是构建定制化 Agent,而是让通用 Agent 具备专业能力。
3.2 Skill 的结构
一个 Skill 是一个包含 SKILL.md 文件的目录:
1 | |
3.3 SKILL.md 格式
1 | |
For form filling, see FORMS.md.
1 | |
优势:上下文窗口使用量可无限扩展,只加载真正需要的内容。
3.6 Skills 存放位置
| 位置 | 作用域 | 适用场景 |
|---|---|---|
~/.claude/skills/ |
用户级 | 个人通用 Skills |
.claude/skills/ |
项目级 | 项目专用 Skills |
插件中的 skills/ |
可分发 | 通过插件市场共享 |
3.7 与 MCP 的关系
官方明确指出 Skills 和 MCP 是互补关系:
“We’ll also explore how Skills can complement MCP servers by teaching agents more complex workflows that involve external tools and software.”
- MCP:提供工具连接的标准协议(”有什么工具”)
- Skills:教会 Agent 如何使用这些工具完成复杂工作流(”怎么用工具”)
四、三者对比
4.1 定位对比
| 维度 | Function Calling | MCP | Agent Skills |
|---|---|---|---|
| 层级 | 底层能力 | 协议标准 | 高层封装 |
| 粒度 | 单个函数调用 | 工具连接规范 | 完整工作流 |
| 标准化 | 各厂商不统一 | 统一协议 | Anthropic 标准 |
| 复用性 | 低(需重复定义) | 高(一次适配) | 高(文件夹共享) |
| 推出时间 | 2023 年 | 2024 年 | 2025 年 |
4.2 协作关系
1 | |
4.3 使用场景选择
| 场景 | 推荐方案 |
|---|---|
| 简单的单次工具调用 | Function Calling |
| 连接多个外部服务 | MCP |
| 复杂的多步骤工作流 | Agent Skills |
| 需要团队共享的专业能力 | Agent Skills + 插件分发 |
| 需要动态上下文加载 | Agent Skills(渐进式披露) |
五、实践建议
5.1 何时使用 Skills vs 其他方式
| 方式 | 适用场景 |
|---|---|
| Skills | 复杂的多步骤工作流,需要动态加载上下文 |
| CLAUDE.md | 项目级通用规则(始终加载) |
| 斜杠命令 | 用户主动触发的快捷操作(如 /deploy) |
| MCP 服务器 | 连接外部工具和数据源 |
| Hooks | 工具调用前后的自动化脚本 |
5.2 Skills 开发最佳实践
- 从评估开始:先观察 Agent 在哪些任务上表现不佳,再针对性开发 Skill
- 结构化扩展:当 SKILL.md 变得臃肿时,拆分到多个文件
- 从 Claude 视角思考:关注 name 和 description 的编写,这决定了触发时机
- 与 Claude 迭代:让 Claude 帮助总结成功模式和常见错误
5.3 安全考虑
- 仅安装受信任来源的 Skills
- 审查 Skill 中的脚本和外部连接
- 使用
allowed-tools限制工具访问范围
六、参考资料
Agent工具调用技术详解
https://zmmmmy.github.io/2026/01/14/Agent工具调用技术详解/