Function calling, 模态上下文协议(MCP),多步能力协议(MCP) 和 A2A的区别
-
背景阐述
本文大部分内容都是基于openAI 的 chatGPT自动生成。作者进行了一些细微的调整。
LLM 带来了很多思维的活跃,基于LLM,产生了很多应用,很多应用也激活了LLM的新的功能。 Function calling,MCP(Modal Context Protocol/模态上下文协议), MCP(Multi-step capability Protocol/多步能力协议) 和 A2A 都是基于LLM的Agent的功能,这篇博客的作用就是阐明它们的区别。
2. Function calling/外部函数调用
起到和LLM交互的是提示工程,在提示工程中,需要和LLM以外的系统对接,特别是强绑定的系统,比如大数据系统,报价系统,。。,得到数字后,填入大模型的提示语句中去。
外部函数调用的好处是可以结合传统的系统的进行交互,不需要任何协议。
def get_weather(location: str) -> str:return "巴黎今天天气多云,16°C"
(以下内容ChatGPT 生成)json:
{"functions": [{"name": "get_weather","description": "获取指定城市的天气","parameters": {"type": "object","properties": {"location": {"type": "string","description": "城市名称"}},"required": ["location"]}}],"prompt": "请告诉我巴黎今天的天气。"
}
3. MCP (Modal context protocol/模态上下文协议)(chatGPT 生成)
这是一个让LLM能记住你说过什么,知道你在用什么工具,处在哪种模式下的协议。如果你在一个对话中说了:“刚才说的那个电影不错”,MCP 能让AI 理解“那个电影”是你前面提到的那部。
在生活上,再比如: 你和助理在对话:
。你说:“我明天要飞巴黎。”
。后面你说:“查一下天气。”
如果没有context(上下文),助理会懵:“查哪里的天气?” 有MCP协议,AI知道你提到了“巴黎”,就能自动把“巴黎”作为参数传进去。
MCP的一些特性:
。保留对话历史
。管理工具模式 (比如你正在用哪种插件,调用了哪些函数)
。提供上下文记忆支持。
4. MCP (Multi-step capability protocol/多步能力协议)
是让LLM 能“自己规划并一步步完成复杂任务” 的一种协议
比如:你说:“帮我订巴黎的机票,查天气,推荐穿搭。”
AI 不只作一件事,而是这样想:
- 我的先查航班 -> 工具A
- 然后查天气 -> 工具B
- 根据天气推荐穿搭 -> 工具 C
伪代码:
# 用户输入任务
user_input = "我要下周去巴黎,帮我查天气并推荐穿搭"# Step 1: LLM 解析意图
steps = plan_task(user_input)
# steps = [
# {"tool": "get_weather", "args": {"location": "巴黎", "date": "下周"}},
# {"tool": "recommend_outfit", "args": {"weather_info": "<来自上一步结果>"}}
# ]# Step 2: MCP协议驱动工具执行
weather = call_tool("get_weather", location="巴黎", date="下周")
outfit = call_tool("recommend_outfit", weather_info=weather)# Step 3: LLM 整合最终答案
final_answer = format_response(weather, outfit)# 输出
print(final_answer)
每一步都调用一个工具,等一个结果,再进入下一步。整个过程是AI自己规划的,不是你一步步指令。
在生活上,再比如, 你跟一个懂事的助理说:“我下周要去巴黎,帮我安排一下。”
。助理就自己去查航班✈️
。然后查巴黎天气☁️
。在给你搭配穿搭
这个流程不需要你手动指挥每一步。
MCP/多步能力协议的特性:
。任务规划
。多工具结合调用
。能解决需要多个步骤的复杂问题
如果你在使用像 OpenAI Assistants v2 或者 LangGraph / LangChain Agents,就已经是在使用 多步能力协议 的变体了。
协议名 | 简单解释 | 类比 | 核心用途 |
模态上下文协议 | 让 AI 记住上下文和当前状态 | 记住你说过什么 | 上下文管理、记忆 |
多步能力协议 | 让 AI 会自己分步骤完成任务 | 懂事的助理帮你安排事情 | 多工具任务执行 |
5. A2A (Agent to agent protocol)
就是“AI 助理之间的沟通规则”,让多个职能体可以相互配合。
伪代码示意A2A交互逻辑
# 用户输入
user_input = "我下周去巴黎,查天气并推荐穿搭"# AgentStylist 接到请求后:
def agent_stylist_handle(user_input):# 1. 识别出需要天气数据location = "巴黎"date = "下周"# 2. 向 AgentWeather 请求天气(A2A 协议调用)weather = send_to_agent("AgentWeather", {"location": location,"date": date})# 3. 根据天气生成穿搭建议outfit = recommend_outfit(weather)# 4. 回复用户return f"巴黎{date}天气:{weather}。建议穿:{outfit}。"
这种协议背后可能使用 JSON,消息队列,RPC,或自然语言通信等方式。
有些系统比如 微软等AutoGen,LangGraph,OpenAgents内置这种对话。
真实的微软AutoGen 框架程序:
from autogen import AssistantAgent, GroupChatweather_agent = AssistantAgent(name="WeatherAgent", ...)
stylist_agent = AssistantAgent(name="StylistAgent", ...)# 组建一个 GroupChat(自动使用 A2A 协议)
chat = GroupChat(agents=[weather_agent, stylist_agent], messages=[...])chat.start()
总结:
A2A 协议让多个智能体像“会合作的团队”一样工作,自动沟通,自动分工,自动协作。用户只管发指令,背后多个Agent自己协调完成任务。