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的边界,覆盖“知识、操作、指令”全需求:

  1. Resources(知识扩展):为AI提供结构化外部数据(如数据库、文档、实时API),弥补模型“训练数据静态化”的缺陷(如实时股票行情、景点开放时间)。

  2. Tools(工具调用):允许AI执行外部操作(如发送邮件、调用GitHub接口、操作区块链智能合约、抓取网页),从“只能回答”升级为“能执行任务”。

  3. 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为例):

  1. 获取授权:在高德开放平台注册开发者→创建应用→选择“Web服务”→获取API Key(相当于“调用凭证”)。

  2. 配置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"}
      }
    }
  3. AI调用服务:在Cursor Agent模式下输入指令(如“用高德MCP做上海一天旅游攻略”),AI自动通过MCP调用高德工具:

    • 调用maps_text_search获取上海景点(如豫园、外滩、东方明珠);

    • 调用maps_weather获取当日天气(如“多云转雷阵雨,11-21℃”);

    • 调用maps_direction_walking规划步行路线(如外滩到南京路步行街);

  4. 生成结果:AI整合数据,输出含“行程安排、交通建议、天气提示”的攻略,甚至生成HTML网页(A4尺寸,支持打印)。

延伸配置:文档还演示了在Cherry Studio、GitHub Copilot中集成高德MCP的流程,核心差异在于“Server配置入口”(如Copilot需在VS Code的settings.json中添加MCP信息),但协议逻辑一致。

案例2:Fetch网页内容抓取(将网页转为Markdown)

目标:通过MCP的Fetch Server,将指定网页内容抓取并转为Markdown格式(方便编辑、存档)。 核心步骤

  1. 添加Fetch Server:在mcp.json中配置Fetch服务的SSE URL(专属连接地址,需保密):

    "fetch": {
      "type": "sse",
      "url": "https://mcp.api-inference.modelscope.cn/sse/你的专属URL"
    }
  2. 调用服务:在Agent模式输入指令(如“用Fetch MCP将新浪文章转为Markdown”),AI自动抓取网页内容并转换格式。

  3. 限制说明:并非所有网页都能抓取——若网页robots.txt禁止自动化抓取(如百度百家号),MCP会提示“无法获取内容”,需手动复制。

案例3:Bing中文搜索(获取实时新闻)

目标:通过MCP集成Bing搜索服务,让AI获取指定关键词的最新新闻(如黄金行情、AI动态)。 核心步骤

  1. 配置Bing Server:在mcp.json中添加Bing服务的SSE URL;

  2. 调用搜索:输入指令(如“用Bing MCP查找黄金相关新闻”),AI返回结构化结果(含新闻标题、摘要、链接),支持进一步获取某条新闻的详细内容(调用fetch_webpage工具)。

案例4:桌面TXT统计器(MCP SDK开发)

目标:通过Python MCP SDK,开发自定义MCP Server(统计桌面TXT文件数量、列出文件名),演示“开发者如何搭建专属MCP服务”。 核心步骤

  1. 安装SDK:通过pip install mcp -i https://pypi.tuna.tsinghua.edu.cn/simple安装Python MCP SDK;

  2. 编写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()
  3. 测试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个原则,兼顾技术落地与生态扩展:

  1. 拥抱智能体能力:支持自然、非结构化的协作模式(如Agent间用自然语言+结构化数据混合通信),不限制Agent的能力类型。

  2. 利用现有标准:基于HTTP、SSE(Server-Sent Events)、JSON-RPC等成熟技术,确保与现有系统(如Web服务、API)兼容,降低开发成本。

  3. 默认安全:支持企业级认证(如API Key、Bearer Token)和授权机制,防止未授权Agent调用服务,保障数据安全。

  4. 支持长期任务:能处理“快速查询”(如天气查询)和“长期任务”(如7天自驾游规划),通过SSE实时推送任务状态(如“任务处理中→已完成”)。

  5. 多模态支持:允许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的协作流程标准化,支持“简单任务”和“复杂多轮交互任务”,步骤清晰可复用:

  1. 发现(Discovery):客户端Agent通过访问目标Agent的/.well-known/agent.json,获取Agent Card,了解其能力(如“是否能查天气”)、端点URL(如/api/tasks/weather)、认证方式(如需API Key)。

  2. 启动(Initiation):客户端根据任务类型发送请求:

    • 即时任务(如天气查询):调用tasks/send端点,直接获取最终Task结果;

    • 长期任务(如7天旅游规划):调用tasks/sendSubscribe端点,通过SSE接收实时状态更新。

  3. 处理(Processing):服务端Agent接收请求,执行任务(如查询天气数据库),若需补充信息(如“日期格式错误”),则将任务状态设为input-required,等待客户端补充。

  4. 交互(Interaction,可选):若任务状态为input-required,客户端发送补充消息(如“正确日期为2025年5月10日”),服务端继续处理。

  5. 完成(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 运行效果演示

当你运行这两个程序时,会看到以下效果:

  1. 天气Agent启动后,会提供天气查询服务

  2. 篮球活动Agent会通过A2A协议查询天气

  3. 根据天气情况自动决定是否安排篮球活动

例如:

# 查询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协议优势

  1. 标准化接口:一次开发,多场景复用

  2. 降低集成成本:无需为每个工具单独开发适配逻辑

  3. 扩展性强:支持动态添加新工具和服务

5.2 A2A协议优势

  1. 安全可靠:支持企业级认证和授权机制

  2. 灵活协作:支持简单任务和复杂多轮交互

  3. 多模态支持:可传输文本、音频、视频、文件等多种内容

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)

运行步骤

  1. 首先安装依赖:

pip install fastapi uvicorn requests pydantic
  1. 启动天气查询服务:

python weather_agent.py
  1. 在另一个终端运行篮球活动安排:

python basketball_agent.py

现在,你已经掌握了MCP和A2A协议的核心概念和实际应用。快去尝试构建你自己的AI协作系统吧!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐