简介:本文系统解析模型调用外部工具的三层技术架构:底层Function Calling定义调用协议,中层MCP实现工具标准化,顶层Agent Skill封装任务流程。通过架构分层、技术原理与典型场景的对比,帮助开发者清晰理解三者协同关系与选型逻辑。
在智能体(Agent)与外部工具交互的场景中,Function Calling、MCP(Model Context Protocol)和Agent Skill构成了一个从底层协议到上层智能的完整技术栈。这三者并非平行竞争方案,而是通过分层设计解决不同层级的问题:
Function Calling
作为最底层的调用协议,定义了模型如何通过结构化输出(如JSON格式)触发外部函数调用。例如,当模型需要查询天气时,会生成包含函数名get_weather和参数{"city": "北京"}的JSON,由运行时系统解析并执行。
MCP(Model Context Protocol)
中层工具标准化框架,解决工具暴露给模型的标准化问题。它将数据库、API等异构工具封装为统一的服务接口,通过元数据描述工具能力(如输入/输出参数、调用权限),实现”一次封装,多模型复用”。例如,一个MCP服务可同时支持天气查询、机票预订等工具的标准化接入。
Agent Skill
顶层任务流程封装模块,将工具使用与业务逻辑结合。它包含预定义的任务流程(如”旅行规划”需依次调用天气查询、机票预订、酒店推荐)、异常处理机制和决策逻辑。例如,一个”会议安排”Skill会协调日历检查、参会人通知、会议室预订等多个工具调用。
早期智能体与外部工具的交互面临三大挑战:
分层架构通过解耦调用协议、工具封装和任务逻辑,实现了:
关键组成:
工作原理:
// 模型输出示例{"function_call": {"name": "search_flights","arguments": {"from": "SHA","to": "PEK","date": "2024-06-01"}}}
运行时系统解析JSON后,调用对应函数并返回结构化结果,形成”模型→协议→工具”的闭环。
核心能力:
/mcp/discovery端点暴露可用工具列表实现示例:
# MCP服务伪代码class MCPServer:def __init__(self):self.tools = {"weather": WeatherTool(),"booking": FlightBookingTool()}async def handle_request(self, request):tool_name = request["tool"]if tool_name in self.tools:return await self.tools[tool_name].execute(request["params"])else:raise ValueError("Tool not found")
典型结构:
流程示例:
graph TDA[用户请求"预订会议室"] --> B[Skill启动]B --> C{检查日历空闲?}C -- 是 --> D[调用会议室预订API]C -- 否 --> E[建议其他时间段]D --> F[发送确认邮件]
| 技术组件 | 推荐场景 | 不适用场景 |
|---|---|---|
| Function Calling | 需要精确控制函数调用的低延迟场景 | 复杂多步骤任务 |
| MCP | 跨模型共享工具能力的中台化建设 | 简单工具的一次性调用 |
| Agent Skill | 需要结合业务逻辑的智能任务执行 | 纯数据查询类简单交互 |
以”智能客服”场景为例:
get_user_info函数获取用户历史记录| 维度 | Function Calling+MCP+Skill | 传统API调用 |
|---|---|---|
| 调用发起方 | 模型动态生成 | 硬编码在客户端 |
| 工具暴露方式 | MCP标准化服务 | 自定义端点 |
| 流程控制 | Skill编排 | 客户端逻辑 |
三层架构通过职责分离实现了:
理解这种分层设计,有助于开发者在构建智能体系统时,根据具体需求选择合适的技术组件组合,避免陷入”平替思维”的误区,真正实现模型能力与业务价值的深度融合。