tRPC智能体生态又升级:发布A2A协议的实现trpc-a2a-go

tRPC 团队发布了 A2A 协议的 Go 语言实现 trpc-a2a-go,为开发者提供构建可互操作智能体的 SDK。trpc-a2a-go 遵循 Google 发起的 Agent2Agent (A2A) 协议标准,解决了不同智能体系统之间的互操作性难题,使各种智能体能够无缝协作完成复杂任务。

代码已开源至 GitHub:https://github.com/trpc-group/trpc-a2a-go


背景

大模型(Large Language Model, LLM)的兴起,让人们可以从一个对话框中获取他们想要知道的知识与信息,它就像海绵宝宝的"神奇海螺🐚",引起众人的惊叹与好奇。

尽管在一层层的多头注意力(Multi-Head Attention)与多层感知机(Multi-Layer Perceptron, MLP)的堆叠下,LLM 通过海量参数内置了大量的知识与信息,甚至发展出推理能力,但是它依然会产生幻觉与事实错误,无法提供给人们当下最新的信息,它好像一颗静态的大脑,缺少了手和脚。

而当 LLM 与智能体(Agent)结合之后,他可以通过工具的调用,以获取它本身并不拥有的数据与能力:

  • 当你询问明天的天气时,它可以调用天气 API 获取最新的天气信息

  • 当你想要提交代码时,它可以调用代码编辑器工具,将代码提交到仓库中

然而,为了让智能体能够获取这些数据和能力,这些数据和能力的提供者需要专门开发相应的接口,将这些接口暴露给智能体,而数据与能力的所有者与开发者并非是中心化的,而是散落在世界上的各个组织和个人中,它们可能提供迥然不同的接口,导致智能体本身需要对接各种不同的接口。

因此,2024 年 11 月 25 日,Anthropic 推出了 Introducing the Model Context Protocol \ Anthropic,旨在为这些数据和能力提供者提供一个标准化的接口,凡是实现这种接口的服务,Agent 都可以用一套标准化接口的客户端来进行调用,大大减少了开发成本。    

MCP 协议规范了 Agent 与工具之间的交互,然而,智能体与智能体之间的交互同样需要规范化,比如不同厂商有不同的 Agent 实现,他们可能使用了不同的框架(如 LangGraph、CrewAI、Google ADK、Genkit 等),这些 Agent 之间需要能够发现彼此的能力,并进行协作。

因此,2025 年 4 月 9 日,Google 推出了 Agent2Agent (A2A) 协议,旨在为 Agent 的实现提供标准化的接口,凡是实现这种接口的 Agent,都可以通过一个 Root Agent 来发现彼此的能力,并进行协作。

现在,tRPC 团队第一时间支持了 A2A 协议的 Go 语言实现 trpc-a2a-go,并将其开源在 github 上:https://github.com/trpc-group/trpc-a2a-go

A2A 协议概述与 MCP 协议对比

A2A 协议简介

Agent2Agent (A2A) 协议是由 Google 发起并与 50 多家技术合作伙伴共同开发的开放式协议,旨在解决不同智能体系统间互操作性的关键问题。在企业场景中,各种自主智能体正被用于自动化并增强工作流程,从处理设备订购到辅助客户服务再到供应链规划。然而,这些智能体往往被限制在各自独立的系统中运行,无法高效协作。

A2A 协议的核心目标是让不同厂商或框架(如 LangGraph、CrewAI、Google ADK、Genkit 等)构建的智能体能够互相发现能力、协商交互方式并安全地在任务上协作,从而释放多智能体生态系统的潜力。该协议建立在现有标准之上,包括 HTTP、SSE(Server-Sent Events)和 JSON-RPC,使其易于与企业现有的技术基础设施集成。

A2A 协议定义了以下核心概念:

1.AgentCard(智能体卡片):智能体的身份与能力声明,包含名称、描述、URL、版本、提供者信息、能力声明、认证方式、交互模式和技能列表等。智能体通过发布 AgentCard 使其他智能体能够发现并了解其能力。

2.Task(任务):代表智能体处理的工作单元,具有唯一标识符、生命周期状态、会话关联、产物、历史记录和元数据等属性。

3.Message(消息):用户与智能体或智能体间通信的载体,包含角色("user"或"agent")、 消息元素(Parts)和元数据。    

4.Part(消息元素):消息的基本组成单元,支持文本、文件、结构化数据等多种数据类型。

5.Artifact(产物):任务执行的结果输出,包含名称、内容和流控制信息。

这些概念共同构成了 A2A 协议的基础,支持智能体间的发现、协商和协作。


A2A 与 MCP 的区别与互补    

A2A 协议与 Anthropic 的 Model Context Protocol (MCP) 看似有相似之处,但它们解决的是不同层面的问题:

MCP 协议:着重于为单个模型或智能体提供结构化的上下文和工具。MCP 定义了模型如何接收输入数据、获取外部工具访问权限并生成输出的标准方式。它主要关注单个模型与其执行环境之间的交互。

A2A 协议:专注于多个智能体之间的通信和任务协调。它解决的是让已经具备各自能力的智能体能够相互发现、交换信息并协调完成复杂任务的问题。

这两个协议可以说是互补的:

MCP 为单个智能体提供强大的环境感知和工具使用能力,而 A2A 则使这些智能体能够组成协作网络,共同完成复杂任务。两者结合使用时,可以构建出既具备强大个体能力又能高效协作的智能体生态系统。

tRPC a2a-go 的实现与使用    

tRPC a2a-go 概述    

trpc-a2a-go (https://github.com/trpc-group/trpc-a2a-go )是 tRPC 推出的 A2A 协议的 Go 语言实现,为开发者提供了构建支持 A2A 协议的客户端和服务端的完整框架。它采用模块化设计,围绕核心协议规范提供了丰富的功能,同时保持了 Go 语言高性能、强类型的特点。

该实现遵循 A2A 协议的设计原则:

  • 专注于智能体协作

  • 构建在现有标准之上(HTTP、JSON-RPC、SSE)

  • 安全优先

  • 支持长时间运行的任务

  • 模态无关(支持文本、文件、结构化数据等多种交互方式)

核心架构    

trpc-a2a-go 的核心架构包含以下主要组件:

主要模块功能:

1.protocol/: 定义 A2A 协议的核心数据结构,如 Artifact、Task、Message、Part 等,遵循协议规范中的 JSON Schema。    

2.client/: 提供与 A2A 服务端交互的客户端实现,包括:智能体发现、任务发送和接收、流式更新订阅、推送通知配置

3.server/: 实现接收和处理 A2A 请求的服务端功能,包括:HTTP 端点处理、请求验证、流式响应、请求路由到对应任务管理器

4.taskmanager/: 负责任务生命周期管理,处理任务状态转换、资源跟踪和运行中任务的协调。

5.auth/: 提供身份验证和授权机制,支持多种认证方案。

6.jsonrpc/: 处理 JSON-RPC 2.0 协议相关的请求解析和响应格式化。

核心数据结构    

trpc-a2a-go 实现了 A2A 协议规范中定义的核心数据结构:

// AgentCard 表示智能体的元数据和能力type AgentCard struct {    Name              string            `json:"name"`    Description       *string           `json:"description,omitempty"`    URL               string            `json:"url"`    Provider          *AgentProvider    `json:"provider,omitempty"`    Version           string            `json:"version"`    DocumentationURL  *string           `json:"documentationUrl,omitempty"`    Capabilities      AgentCapabilities `json:"capabilities"`    Authentication    *Authentication   `json:"authentication,omitempty"`    DefaultInputModes []string          `json:"defaultInputModes"`    DefaultOutputModes[]string          `json:"defaultOutputModes"`    Skills            []AgentSkill      `json:"skills"`}// Task 表示智能体处理的工作单元type Task struct {    ID        string       `json:"id"`    SessionID *string      `json:"sessionId,omitempty"`    Status    TaskStatus   `json:"status"`    Artifacts []Artifact   `json:"artifacts,omitempty"`    History   []Message    `json:"history,omitempty"`    Metadata  interface{}  `json:"metadata,omitempty"`}// Message 表示用户和智能体之间的通信type Message struct {    Role     string        `json:"role"` // "user" 或 "agent"    Parts    []Part        `json:"parts"`    Metadata interface{}   `json:"metadata,omitempty"`}

这些数据结构与 A2A 协议的 JSON Schema 完全对应,确保了协议兼容性。

实用功能示例    

下面是几个实际场景中常用的代码示例,可以帮助你快速上手 trpc-a2a-go。代码已经精简为核心部分,便于理解主要概念。    

客户端使用    

和大多数 SDK 类似,使用 trpc-a2a-go 的第一步是创建一个客户端。客户端负责与智能体服务通信,发送请求和接收响应:

package mainimport (    "context"    "log"    "trpc.group/trpc-go/trpc-a2a-go/client"    "trpc.group/trpc-go/trpc-a2a-go/protocol")func main() {    // 创建客户端    a2aClient, err := client.NewClient("https://example-agent.com/a2a")    if err != nil {        log.Fatalf("创建客户端失败: %v", err)    }    // 创建并发送任务    task, err := a2aClient.SendTask(context.Background(), &protocol.TaskSendParams{        ID: "task-123",        Message: protocol.Message{            Role: "user",            Parts: []protocol.Part{{Type: "text", Text: "你能帮我分析这份数据吗?"}},        },    })        log.Printf("任务状态: %s", task.Status.State)}

如你所见,使用相当直观。首先创建一个客户端并指定智能体的 URL,然后构造任务请求并发送。实际应用中,客户端还提供更多功能,比如获取智能体能力清单、查询任务状态和管理长时间运行的任务等。完整 API 可以参考 GitHub 上的文档和示例(https://github.com/trpc-group/trpc-a2a-go)。

服务端使用    

如果你需要实现一个智能体服务,则需要编写服务端代码。核心是实现一个任务处理器来响应用户请求:

package mainimport (    "context"    "fmt"    "log"    "trpc.group/trpc-go/trpc-a2a-go/server"    "trpc.group/trpc-go/trpc-a2a-go/taskmanager")// TextProcessor 实现一个简单的文本处理器type TextProcessor struct{}// 处理任务并返回文本反转结果func (p *TextProcessor) Process(ctx context.Context, taskID string,     message taskmanager.Message, handle taskmanager.TaskHandle) error {        // 提取文本并处理(示例中是反转文本)    text := extractText(message.Parts)    reversed := reverseText(text)        // 构建响应并更新任务状态    responsePart := taskmanager.NewTextPart(reversed)    handle.UpdateStatus(taskmanager.TaskStateCompleted, &taskmanager.Message{        Role: taskmanager.MessageRoleAgent,        Parts: []taskmanager.Part{responsePart},    })        return nil}func main() {    // 创建智能体卡片定义    agentCard := server.AgentCard{        Name: "文本反转智能体",        Version: "1.0.0",        URL: "http://localhost:8080/",        // 其他必要配置...    }        // 创建任务处理器和管理器    processor := &TextProcessor{}    taskManager, _ := taskmanager.NewMemoryTaskManager(processor)        // 创建并启动服务器    srv, _ := server.NewA2AServer(agentCard, taskManager)    log.Fatal(srv.Start("localhost:8080"))}

服务端代码主要包含几个关键部分:定义处理器、创建智能体卡片(即服务的身份和能力声明)、初始化任务管理器和启动服务。真正的业务逻辑在 Process 方法中实现,示例中只是简单反转文本,实际应用中可能会调用大语言模型、查询数据库或与其他服务交互。

在实际开发中,建议将任务处理逻辑与服务配置代码分离,这样便于单元测试和后期维护。

流式处理示例    

如果你使用过现代 AI 对话应用,就会注意到渐进式输出(类似打字机效果)提供了更好的用户体验。trpc-a2a-go 也支持这种流式响应:

package mainimport (    "context"    "fmt"    "time"    "github.com/google/uuid"    "trpc.group/trpc-go/trpc-a2a-go/client"    "trpc.group/trpc-go/trpc-a2a-go/taskmanager")func main() {    // 创建A2A客户端    c, _ := client.NewA2AClient("http://localhost:8080")        // 定义流式任务参数    taskParams := taskmanager.SendTaskParams{        ID: fmt.Sprintf("task-%s", uuid.New().String()),        Message: taskmanager.Message{            Role: taskmanager.MessageRoleUser,            Parts: []taskmanager.Part{taskmanager.NewTextPart("分析这段文本")},        },        AcceptedOutputModes: []string{"stream"},    }        // 启动流式任务    ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)    defer cancel()        streamChan, _ := c.StreamTask(ctx, taskParams)        // 处理流式更新    for event := range streamChan {        switch e := event.(type) {        case taskmanager.TaskStatusUpdateEvent:            fmt.Printf("状态更新: %s\n", e.Status.State)        case taskmanager.TaskArtifactUpdateEvent:            fmt.Printf("产物更新: %v\n", e.Artifact.LastChunk)        }    }}

流式处理是 trpc-a2a-go 的一个重要特性。对于耗时较长的任务,如复杂分析或大型文档生成,用户通常不希望等待全部完成才看到结果。通过流式处理,可以将中间结果实时展示给用户,大幅提升交互体验。    

该 API 设计采用事件监听模式,主要处理两类事件:状态更新事件和内容更新事件。状态更新事件告知任务的当前进度(如进行中、已完成或失败),内容更新事件则包含实际的返回数据。

trpc-a2a-go 还实现了认证鉴权以及基于 redis 的任务管理器,并提供了多智能体使用示例,最新内容请参考 https://github.com/trpc-group/trpc-a2a-go


后续规划

协议演进    

trpc-a2a-go 的发展路线将与 A2A 协议标准保持同步。我们计划在智能体发现机制方面实现更完善的分布式目录系统,并在 AgentCard 中增强授权模型。对于智能体协作模式,将着重开发动态技能查询能力,使智能体能够更灵活地适应复杂任务需求。

用户体验方面的增强也在计划之中,特别是支持任务过程中的动态协商能力,例如让智能体能够在对话过程中根据需要无缝切换文本、音频或视频等交互方式。与此同时,我们也在完善安全机制,增加对企业级认证标准的支持,并提供更精细的权限控制能力。


与 trpc 生态融合    

作为 tRPC 团队的产品,trpc-a2a-go 将与 trpc-go 框架深度整合。这包括提供 trpc-go 插件支持,实现基于 trpc 协议的通信层,以及通过 trpc-go 标准配置管理 A2A 服务。

在服务治理方面,我们将接入 trpc 的注册发现机制,使智能体能够自动注册并被发现。同时,对接 trpc 的可观测性生态,为智能体服务提供全面的监控和诊断能力。这些整合将使开发者能够利用 trpc 生态的熔断、限流和负载均衡等成熟治理能力,构建更可靠的智能体系统。

工具链方面,我们将开发命令行工具插件,简化 A2A 服务的创建和管理,并提供与 trpc-admin 的管理面板集成,使开发者能够直观地管理和监控智能体。这些工具将大幅降低开发和运维的复杂度。

性能与开发体验优化    

针对高并发场景,我们正在设计更高效的任务处理管道和缓存机制,优化流式数据处理,并增强任务管理器的分布式能力。这些优化将提升系统在大规模部署环境下的性能和稳定性。

开发体验方面,我们将提供更丰富的命令行工具和可视化仪表板,帮助开发者快速测试和调试智能体。同时,我们也在扩展示例库和完善文档,覆盖更多实际应用场景,降低学习曲线。

社区与生态建设    

作为一个开源项目,trpc-a2a-go 的长期发展离不开社区的参与。我们将建立清晰的贡献指南和路线图,设计灵活的插件机制,定期组织社区交流活动,并与其他智能体框架建立合作关系。

我们相信,通过与社区的紧密协作,trpc-a2a-go 将能够不断创新和进化,更好地满足不同场景下的智能体协作需求。如果你对智能体技术感兴趣,欢迎加入我们,共同推动 trpc-a2a-go 的发展。

结语

A2A 协议代表了智能体互操作性的重要进步。通过提供标准化的通信方式,A2A 使不同智能体能够像人类团队一样协作,从而实现更复杂、更强大的自动化系统。trpc-a2a-go 作为 tRPC 推出的 A2A 协议的 Go 语言实现,为开发者提供了构建互操作智能体的强大工具包。

随着智能体技术的不断成熟,A2A 协议和 trpc-a2a-go 将继续发展,以支持更复杂的协作模式和更广泛的应用场景。通过促进开放标准和互操作性,A2A 协议有望成为推动智能体生态系统发展的关键技术。

欢迎开发者体验 tRPC a2a-go,项目开源地址

https://github.com/trpc-group/trpc-a2a-go

如有问题或建议,欢迎在 GitHub 上提交 issue

( https://github.com/trpc-group/trpc-a2a-go/issues ) 

或 PR

( https://github.com/trpc-group/trpc-a2a-go/pulls )

加入 tRPC 智能体生态建设!

参考文献   

Agent2Agent Protocol (A2A)

https://google.github.io/A2A/#/documentation

google/A2A

https://github.com/google/A2A

Announcing the Agent2Agent Protocol (A2A)

https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值