想玩转A2A协议,谷歌A2A协议入门必看指南(附简易Python代码示例)

2025 年 4 月 9 日谷歌在其官方开发者博客上发布了A2A 协议(Agent-to-Agent Protocol),旨在推动不同人工智能代理/智能体(AI Agents)之间的互联互通与高效协作,并拉上了 50 几家合作伙伴站台。这一协议代表了代理技术发展的新阶段,尤其针对在复杂企业环境中多代理协同工作的需求。

请添加图片描述

1、谷歌A2A协议是什么?

Agent2Agent(A2A)协议是谷歌于2025年4月推出的首个开源标准智能体交互协议,旨在解决AI智能体之间的互操作性问题。该协议通过统一通信标准,允许不同开发者、平台或供应商构建的智能体(如自动化程序、AI助手等)跨越数据孤岛和应用程序壁垒,实现安全、高效的协作与任务协调。其设计灵感被类比为“智能体的通用语言”或“智能体时代的HTTP协议”。

A2A的核心目标包括:

  1. 促进智能体间协作:支持跨平台、多模态通信,例如文本、音频、视频等。
  2. 兼容现有技术栈:基于HTTP、SSE(服务器发送事件)、JSON-RPC等成熟标准构建,便于与企业现有IT基础设施集成。
  3. 支持复杂任务管理:涵盖从即时响应到需人工介入的长时任务,并提供实时状态更新。

2、谷歌A2A协议为何意义重大?

请添加图片描述

A2A协议的推出标志着智能体生态从“孤立运行”迈向“开放协作”的关键转折,其重要性体现在以下方面:

  1. 打破系统孤岛:传统智能体因框架差异难以协作,而A2A通过标准化接口解决了这一问题,例如支持Atlassian、Salesforce、SAP等50多家主流企业平台的互通。
  2. 推动生态繁荣:类比安卓系统的开源模式,A2A吸引了埃森哲、德勤、PayPal等企业的参与,形成多行业协作网络,有望催生“智能体经济”。
  3. 与MCP协议互补:A2A专注于智能体间通信,而Anthropic的MCP协议(Model Context Protocol)负责连接工具与数据资源,两者结合可覆盖更复杂的业务场景,例如汽车维修中的工具调度与团队协作。
  4. 降低企业成本:通过统一协议减少重复开发,提升智能体自主性和生产力,长期降低多智能体系统的部署成本。

3、谷歌A2A协议如何运作?

请添加图片描述

A2A协议的运作机制围绕客户端智能体(发起任务)与远程智能体(执行任务)的交互展开,具体流程如下:

  1. 能力发现(Capability Discovery)
  • 每个智能体通过JSON格式的“智能体名片”(Agent Card)公开其功能、验证方式及支持的内容类型(如文本、图像等),便于其他智能体发现并选择最佳合作对象。
  • 例如,招聘场景中,主智能体通过Agent Card识别简历筛选、面试安排等专业智能体。
  1. 任务管理(Task Management)
  • 客户端智能体通过tasks/sendtasks/sendSubscribe接口发送任务请求,定义任务生命周期(提交→处理→完成→失败)。
  • 对于长时任务(如药物研发模拟),协议支持通过SSE或Webhook实时推送进度更新。
  1. 协作与交付(Collaboration & Artifacts)
  • 智能体间通过消息传递上下文、用户指令或任务结果(称为“交付物”)。例如,汽车维修场景中,智能体可请求客户发送轮胎照片以辅助诊断。
  • 交付物以多模态内容块(parts)形式返回,支持格式协商(如网页表单、视频嵌入等),适配不同用户界面。
  1. 安全与认证
  • 协议集成企业级身份验证与授权机制(如OpenAPI标准),确保数据交换的合规性与安全性。

接下来,我们将通过构建两个简单的Python代理来演示A2A的工作原理:一个作为A2A服务端,另一个作为客户端。

环境准备

需具备以下条件

  • Python 3.12+:, A2A示例代码推荐使用Python 3.12或更高版本
  • pip:用于安装依赖项
  • Git:用于克隆A2A代码仓库
  • 基础的Python和HTTP API知识

步骤1:配置开发环境

首先,我们需要配置一个干净的环境并安装必要工具。

1.安装Python(如尚未安装)

2.克隆A2A代码仓库:Google在A2A的GitHub仓库中提供了示例代码,通过以下命令获取:

 git clone https://github.com/google/A2A.git
   cd A2A/samples/python

3.安装依赖项

   pip install -r requirements.txt

步骤2:构建简易A2A服务端代理

A2A服务端代理通过HTTP端点接收客户端任务。本例将创建一个基础的回显代理(Echo Agent),接收文本消息并返回带问候语的响应。

创建echo_server.py文件

from fastapi import FastAPI, Request
from pydantic import BaseModel
import uvicorn


# Define the A2A Task structure
class Task(BaseModel):
    task_id: str
    message: dict


# Initialize FastAPI app
app = FastAPI()


# Define the Agent Card (metadata about the agent)
agent_card = {
    "name": "EchoAgent",
    "description": "Echoes back your message with a greeting",
    "endpoint": "http://localhost:8000/tasks/send",
    "capabilities": ["text"],
}


# Expose the Agent Card at /.well-known/agent.json
@app.get("/.well-known/agent.json")
async def get_agent_card():
    return agent_card


# Handle incoming tasks
@app.post("/tasks/send")
async def handle_task(task: Task):
    user_message = task.message.get("parts", [{}])[0].get("text", "")
    response = {
        "task_id": task.task_id,
        "status": "completed",
        "message": {
            "role": "agent",
            "parts": [{"text": f"Hello! You said: {user_message}"}]
        }
    }
    return response


# Run the server
if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

关键实现说明

1、 FastAPI框架:选用轻量且易上手的FastAPI搭建HTTP服务

2、 Agent Card:通过/.well-known/agent.json提供JSON格式的服务能力声明(如支持文本消息处理)

3、 任务端点

  • /tasks/send接收客户端任务
  • 提取用户文本后返回结构化响应
  • 响应符合A2A规范:包含任务ID、状态和消息部件(本例为文本部件)

启动服务

python echo_server.py

服务将运行在:

  • 代理地址:http://localhost:8000
  • Agent Card测试地址:http://localhost:8000/.well-known/agent.json

步骤3:构建简易A2A客户端代理

现在,我们将创建一个客户端代理,用于向回显代理(Echo Agent)发送消息并打印响应。

创建echo_client.py文件

import requests
import uuid


# A2A server endpoint
SERVER_URL = "http://localhost:8000/tasks/send"


# Create a simple task
task_id = str(uuid.uuid4())  # Unique task ID
task = {
    "task_id": task_id,
    "message": {
        "role": "user",
        "parts": [{"text": "Hi, how are you?"}]
    }
}


# Send the task to the server
response = requests.post(SERVER_URL, json=task)


# Check the response
if response.status_code == 200:
    result = response.json()
    agent_message = result["message"]["parts"][0]["text"]
    print(f"Agent replied: {agent_message}")
else:
    print(f"Error: {response.status_code}")

关键实现说明

1、 任务标识:使用uuid生成唯一task_id用于任务追踪

2、任务结构

  • 包含用户消息的文本部件(“Hi, how are you?”)

3、 通信过程

  • 通过requests库向服务端的/tasks/send端点发送POST请求
  • 从响应中提取回显代理返回的消息文本

运行客户端

python echo_client.py

输出

Agent replied: Hello! You said: Hi, how are you?

步骤4:实战案例 - 计算器代理

下面我们通过一个更实用的案例来升级:开发一个能执行基础运算的计算器代理(Calculator Agent),这将展示A2A如何处理结构化任务。

改造echo_server.py创建calc_server.py

from fastapi import FastAPI, Request
from pydantic import BaseModel
import uvicorn


class Task(BaseModel):
    task_id: str
    message: dict


app = FastAPI()


agent_card = {
    "name": "CalcAgent",
    "description": "Performs basic arithmetic (add, subtract)",
    "endpoint": "http://localhost:8001/tasks/send",
    "capabilities": ["text", "calculation"],
}


@app.get("/.well-known/agent.json")
async def get_agent_card():
    return agent_card


@app.post("/tasks/send")
async def handle_task(task: Task):
    user_message = task.message.get("parts", [{}])[0].get("text", "").lower()
    try:
        # Expect input like "add 5 3" or "subtract 5 3"
        parts = user_message.split()
        operation, num1, num2 = parts[0], float(parts[1]), float(parts[2])
        if operation == "add":
            result = num1 + num2
        elif operation == "subtract":
            result = num1 - num2
        else:
            raise ValueError("Unsupported operation")
        response = {
            "task_id": task.task_id,
            "status": "completed",
            "message": {
                "role": "agent",
                "parts": [{"text": f"Result: {result}"}]
            }
        }
    except Exception as e:
        response = {
            "task_id": task.task_id,
            "status": "failed",
            "message": {
                "role": "agent",
                "parts": [{"text": f"Error: {str(e)}"}]
            }
        }
    return response


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8001)

启动服务端

python calc_server.py

创建calc_client.py

import requests
import uuid


SERVER_URL = "http://localhost:8001/tasks/send"


# Create a calculation task
task_id = str(uuid.uuid4())
task = {
    "task_id": task_id,
    "message": {
        "role": "user",
        "parts": [{"text": "add 10 7"}]
    }
}


# Send the task
response = requests.post(SERVER_URL, json=task)


# Check the response
if response.status_code == 200:
    result = response.json()
    agent_message = result["message"]["parts"][0]["text"]
    print(f"Agent replied: {agent_message}")
else:
    print(f"Error: {response.status_code}")

运行客户端

python calc_client.py

输出:

Agent replied: Result: 17

第5步:探索A2A的核心功能

现在您已构建基础智能体,接下来可以深入了解以下A2A特色功能:

智能体发现机制

通过Agent Card (/.well-known/agent.json),客户端可自动识别智能体功能。实际应用中,客户端可通过该卡片确认服务器是否支持计算或文件上传等功能。

示例:使用requests.get("http://localhost:8001/.well-known/agent.json")获取并查看智能体卡片。

任务状态管理

A2A任务支持多种状态:已提交(submitted)、处理中(working)、已完成(completed)、已失败(failed)。前文示例仅展示完成/失败状态,但您可扩展服务端以处理多步骤任务(如表单填写)的"需补充输入"(input-required)状态。

长任务流式处理

针对耗时任务(如数据分析),A2A通过/tasks/sendSubscribe接口支持流式传输。该功能需使用服务器推送事件(SSE),您可通过FastAPI的流式响应能力实现。

多模态交互支持

A2A不仅支持文本传输——尝试改造服务端返回FilePart(如图片文件)或DataPart(如JSON格式表单)。

实践建议:访问A2A GitHub仓库的samples/python目录,参考招聘自动化等高级示例进行演练。

总结与展望

A2A协议通过标准化智能体交互,为多智能体系统提供了类似人类团队的协作框架。其开源特性与生态开放性(如支持社区贡献)可能加速其在企业中的普及。未来,若协议能突破采用率的“临界点”,或将成为智能体互操作性的基础设施,推动AI技术更深融入商业与日常生活。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值