A2A 项目为多种编程语言提供了官方 SDK,开发者应优先使用 SDK 而非从零实现协议。Python 开发者可以通过 pip install a2a-sdk 安装 SDK;若需要 HTTP 服务器、gRPC、数据库等扩展功能,可以安装对应的扩展包(如 pip install "a2a-sdk[all]")。其它语言的 SDK 包括:Go(a2a-go)、Java(a2a-java)、JavaScript/TypeScript(a2a-js)、C#/.NET(a2a-dotnet)、Rust(a2a-rs)。SDK 处理了协议机制(消息序列化、HTTP 传输、事件流),使开发者能够专注于智能体逻辑实现。
Agent Card 是智能体的"数字名片",是一个 JSON 文档,通常发布在 /.well-known/agent.json 路径下。开发者需要定义 Agent Card 的各个字段:基本信息(name、description、version)、服务端点 URL(url)、能力声明(capabilities,如是否支持流式传输和推送通知)、默认输入输出模式(defaultInputModes、defaultOutputModes)、技能列表(skills,每个技能包含 id、name、description、tags、examples、inputModes、outputModes)以及认证信息(authentication)。Agent Card 是外部智能体发现和了解本智能体的主要途径。
AgentExecutor 是一个抽象基类,开发者通过子类化它并实现 execute() 和 cancel() 方法来定义智能体的核心逻辑。execute() 方法接收两个参数:RequestContext(提供请求详情,如传入消息和当前任务状态)和 EventQueue(用于让执行器入队响应,包括 Message、Task 或流式事件)。在 execute() 方法中,开发者编写智能体处理任务的具体逻辑:从 RequestContext 中获取用户输入,进行推理或调用工具,然后通过 EventQueue 报告任务状态更新和最终结果。
A2A 协议支持有状态的任务管理,需要任务存储后端来持久化任务状态、消息历史和产出物。SDK 提供了 InMemoryTaskStore 作为默认的内存任务存储,适合开发和测试场景。对于生产环境,开发者应选择持久化的任务存储后端,如基于 PostgreSQL、MySQL 或 SQLite 的任务存储实现。在创建请求处理器(DefaultRequestHandler)时,传入已配置的任务存储实例,确保任务状态在智能体重启后仍然可用。
对于 Python 实现,可以使用 A2AStarletteApplication(基于 Starlette 和 Uvicorn)或 A2AFastAPIApplication(基于 FastAPI)来部署 A2A 服务器。开发者将定义好的 Agent Card 和 AgentExecutor 实例传入应用程序构造器,然后启动 HTTP 服务器。服务端启动后,其他智能体就可以通过获取 Agent Card 并调用 A2A 协议定义的方法(如 message/send、message/stream)来与本智能体进行交互。