在AI大模型应用开发中,不少开发者都有过这样的困惑:写了一个能调用工具的Agent,却说不清Function Calling和MCP到底什么关系;面试时被问到“Agent怎么调用外部工具”,答得零散缺乏逻辑。这类AI助手问题之所以让人头疼,核心在于Agent、MCP、Function Calling三者概念交织、层次不清。本文将系统梳理这三个核心概念的定义、关系、代码实现与面试考点,帮你理清思路,彻底掌握AI助手工具调用的技术全貌。
一、痛点切入:为什么AI工具调用会变得如此复杂?

先看一个典型场景:你想让大模型帮你查天气,传统的做法是这样的——
传统做法:硬编码工具调用逻辑def chat_with_tool(user_input): if "天气" in user_input: location = extract_location(user_input) 手动解析 weather = call_weather_api(location) 手动调用 return f"今天{location}的天气是{weather}" else: return model.generate(user_input)
这种方式存在明显缺陷:
耦合高:每个工具调用都需要硬编码判断逻辑
扩展性差:新增工具要修改主流程代码
灵活性低:模型只能回答预设的几类问题,无法自主决策
为了解决这些痛点,业界先后发展出三层能力——Function Calling作为基础的函数调用能力,MCP作为标准化的工具接入协议,AI Agent作为集大成者实现自主决策。三者层层递进,共同构成了AI助手的工具调用体系。
二、Function Calling:让大模型“伸出手”
什么是Function Calling?
Function Calling(函数调用,也称Tool Use)是一种大语言模型内置的交互机制。开发者以JSON Schema格式向模型描述可用工具后,模型根据用户输入自主判断是否需要调用工具,并以结构化格式返回要调用的函数名和参数-41-。
工作原理
用生活化的类比来理解:Function Calling就像给模型配了一本 “工具说明书” 。用户问“北京今天天气如何”,模型翻阅说明书,找到“查天气”这个工具条目,然后告诉你:“我需要调用get_weather函数,参数location='北京'”。你(应用层)拿到这个指令后真正去执行API调用,把结果还给模型,模型再组织成自然语言回复。
1. 定义工具(用JSON Schema描述) tools = [{ "type": "function", "function": { "name": "get_weather", "description": "获取指定地点的当前天气", "parameters": { "type": "object", "properties": { "location": {"type": "string", "description": "城市名称"} }, "required": ["location"] } } }] 2. 发送请求 response = client.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": "北京今天天气怎么样?"}], tools=tools ) 3. 模型返回工具调用请求 模型输出类似: tool_calls = [{ "function": {"name": "get_weather", "arguments": '{"location": "北京"}'} }]
一句话总结
Function Calling是LLM内置的能力:通过结构化输出描述“想调用哪个函数、用什么参数”,本身不执行,执行由开发者完成。
三、MCP:标准化的“Type-C接口”
什么是MCP?
MCP(Model Context Protocol,模型上下文协议) 是Anthropic于2024年底推出的开放协议,旨在标准化大语言模型与外部工具、数据源的交互方式--。它被形象地称为AI工具调用的“Type-C协议”-21。
MCP的核心架构
MCP采用三层架构实现模型与工具的解耦--32:
| 组件 | 职责 |
|---|---|
| MCP Host | 运行AI模型的宿主环境(如Claude Desktop) |
| MCP Client | 集成在Host内部,负责与MCP Server通信 |
| MCP Server | 封装工具能力的轻量级服务,提供Tools、Resources、Prompts三类功能 |
MCP基于JSON-RPC 2.0协议通信,本地通过stdio,远程通过SSE/HTTP实现-24-。
MCP vs Function Calling:本质差异
| 维度 | Function Calling | MCP |
|---|---|---|
| 定位 | 模型内置能力 | 标准化通信协议 |
| 工具集成 | 每次调用需在请求中嵌入完整工具定义 | 独立Server,即插即用 |
| 跨平台 | 各平台实现不统一,需适配 | 统一标准,一次开发多端复用 |
| 动态发现 | 不支持 | 支持,Client可实时获取Server工具列表 |
Function Calling像是临时外挂的“一次性工具包”,每次对话都要把API定义塞进System Prompt;而MCP更像通用的“电源插座协议”,工具封装在独立Server中,即插即用-55。
一句话总结
MCP是标准化协议:定义AI与工具“怎么连接、怎么通信”,让工具开发一次、处处可用。
四、AI Agent:集大成者,自主行动的智能体
什么是AI Agent?
AI Agent(人工智能智能体) 是一个能够自主感知环境、进行推理规划、调用工具执行任务并具备记忆能力的智能系统-1-2。2025年末,Google发布白皮书标志着AI正从被动聊天机器人迈向自主代理系统-4。
Agent的核心架构
现代AI Agent依托四大模块构建“感知—决策—行动—记忆”的认知闭环-1:
感知模块:采集多源信息并结构化处理
大脑模块:以大语言模型为核心,理解意图、拆解任务
行动模块:调用工具(通过Function Calling或MCP)执行操作
记忆模块:短期与长期记忆优化决策
一句话总结
AI Agent是完整的智能系统:包含大脑(LLM)、双手(工具调用)、记忆(上下文管理),能够自主完成复杂任务。
五、三者的逻辑关系:一张图看懂
┌─────────────────────────────────────────┐ │ AI Agent(智能体) │ │ ┌─────────────────────────────────────┐│ │ │ 大脑(LLM) ││ │ │ ┌─────────────────────────────┐ ││ │ │ │ Function Calling │ ││ │ │ │ (模型内置的调用能力) │ ││ │ │ └─────────────────────────────┘ ││ │ └─────────────────────────────────────┘│ │ ↓ │ │ ┌─────────────────────────────────────┐│ │ │ MCP(标准化通信协议) ││ │ │ 定义AI与工具之间如何连接和通信 ││ │ └─────────────────────────────────────┘│ │ ↓ │ │ ┌─────────────────────────────────────┐│ │ │ 外部工具 / API / 数据源 ││ │ └─────────────────────────────────────┘│ └─────────────────────────────────────────┘
三者层次关系清晰:
Function Calling:LLM输出结构化函数调用请求的能力(手段)
MCP:标准化AI与工具通信的协议标准(标准)
AI Agent:集大脑、工具调用、记忆于一体的完整智能系统(整体)
一句话概括:AI Agent利用Function Calling的调用能力,通过MCP协议的标准接口,与外部工具交互完成自主任务-57。
六、代码示例:从裸调Function到MCP Server
示例1:原生Function Calling(查天气)
import openai 定义天气查询函数(实际执行端) def get_weather(location: str) -> str: 实际场景中调用真实天气API return f"{location}:晴天,25℃" 调用模型 response = openai.ChatCompletion.create( model="gpt-4", messages=[{"role": "user", "content": "北京天气如何?"}], tools=[{ "type": "function", "function": { "name": "get_weather", "description": "获取天气", "parameters": { "type": "object", "properties": { "location": {"type": "string"} } } } }] ) 模型返回工具调用请求后,应用层执行真实函数 if response.choices[0].message.tool_calls: call = response.choices[0].message.tool_calls[0] if call.function.name == "get_weather": location = json.loads(call.function.arguments)["location"] result = get_weather(location) 真正执行
示例2:封装MCP Server(标准工具服务)
MCP Server端:工具封装一次,处处可用 from mcp.server import MCPServer server = MCPServer() @server.tool() def get_weather(location: str) -> str: """获取指定地点的天气信息""" return f"{location}:晴天,25℃" server.run() 启动MCP服务
对比可见:
Function Calling:每次请求都要在tools参数中重复定义工具,模型只返回调用意图,执行在应用层
MCP Server:工具封装成独立服务,一次定义即可被任意支持MCP的客户端复用,真正实现工具标准化
七、底层原理定位:技术支撑点
| 概念 | 底层依赖 | 作用 |
|---|---|---|
| Function Calling | LLM的指令微调(SFT)+ 特殊token训练,使模型能输出结构化JSON而非纯文本- | 让模型学会“输出函数调用格式” |
| MCP | JSON-RPC 2.0协议 + Client-Server架构 | 标准化工具与AI之间的通信协议 |
| AI Agent | LLM推理 + 规划算法(CoT、ReAct等)+ 记忆管理(向量数据库) | 实现自主决策和任务规划 |
理解这三层依赖,有助于后续深入学习源码实现与进阶优化。
八、高频面试题与参考答案
Q1:Function Calling和MCP的区别是什么?
参考答案:Function Calling是LLM内置的输出结构化函数调用请求的能力,由OpenAI等厂商推动实现;MCP是Anthropic推出的开放协议,旨在标准化AI与外部工具的交互方式。简单说,Function Calling是能力,MCP是标准。Function Calling像一次性工具包,MCP像通用的电源插座协议-55-。
Q2:AI Agent、MCP和Function Calling三者是什么关系?
参考答案:三者是层次关系。Function Calling是基础能力,让LLM能输出结构化的工具调用请求;MCP是标准化协议,定义工具如何被AI发现和调用;AI Agent是完整系统,集成了大脑(LLM)、工具调用能力(通过Function Calling或MCP)和记忆模块。AI Agent利用Function Calling的调用能力,通过MCP协议的标准接口,与外部工具交互-57。
Q3:MCP相比直接使用Function Calling有什么优势?
参考答案:①标准化:MCP提供统一的工具接入协议,一次开发可被任意MCP客户端复用,而Function Calling各平台实现不统一-57;②动态发现:MCP支持工具动态发现,新增工具无需重启应用,Client可实时获取工具列表-24;③解耦:工具封装在独立Server,与模型分离,便于维护和权限管理-59。
Q4:AI Agent的核心架构包含哪些模块?
参考答案:现代AI Agent依托感知、大脑、行动、记忆四大模块构建“感知—决策—行动—记忆”的认知闭环-1。感知模块采集环境信息,大脑模块以大模型为核心进行推理与规划,行动模块调用工具执行操作,记忆模块通过短期和长期记忆优化决策。
Q5:Function Calling的底层训练原理是什么?
参考答案:Function Calling能力通过指令微调(SFT) 获得。训练时构造包含用户查询和对应函数调用JSON输出的样本,让模型学会“当需要外部信息时,输出函数调用格式而非自然语言”。关键训练环节包括工具数据构造、多轮对话数据增强和模型架构适配-。
九、总结
本文围绕AI助手问题的核心困惑展开,系统梳理了Agent、MCP和Function Calling三者:
Function Calling:LLM内置的函数调用能力,输出结构化JSON请求
MCP:标准化AI与工具交互的开放协议,即插即用
AI Agent:完整的智能系统,集大脑、工具调用、记忆于一体
重点提示:Function Calling是“能力”,MCP是“标准”,AI Agent是“系统”。面试中区分好这三者的层次定位,是拿高分的关键。
下一篇预告:深入剖析Agent的推理引擎——ReAct、CoT等规划算法的实现原理与代码实践。
