a2aproject/a2a-go
Golang SDK for A2A Protocol
什么是 A2A Go SDK?
A2A Go SDK 是一个 Go 库,可让您构建和使用遵循 Agent-to-Agent (A2A) 协议 v1.0 的 智能体服务。实际上,一个 智能体 是一段能够接收请求(例如用户消息)、运行某些逻辑(通常为 LLM 或其他 AI 模型)并返回响应的软件。SDK 提供了底层实现,让您专注于智能体的核心逻辑,而无需操心网络通信、消息格式化和协议合规性。
核心组件
| 组件 | 功能 | 典型用途 |
|---|---|---|
a2asrv (服务器 SDK) |
构建一个 与传输无关的请求处理器,并封装为 gRPC、REST 或 JSON-RPC 服务。 | 将 AI 驱动的智能体作为服务部署,供其他智能体调用。 |
a2aclient (客户端 SDK) |
解析 AgentCard(描述如何访问智能体的元数据),并创建可发送消息的客户端。 | 从您的 Go 程序或 CLI 工具中调用另一个智能体。 |
传输绑定(a2agrpc、a2asrv.NewRESTHandler 等) |
将通用处理器转换为具体的网络服务器/客户端。 | 根据环境选择合适的协议(高性能 gRPC、简单 HTTP 等)。 |
| 扩展点 | 可插入自定义传输、认证中间件、消息存储等。 | 与现有认证系统、数据库或自定义网络层集成。 |
快速入门(逐步操作)
安装 SDK
go get github.com/a2aproject/a2a-go/v2需要 Go 1.25+。
编写服务器
// 创建您自己的执行器,知道如何运行智能体逻辑。 agentExec := newMyAgentExecutor() handler := a2asrv.NewHandler(agentExec) // 选择一种传输方式 – 这里使用 gRPC。 grpcHandler := a2agrpc.NewHandler(handler) srv := grpc.NewServer() grpcHandler.RegisterWith(srv) srv.Serve(lis) // lis 是一个 net.Listener将
newMyAgentExecutor替换为调用 LLM、运行脚本等的代码。编写客户端
card, _ := agentcard.DefaultResolver.Resolve(ctx) // 发现远程智能体 client, _ := a2aclient.NewFromCard(ctx, card) msg := a2a.NewMessage(a2a.MessageRoleUser, a2a.NewTextPart("Hello!")) resp, _ := client.SendMessage(ctx, &a2a.SendMessageRequest{Message: msg}) fmt.Println(resp)运行示例 仓库自带一个最小示例
examples/helloworld,演示了两端的用法。
为什么使用 A2A?
- 标准化通信 – 遵循 A2A 规范,不同智能体(即使来自其他语言)也能互操作,无需自定义适配器。
- 传输灵活性 – 相同的业务逻辑可通过 gRPC、普通 HTTP 或 JSON-RPC 轻松暴露,仅需少量胶水代码。
- 可插拔架构 – 无需重写核心逻辑,即可替换自定义认证、持久化或传输层。
- CLI 伴侣工具 – 独立的
a2a-cli工具可让您无需编写 Go 代码即可测试智能体、发现智能体或将本地脚本暴露为 A2A 端点。
生态与资源
- 文档 – 完整 API 参考在 https://pkg.go.dev/github.com/a2aproject/a2a-go/v2。
- CLI 工具 –
a2a-cli(仓库:a2aproject/a2a-cli)用于快速实验。 - 示例项目 – 更复杂的用例集合位于
a2aproject/a2a-samples。 - 规范 – 协议定义发布在 https://a2a-protocol.org。
- 贡献 – 指南在
CONTRIBUTING.md中;大变更前请先开 Issue。
总结
A2A Go SDK 是一个生产就绪的库,用于构建遵循通用、版本化协议的 AI 导向智能体服务。它抽象了网络通信(gRPC/REST/JSON-RPC),提供现成的客户端和服务器辅助工具,并支持自定义认证或存储需求的扩展。如果您正在编写需要以标准合规方式 暴露 或 消费 LLM 驱动智能体的 Go 代码,这个 SDK 将为您省去样板代码,让您专注于模型逻辑本身。
相关
- 项目
- 项目
- 项目
- 项目
- 项目