AI代码开发宝库系列:MCP与A2A协议:AI智能体协作
MCP与A2A协议:解锁AI智能体协作的未来之路

在AI技术飞速发展的今天,我们正见证着从单一模型向多智能体协作的转变。想象一下,未来的AI不仅能自己思考,还能像人类团队一样分工合作,各司其职,共同完成复杂的任务。这正是MCP(Model Context Protocol)和A2A(Agent2Agent)协议所带来的革命性变化。今天,我们就来深入浅出地聊聊这两个前沿技术,让你轻松掌握AI协作的核心秘密!
一、MCP:AI的"USB-C接口",让AI连接万物
如果你用过USB-C接口,就会发现它能连接各种设备——充电器、耳机、显示器等等。MCP协议就像AI世界的USB-C接口,让AI模型能够轻松连接各种外部工具和服务。
1.1 什么是MCP?
MCP是Anthropic公司2024年11月推出的开放协议,核心定位是标准化LLM(大语言模型)与外部数据源、工具、服务的交互方式,被类比为“AI领域的USB-C接口”——解决不同工具/数据与AI模型的“兼容性问题”,降低集成成本。
1. MCP的核心基础:定义与核心差异
(1)本质与目标
-
本质:通用交互协议,而非单一功能。
-
目标:通过统一接口实现“跨工具/跨数据源互操作”,让AI模型无需针对不同工具单独开发适配逻辑,即可调用各类外部能力。
(2)与Function Calling(函数调用)的核心区别
| 对比维度 | MCP(Model Context Protocol) | Function Calling(函数调用) |
|---|---|---|
| 性质 | 开放协议(通用标准) | 模型功能(特定实现) |
| 覆盖范围 | 多数据源、多功能(通用场景) | 单一数据源或单一功能(特定场景) |
| 核心目标 | 统一接口,实现跨系统互操作 | 扩展单个模型的特定能力 |
| 实现方式 | 基于标准协议,无需依赖特定模型 | 依赖具体模型的函数定义,需单独适配 |
| 开发复杂度 | 低(一次开发,多场景复用) | 高(每个任务需单独编写函数) |
| 复用性 | 高(跨模型、跨平台兼容) | 低(函数绑定特定任务,难迁移) |
| 灵活性 | 高(支持动态扩展工具/数据) | 低(新增功能需重新开发函数) |
| 典型场景 | 复杂任务(如跨平台旅游攻略、多工具数据整合) | 简单任务(如天气查询、单接口商品推荐) |
2. MCP的核心概念:架构、组件与功能
(1)架构:客户端-服务器(Client-Server)模式
MCP通过3个核心组件实现AI与外部系统的通信,结构清晰且职责明确:
-
MCP Host:AI模型的运行环境(如Claude Desktop、Cursor IDE、GitHub Copilot),是“模型载体”。
-
MCP Client:嵌入Host的“请求发起者”,负责将AI的需求转化为标准协议格式,与MCP Server通信。
-
MCP Server:提供具体功能的“服务端”(如高德地图服务、网页抓取服务),接收Client请求并返回结果(如景点信息、网页内容)。
(2)三大核心功能:解决AI的“能力短板”
MCP通过3类能力扩展AI的边界,覆盖“知识、操作、指令”全需求:
-
Resources(知识扩展):为AI提供结构化外部数据(如数据库、文档、实时API),弥补模型“训练数据静态化”的缺陷(如实时股票行情、景点开放时间)。
-
Tools(工具调用):允许AI执行外部操作(如发送邮件、调用GitHub接口、操作区块链智能合约、抓取网页),从“只能回答”升级为“能执行任务”。
-
Prompts(提示模板):预定义优化后的指令模板(如“生成A4纸大小的旅游规划表”),让AI更精准理解任务需求,减少指令偏差。
3. MCP的使用场景:从增强能力到构建生态
MCP的应用场景围绕“扩展AI能力”和“构建去中心化生态”展开,覆盖个人、企业、开发者多角色:
(1)增强AI的实时性与执行能力
-
实时数据访问:AI通过MCP调用实时接口(如高德地图、Bing搜索),获取训练数据之外的最新信息(如当日天气、实时新闻、股票动态)。
-
自动化任务执行:AI直接通过MCP完成操作(如整理桌面TXT文件、发送邮件、管理代码仓库),无需人工介入。
-
区块链交互:集成以太坊智能合约,用户通过自然语言即可完成链上操作(如DeFi交易、NFT查询),降低区块链使用门槛。
(2)构建去中心化AI生态
-
创作者经济:个人/企业可搭建专属MCP Server(如“鸟类知识库Server”“本地生活服务Server”),通过其他AI的调用次数获取收益,形成“AI服务交易市场”。
-
抗垄断与去中心化:AI能力分散在多个Server,避免大公司垄断工具/数据资源,提升生态多样性。
(3)简化开发者工具集成
-
标准化集成:开发者无需为每个数据源/工具编写定制API,只需遵循MCP协议,即可让AI调用各类服务(如同时集成高德地图+天气API+网页抓取)。
-
多模态支持:整合语音、图像、传感器数据(如通过MCP调用摄像头识别物体、调用麦克风转文字),让AI具备“多感官感知”能力。
1.3 实际应用场景
想象一下,你正在计划一次旅行,AI助手可以通过MCP:
-
调用高德地图获取景点信息和路线规划
-
查询实时天气数据
-
抓取网页内容生成行程攻略
-
统计你电脑中的旅行照片
这一切都能自动完成,是不是很酷?
MCP的实操案例:从工具配置到任务落地
文档通过5个典型案例,详细演示MCP在不同场景下的配置与使用流程,覆盖“旅游规划、网页抓取、搜索、本地文件统计”核心需求,实操性极强。
案例1:旅游攻略MCP(高德地图集成)
目标:让AI通过MCP调用高德地图服务,生成上海/大连一日游攻略(含景点、路线、天气、交通),并输出可打印的网页。 核心步骤(以Cursor为例):
-
获取授权:在高德开放平台注册开发者→创建应用→选择“Web服务”→获取API Key(相当于“调用凭证”)。
-
配置MCP Server:在Cursor的
mcp.json中添加高德地图Server信息,填入API Key(确保Server能正常连接高德服务)。"mcpServers": { "amap-maps": { "command": "npx", "args": ["-y", "@amap/amap-maps-mcp-server"], "env": {"AMAP_MAPS_API_KEY": "你的API Key"} } } -
AI调用服务:在Cursor Agent模式下输入指令(如“用高德MCP做上海一天旅游攻略”),AI自动通过MCP调用高德工具:
-
调用
maps_text_search获取上海景点(如豫园、外滩、东方明珠); -
调用
maps_weather获取当日天气(如“多云转雷阵雨,11-21℃”); -
调用
maps_direction_walking规划步行路线(如外滩到南京路步行街);
-
-
生成结果:AI整合数据,输出含“行程安排、交通建议、天气提示”的攻略,甚至生成HTML网页(A4尺寸,支持打印)。
延伸配置:文档还演示了在Cherry Studio、GitHub Copilot中集成高德MCP的流程,核心差异在于“Server配置入口”(如Copilot需在VS Code的settings.json中添加MCP信息),但协议逻辑一致。
案例2:Fetch网页内容抓取(将网页转为Markdown)
目标:通过MCP的Fetch Server,将指定网页内容抓取并转为Markdown格式(方便编辑、存档)。 核心步骤:
-
添加Fetch Server:在
mcp.json中配置Fetch服务的SSE URL(专属连接地址,需保密):"fetch": { "type": "sse", "url": "https://mcp.api-inference.modelscope.cn/sse/你的专属URL" } -
调用服务:在Agent模式输入指令(如“用Fetch MCP将新浪文章转为Markdown”),AI自动抓取网页内容并转换格式。
-
限制说明:并非所有网页都能抓取——若网页
robots.txt禁止自动化抓取(如百度百家号),MCP会提示“无法获取内容”,需手动复制。
案例3:Bing中文搜索(获取实时新闻)
目标:通过MCP集成Bing搜索服务,让AI获取指定关键词的最新新闻(如黄金行情、AI动态)。 核心步骤:
-
配置Bing Server:在
mcp.json中添加Bing服务的SSE URL; -
调用搜索:输入指令(如“用Bing MCP查找黄金相关新闻”),AI返回结构化结果(含新闻标题、摘要、链接),支持进一步获取某条新闻的详细内容(调用
fetch_webpage工具)。
案例4:桌面TXT统计器(MCP SDK开发)
目标:通过Python MCP SDK,开发自定义MCP Server(统计桌面TXT文件数量、列出文件名),演示“开发者如何搭建专属MCP服务”。 核心步骤:
-
安装SDK:通过
pip install mcp -i https://pypi.tuna.tsinghua.edu.cn/simple安装Python MCP SDK; -
编写Server代码:使用
FastMCP(轻量级Server框架)定义工具函数,通过@mcp.tool()装饰器暴露给AI调用:import os from pathlib import Path from mcp.server.fastmcp import FastMCP # 创建MCP Server实例 mcp = FastMCP("桌面TXT文件统计器") # 工具1:统计桌面TXT文件数量 @mcp.tool() def count_desktop_txt_files() -> int: desktop_path = Path(os.path.expanduser("~/Desktop")) # 获取桌面路径 txt_files = list(desktop_path.glob("*.txt")) # 匹配TXT文件 return len(txt_files) # 返回数量 # 工具2:列出桌面所有TXT文件名 @mcp.tool() def list_desktop_txt_files() -> str: desktop_path = Path(os.path.expanduser("~/Desktop")) txt_files = list(desktop_path.glob("*.txt")) if not txt_files: return "桌面上没有TXT文件" return f"找到{len(txt_files)}个TXT文件:\n" + "\n".join([f"- {f.name}" for f in txt_files]) # 启动Server if __name__ == "__main__": mcp.run() -
测试Server:通过
mcp dev txt_counter.py启动服务,访问http://localhost:5173(MCP Inspector调试工具),点击“Run Tool”即可查看统计结果(如“找到2个TXT文件:111.txt、新建文本文档.txt”)。
案例5:Qwen-Agent集成MCP
目标:在阿里Qwen-Agent(智能体框架)中集成MCP服务(高德、Fetch、Bing),让Agent具备“多工具协作”能力。 核心步骤:在Qwen-Agent的tools配置中添加MCP Server信息,并调整聊天界面的“建议提示词”(如“将网页转为Markdown”“搜索AI最新新闻”),让用户直接触发MCP工具调用。
二、A2A:AI智能体的"团队协作协议"
如果说MCP是让AI连接工具,那么A2A就是让多个AI智能体像团队一样协作。
A2A是Google于2025年4月发布的开放协议,核心定位是标准化多个AI Agent之间的协作方式,解决“多智能体分工、通信、任务协同”的问题,适用于大规模、复杂任务(如多智能体安排活动、分工处理数据分析)。
1. A2A的核心基础:定义与原则
(1)本质与目标
-
本质:智能体间的“通用通信协议”,让不同Agent(如天气Agent、活动安排Agent)能理解彼此的需求,协同完成任务。
-
目标:打破单个Agent的“能力边界”,通过多Agent分工(如“天气查询→活动决策→通知用户”),完成复杂任务。
(2)五大核心原则:确保协作的“兼容性、安全性、灵活性”
A2A的设计遵循5个原则,兼顾技术落地与生态扩展:
-
拥抱智能体能力:支持自然、非结构化的协作模式(如Agent间用自然语言+结构化数据混合通信),不限制Agent的能力类型。
-
利用现有标准:基于HTTP、SSE(Server-Sent Events)、JSON-RPC等成熟技术,确保与现有系统(如Web服务、API)兼容,降低开发成本。
-
默认安全:支持企业级认证(如API Key、Bearer Token)和授权机制,防止未授权Agent调用服务,保障数据安全。
-
支持长期任务:能处理“快速查询”(如天气查询)和“长期任务”(如7天自驾游规划),通过SSE实时推送任务状态(如“任务处理中→已完成”)。
-
多模态支持:允许Agent间传输文本、音频、视频、文件等多模态内容(如天气Agent发送雷达图、活动Agent发送日程表文件)。
2. A2A的关键组件:协作的“基础设施”
A2A通过8个核心组件定义“谁协作、如何协作、协作内容是什么”,组件间逻辑闭环:
| 组件名称 | 核心描述 |
|---|---|
| Agent Card | 智能体的“身份证+服务菜单”,位于/.well-known/agent.json,描述Agent的能力(如“能查天气”)、端点URL(如/api/tasks/weather)、认证要求(如需API Key),用于Agent间“能力发现”。 |
| A2A服务器 | 实现A2A协议的“服务端”,暴露HTTP端点(如/api/tasks/send),管理任务执行(如接收天气查询请求、返回结果),定义任务处理逻辑。 |
| A2A客户端 | 发起协作请求的“调用方”(如活动安排Agent),通过tasks/send(即时任务)或tasks/sendSubscribe(长期任务)与Server通信,消费A2A服务。 |
| 任务(Task) | 协作的“最小工作单位”,有唯一ID和状态(如submitted→working→completed/failed),记录协作的目标(如“查询2025年5月8日天气”)。 |
| 消息(Message) | Agent间的“通信单位”,包含角色(user/agent)和内容(如“请提供5月8日天气”),支持多轮交互(如“补充查询温度范围”)。 |
| 部分(Part) | 消息的“内容细分单位”,分为TextPart(文本)、FilePart(文件)、DataPart(结构化数据),确保多模态内容的标准化传输。 |
| 工件(Artifact) | 任务的“输出结果”,包含Part(如天气查询结果的“温度18℃、 condition雷阵雨”),是Agent协作的“交付物”。 |
| 流式传输 | 通过SSE实时推送长期任务的状态更新(如“数据分析到30%→60%→100%”),避免客户端频繁查询。 |
| 推送通知 | 通过Webhook将任务结果主动推送给客户端(如“天气查询完成,已推送结果”),提升协作效率。 |
3. A2A的工作流程:从“发现能力”到“完成任务”
A2A的协作流程标准化,支持“简单任务”和“复杂多轮交互任务”,步骤清晰可复用:
-
发现(Discovery):客户端Agent通过访问目标Agent的
/.well-known/agent.json,获取Agent Card,了解其能力(如“是否能查天气”)、端点URL(如/api/tasks/weather)、认证方式(如需API Key)。 -
启动(Initiation):客户端根据任务类型发送请求:
-
即时任务(如天气查询):调用
tasks/send端点,直接获取最终Task结果; -
长期任务(如7天旅游规划):调用
tasks/sendSubscribe端点,通过SSE接收实时状态更新。
-
-
处理(Processing):服务端Agent接收请求,执行任务(如查询天气数据库),若需补充信息(如“日期格式错误”),则将任务状态设为
input-required,等待客户端补充。 -
交互(Interaction,可选):若任务状态为
input-required,客户端发送补充消息(如“正确日期为2025年5月10日”),服务端继续处理。 -
完成(Completion):任务达到终端状态(
completed/failed/canceled),服务端返回工件(如天气结果),协作结束。
2.3 实际应用案例:智能活动安排
让我们通过一个具体的例子来理解A2A的强大之处——智能篮球活动安排系统。
三、代码实战:构建AI协作系统
现在,让我们通过实际代码来体验MCP和A2A的魅力!
3.1 天气查询Agent(A2A服务端)
首先,我们创建一个天气查询Agent,它将作为服务端提供天气查询服务:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import uvicorn
app = FastAPI()
# Agent Card声明(通过/.well-known/agent.json暴露)
WEATHER_AGENT_CARD = {
"name": "WeatherAgent",
"version": "1.0",
"description": "提供指定日期的天气数据查询",
"endpoints": {
"task_submit": "/api/tasks/weather",
"sse_subscribe": "/api/tasks/updates"
},
"input_schema": {
"type": "object",
"properties": {
"date": {"type": "string", "format": "date"},
"location": {"type": "string", "enum": ["北京"]}
},
"required": ["date"]
},
"authentication": {"methods": ["API_Key"]}
}
# 任务请求模型
class WeatherTaskRequest(BaseModel):
task_id: str
params: dict
# 模拟天气数据存储
weather_db = {
"2025-05-08": {"temperature": "25℃", "condition": "雷阵雨"},
"2025-05-09": {"temperature": "18℃", "condition": "小雨转晴"},
"2025-05-10": {"temperature": "22℃", "condition": "多云转晴"}
}
@app.get("/.well-known/agent.json")
async def get_agent_card():
return WEATHER_AGENT_CARD
@app.post("/api/tasks/weather")
async def handle_weather_task(request: WeatherTaskRequest):
"""处理天气查询任务"""
target_date = request.params.get("date")
# 参数验证
if not target_date or target_date not in weather_db:
raise HTTPException(status_code=400, detail="无效日期参数")
return {
"task_id": request.task_id,
"status": "completed",
"artifact": {
"date": target_date,
"weather": weather_db[target_date]
}
}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
3.2 篮球活动安排Agent(A2A客户端)
接下来,我们创建一个篮球活动安排Agent,它将作为客户端调用天气查询服务:
import requests
import uuid
class BasketBallAgent:
def __init__(self):
self.weather_agent_url = "http://localhost:8000"
self.api_key = "SECRET_KEY" # 实际应通过安全方式存储
def _create_task(self, target_date: str) -> dict:
"""创建A2A标准任务对象"""
return {
"task_id": str(uuid.uuid4()),
"params": {
"date": target_date,
"location": "北京"
}
}
def check_weather(self, target_date: str) -> dict:
"""通过A2A协议查询天气"""
# 获取天气智能体能力描述
agent_card = requests.get(
f"{self.weather_agent_url}/.well-known/agent.json"
).json()
# 构造任务请求
task = self._create_task(target_date)
# 发送任务请求
response = requests.post(
f"{self.weather_agent_url}{agent_card['endpoints']['task_submit']}",
json=task,
headers={"Authorization": f"Bearer {self.api_key}"}
)
if response.status_code == 200:
return response.json()["artifact"]
else:
raise Exception(f"天气查询失败: {response.text}")
def schedule_meeting(self, date: str):
"""综合决策逻辑"""
try:
result = self.check_weather(date)
# print('result=', result)
if "雨" not in result["weather"]["condition"] and "雪" not in result["weather"]["condition"]:
return {"status": "confirmed", "weather": result["weather"]}
else:
return {"status": "cancelled", "reason": "恶劣天气"}
except Exception as e:
return {"status": "error", "detail": str(e)}
# 使用示例
if __name__ == "__main__":
meeting_agent = BasketBallAgent()
result = meeting_agent.schedule_meeting("2025-05-08")
# result = meeting_agent.schedule_meeting("2025-05-10")
print("篮球安排结果:", result)
3.3 运行效果演示
当你运行这两个程序时,会看到以下效果:
-
天气Agent启动后,会提供天气查询服务
-
篮球活动Agent会通过A2A协议查询天气
-
根据天气情况自动决定是否安排篮球活动
例如:
# 查询2025-05-08的天气(雷阵雨)
篮球安排结果: {'status': 'cancelled', 'reason': '恶劣天气'}
# 查询2025-05-10的天气(多云转晴)
篮球安排结果: {'status': 'confirmed', 'weather': {'temperature': '22℃', 'condition': '多云转晴'}}
四、未来应用场景展望
MCP和A2A协议的结合,将为AI应用带来无限可能:
4.1 企业级智能助手
-
客户服务:多个AI Agent协同处理复杂客户问题
-
数据分析:数据处理Agent、可视化Agent、报告生成Agent分工合作
-
项目管理:任务分配、进度跟踪、风险预警全自动化
4.2 个人智能生活
-
旅行规划:景点推荐、路线规划、酒店预订、天气查询一站式服务
-
健康管理:运动监测、饮食建议、医疗咨询、用药提醒协同工作
-
学习助手:知识点讲解、练习题生成、学习进度跟踪、个性化推荐
4.3 开发者生态
-
工具市场:开发者可以创建各种MCP工具,形成AI服务交易市场
-
智能体协作:构建复杂的AI应用,就像搭积木一样简单
-
去中心化AI:避免大公司垄断,促进AI生态多样性发展
五、技术优势总结
5.1 MCP协议优势
-
标准化接口:一次开发,多场景复用
-
降低集成成本:无需为每个工具单独开发适配逻辑
-
扩展性强:支持动态添加新工具和服务
5.2 A2A协议优势
-
安全可靠:支持企业级认证和授权机制
-
灵活协作:支持简单任务和复杂多轮交互
-
多模态支持:可传输文本、音频、视频、文件等多种内容
5.3 协同效应
MCP和A2A的结合实现了"能力调用"和"协作通信"的完美统一:
-
MCP解决AI如何调用外部工具/数据的问题
-
A2A解决多Agent如何分工协作的问题
-
两者结合构建了完整的AI生态体系
六、结语
MCP和A2A协议的出现,标志着AI技术从"单打独斗"向"团队协作"的重要转变。它们不仅解决了技术层面的兼容性和协作问题,更为构建大规模AI应用提供了标准化的技术底座。
对于开发者而言,掌握MCP和A2A协议意味着:
-
能够快速构建功能强大的AI应用
-
可以轻松集成各种外部工具和服务
-
可以参与到蓬勃发展的AI生态中
对于企业而言,这些协议意味着:
-
可以构建更加智能的业务系统
-
能够实现更高效的自动化流程
-
可以降低AI应用的开发和维护成本
未来已来,让我们一起拥抱这个AI智能体协作的新时代!
完整可运行代码
天气查询Agent(weather_agent.py)
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import uvicorn
app = FastAPI()
# Agent Card声明(通过/.well-known/agent.json暴露)
WEATHER_AGENT_CARD = {
"name": "WeatherAgent",
"version": "1.0",
"description": "提供指定日期的天气数据查询",
"endpoints": {
"task_submit": "/api/tasks/weather",
"sse_subscribe": "/api/tasks/updates"
},
"input_schema": {
"type": "object",
"properties": {
"date": {"type": "string", "format": "date"},
"location": {"type": "string", "enum": ["北京"]}
},
"required": ["date"]
},
"authentication": {"methods": ["API_Key"]}
}
# 任务请求模型
class WeatherTaskRequest(BaseModel):
task_id: str
params: dict
# 模拟天气数据存储
weather_db = {
"2025-05-08": {"temperature": "25℃", "condition": "雷阵雨"},
"2025-05-09": {"temperature": "18℃", "condition": "小雨转晴"},
"2025-05-10": {"temperature": "22℃", "condition": "多云转晴"}
}
@app.get("/.well-known/agent.json")
async def get_agent_card():
return WEATHER_AGENT_CARD
@app.post("/api/tasks/weather")
async def handle_weather_task(request: WeatherTaskRequest):
"""处理天气查询任务"""
target_date = request.params.get("date")
# 参数验证
if not target_date or target_date not in weather_db:
raise HTTPException(status_code=400, detail="无效日期参数")
return {
"task_id": request.task_id,
"status": "completed",
"artifact": {
"date": target_date,
"weather": weather_db[target_date]
}
}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
篮球活动安排Agent(basketball_agent.py)
import requests
import uuid
class BasketBallAgent:
def __init__(self):
self.weather_agent_url = "http://localhost:8000"
self.api_key = "SECRET_KEY" # 实际应通过安全方式存储
def _create_task(self, target_date: str) -> dict:
"""创建A2A标准任务对象"""
return {
"task_id": str(uuid.uuid4()),
"params": {
"date": target_date,
"location": "北京"
}
}
def check_weather(self, target_date: str) -> dict:
"""通过A2A协议查询天气"""
# 获取天气智能体能力描述
agent_card = requests.get(
f"{self.weather_agent_url}/.well-known/agent.json"
).json()
# 构造任务请求
task = self._create_task(target_date)
# 发送任务请求
response = requests.post(
f"{self.weather_agent_url}{agent_card['endpoints']['task_submit']}",
json=task,
headers={"Authorization": f"Bearer {self.api_key}"}
)
if response.status_code == 200:
return response.json()["artifact"]
else:
raise Exception(f"天气查询失败: {response.text}")
def schedule_meeting(self, date: str):
"""综合决策逻辑"""
try:
result = self.check_weather(date)
# print('result=', result)
if "雨" not in result["weather"]["condition"] and "雪" not in result["weather"]["condition"]:
return {"status": "confirmed", "weather": result["weather"]}
else:
return {"status": "cancelled", "reason": "恶劣天气"}
except Exception as e:
return {"status": "error", "detail": str(e)}
# 使用示例
if __name__ == "__main__":
meeting_agent = BasketBallAgent()
result = meeting_agent.schedule_meeting("2025-05-08")
# result = meeting_agent.schedule_meeting("2025-05-10")
print("篮球安排结果:", result)
运行步骤
-
首先安装依赖:
pip install fastapi uvicorn requests pydantic
-
启动天气查询服务:
python weather_agent.py
-
在另一个终端运行篮球活动安排:
python basketball_agent.py
现在,你已经掌握了MCP和A2A协议的核心概念和实际应用。快去尝试构建你自己的AI协作系统吧!
更多推荐
所有评论(0)