下面我来依次介绍一下 Model Context Protocol(MCP) 、Agent(智能体) 、以及 Function Call(函数调用),然后再说明它们之间的关系。
1. 什么是 Function Call(函数调用)
定义
在基于大语言模型(LLM, Large Language Model)或智能体系统中,"函数调用"通常指的是模型将用户的自然语言输入解析为"要调用哪个函数/工具(Tool)+用什么参数"的结构化请求,然后程序端接收到这个请求,执行对应的函数/工具操作,最后再将结果返回给模型或用户。
例如:用户说 "帮我查一下 AAPL 当前股价",模型就可能生成一个类似 { "function": "get_stock_price", "arguments": { "ticker": "AAPL" } } 的结构,程序执行后再把股价返回。 (Daily Dose of Data Science)
主要特点
-
模型负责"决定何时调用""调用哪个函数""传入哪些参数"但通常 不直接执行 函数,而是生成结构化调用请求。 (martinfowler.com)
-
开发者预先 定义 这些函数/工具(名称、参数、用途)并提供给模型使用。 (Daily Dose of Data Science)
-
模型通过调用函数获得外部能力(比如数据库查询、调用 API、文件操作等),从而超越"纯文本生成"的限制。 (Fireworks AI)
-
它是比较早期/主流的方式,用于让 LLM → 工具/函数 接口互通。 (zilliz.com)
优点与局限
优点:
-
能够让模型访问到"外部世界"的能力,比如数据、API、工具。
-
结构化调用有利于安全、判断、自动化。
-
模型无需知道函数内部细节,只负责"要用哪个函数、参数是什么"。
局限:
-
每新增/修改函数,通常需要开发者在模型这边或工具端修改集成逻辑。
-
模型能访问的工具通常是静态注册的,不够灵活。
-
在复杂工作流/多工具协同/跨模型场景下,单纯函数调用可能显得繁琐。 (DEV Community)
2. 什么是 Agent(智能体)
定义
在这里,"Agent"通常指的是结合了大型语言模型 + 工具(函数调用、API、知识库等) +决策逻辑的系统,能理解用户指令、推理、决定调用哪些工具、管理状态/上下文、执行流程,再返回结果。也就是说,Agent 不只是"生成文本",而是"在文本理解+决策+工具操作"上更主动。 (Medium)
关键组成
-
理解层:理解用户输入、上下文、目标。
-
决策层:判断需调用哪些工具或采取何种行动。
-
执行层:调用工具、获取数据、修改状态。
-
反馈层:将结果整合、生成响应给用户。
-
状态/记忆管理 :在多轮交互中可能保存上下文、历史、工具调用记录等。 (Medium)
使用场景
-
虚拟助理(可以查资料、安排日程、执行操作)。
-
企业内部知识助手(可访问公司文档、数据库、CRM 系统)。
-
自动化流程:如从用户指令识别 → 查询 → 操作外部系统 →汇总结果。
-
多工具协作:一个任务可能需要多个工具/API联合使用。
3. 什么是 Model Context Protocol(MCP)
定义
MCP 是一个开放标准/协议,目的是为大型语言模型(或 Agent)与外部工具/数据资源之间的连接提供 统一、标准化、可扩展 的接口。换言之,MCP 想成为 "AI 模型访问外部能力(工具、资源、提示模板)" 的通用协议。 (Medium)
MCP 的官方文档指出,客户端(Agent 端)可以向 MCP 服务器请求:
-
列出可用工具(Tools)
-
访问资源(Resources)
-
利用提示模板(Prompts) (Medium)
架构与流程简述
-
MCP Server:暴露工具/资源/提示模板的服务端。
-
MCP Client :在 Agent 或模型端,用于连接 MCP Server,检索工具、发起调用。 (Medium)
-
Transport :协议定义了多种通信方式,比如 stdio、HTTP + SSE。 (Medium)
-
Agent/模型通过 MCP Client 查询可用 Tools,然后决定调用哪个工具,再通过 MCP Server 执行。
为什么它重要/优势
-
工具动态注册 :工具无须硬编码在 Agent 端;新增工具可在 MCP Server 注册,Agent 端不用改代码。 (Medium)
-
多模型/多服务互操作 :不同模型、不同服务都可以通过 MCP 连接。标准化接口降低集成成本。 (openai.github.io)
-
支持更复杂的 Agent 架构 :不仅单次函数调用,更可以进行工具发现、资源访问、多工具协调。 (Medium)
-
解耦 :Agent 与工具服务分离,维护性更高。 (Medium)
局限与挑战
-
虽然标准化,但工具权限、安全、配套生态还在发展。有人指出存在工具注入、权限混乱的风险。 (维基百科)
-
相比简单函数调用,多了一层协议、服务架构,开发/部署成本更高。
-
Agent 逻辑变得更复杂:需要管理工具发现、状态、错误、工作流等。
4. 三者之间的关系
-
Function Call 是比较直接的"模型 → 函数/工具"的调用机制。Agent 在这个基础上"包一层"决策逻辑,管理流程。
-
Agent 比函数调用高级:它理解用户意图、决定调用哪个函数/工具、管理流程。Agent可以使用函数调用机制。
-
MCP 则是为 Agent + 多工具环境设计的"工具发现、资源访问、工具调用"统一协议。换句话说,Agent 可以通过 MCP 协议发现并调用工具;MCP 也让函数调用机制在更大规模、更弹性的架构里运作。
可以这样理解:
-
函数调用 = 工具调用的基础单元。
-
Agent = 使用工具调用(可能多个)+管理业务逻辑的主体。
-
MCP = Agent 与工具/资源之间通信的标准通道/协议,使得"发现工具/调用工具"更规范、更可扩展。
举个简单流程示例
-
用户: "把我这个 Excel 表格里的销售数据汇总,生成图表。"
-
Agent 接收到输入,理解"需要读取 Excel → 计算汇总 → 生成图表 → 返回结果"。
-
Agent 通过 MCP Client 向 MCP Server 查询可用工具,比如
read_excel,summarize_data,generate_chart。 -
Agent 决定首先调用
read_excel工具(函数调用机制),获得数据。 -
接着调用
summarize_data,再调用generate_chart。 -
最终将图表结果反馈给用户。
在这个过程中:函数调用机制贯穿其中,Agent 是整个控制流程的"指挥者",而 MCP 是工具被发现/调用的标准化协议。
下面是一个清晰的对比表格 + 实际示例,帮助你快速理解 Function Call、Agent、MCP 三者的区别与联系。
🧩 5、对比表:Function Call vs Agent vs MCP
项目
Function Call(函数调用)
Agent(智能体)
MCP(Model Context Protocol)
核心目的
让模型调用特定函数或工具
让模型能自主决策并使用多个工具解决复杂任务
提供标准化协议,使模型可动态发现、调用外部工具和资源
谁定义工具
开发者在本地代码中静态注册
Agent 可以使用多个注册好的工具,也可动态扩展
工具由 MCP Server 注册,Agent 可在运行时动态发现
执行逻辑
模型生成 {function, arguments} → 系统执行
Agent 根据任务分解,选择调用多个函数并整合结果
MCP 定义通用接口(Tools / Resources / Prompts)供 Agent 调用
数据流方向
用户 → 模型 → 函数调用 → 返回结果
用户 → Agent(模型决策)→ 多工具调用 → 汇总结果
用户 → Agent(MCP Client) ↔ MCP Server(工具执行) → 返回结果
复杂度
低(单次调用)
中(任务分解与执行)
高(协议通信、多工具发现)
适用场景
简单的 API 查询、数据库读取、文件操作等
需要推理、多步任务、跨工具自动化
企业级智能体、多模型协作、工具生态体系
优点
轻量、快速、易用
灵活、可扩展、能做决策
动态工具发现、跨平台标准、易维护
缺点
工具需手动注册,灵活性差
管理复杂,需编排逻辑
部署门槛高,生态尚在发展
代表实现
OpenAI Function Calling, Fireworks.ai, Anthropic Tools
LangChain Agent, OpenDevin, AutoGPT, ChatGPT Agent
OpenAI MCP Protocol, mcp-python, Claude MCP Integration
⚙️ 6、实际示例:从 Function Call 到 MCP 的演进
1️⃣ Function Call 示例
python
# 定义一个函数供模型调用
def get_weather(city: str):
return f"{city} 当前 23°C,晴天"
# 模型生成的调用请求(伪示例)
{
"name": "get_weather",
"arguments": {"city": "北京"}
}
# 系统执行后返回结果
"北京 当前 23°C,晴天"
👉 模型只是告诉系统:"请调用 get_weather(city="北京")",系统执行并返回。
2️⃣ Agent 示例(多工具协作)
ini
# 定义多个工具
def get_weather(city): ...
def suggest_outfit(temp): ...
# Agent 逻辑
user_input = "今天北京穿什么衣服合适?"
weather = get_weather("北京") # 步骤1:调用天气接口
outfit = suggest_outfit(weather["temp"]) # 步骤2:调用穿衣建议
result = f"北京{weather['temp']}°C,建议{outfit}"
👉 Agent 负责:
-
理解任务(查询天气 + 建议衣服)
-
规划步骤(调用两个函数)
-
整合结果回答用户。
3️⃣ MCP 示例(动态发现与调用)
makefile
# MCP Server 侧注册工具
{
"tool_name": "get_weather",
"description": "获取指定城市的天气",
"schema": {
"type": "object",
"properties": {"city": {"type": "string"}}
}
}
# MCP Client 侧(Agent 运行时)
available_tools = client.list_tools() # 动态发现工具
tool = available_tools["get_weather"]
result = client.call_tool(tool, {"city": "北京"})
👉 优势:
-
工具可动态注册,无需改 Agent 代码;
-
可列出所有工具(
list_tools); -
统一通信协议(HTTP/stdio/SSE);
-
兼容不同模型与 Agent 框架。
🧠 7、结构关系图
arduino
┌──────────────────────────┐
│ User 用户 │
└────────────┬────────────┘
│
自然语言请求
│
┌────────────▼────────────┐
│ Agent 智能体 │
│ - 理解意图 │
│ - 任务规划 │
│ - 调用 MCP 工具 │
└────────────┬────────────┘
│
┌────────────▼────────────┐
│ MCP Client 端 │
│ - 发现工具 list_tools │
│ - 调用工具 call_tool │
└────────────┬────────────┘
│
┌────────────▼────────────┐
│ MCP Server 端 │
│ - 注册工具 │
│ - 提供资源与模板 │
└──────────────────────────┘
8. 小结
-
Function Call(函数调用) :模型生成"要调用的函数 + 参数",程序执行。Function Call 是基础.
-
Agent(智能体) :理解用户+决策+调用函数/工具+管理业务流程。Agent 是智能体逻辑的主体.
-
MCP(Model Context Protocol) :为 Agent 与工具/资源交互提供标准接口,使工具发现、访问、调用更系统化、更可扩展。MCP 是让 Agent 与工具生态"动态、标准、安全"协作的桥梁。
-
在构建现代的智能体/工具链系统时,常常看到三者一起出现:Agent 利用函数调用机制,并通过 MCP 协议与工具服务交互。