前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >tRPC智能体生态又升级:发布A2A协议的实现trpc-a2a-go

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

作者头像
腾讯开源
发布于 2025-04-19 16:00:23
发布于 2025-04-19 16:00:23
29200
代码可运行
举报
运行总次数:0
代码可运行

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 协议规范中定义的核心数据结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 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 的第一步是创建一个客户端。客户端负责与智能体服务通信,发送请求和接收响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main
import (
    "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)。

服务端使用

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main
import (
    "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 也支持这种流式响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main
import (
    "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/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯开源 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • tRPC 团队发布了 A2A 协议的 Go 语言实现 trpc-a2a-go,为开发者提供构建可互操作智能体的 SDK。trpc-a2a-go 遵循 Google 发起的 Agent2Agent (A2A) 协议标准,解决了不同智能体系统之间的互操作性难题,使各种智能体能够无缝协作完成复杂任务。
  • 背景
  • A2A 协议概述与 MCP 协议对比
    • A2A 协议简介
    • A2A 与 MCP 的区别与互补
  • tRPC a2a-go 的实现与使用
    • tRPC a2a-go 概述
    • 核心架构
    • 核心数据结构
    • 实用功能示例
      • 客户端使用
      • 服务端使用
      • 流式处理示例
  • 后续规划
    • 协议演进
    • 与 trpc 生态融合
    • 性能与开发体验优化
    • 社区与生态建设
  • 结语
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档