Google Developers Blog

Build Cross-Language Multi-Agent Team with Google’s Agent Development Kit and A2A

8.5内容质量

TL;DR · AI 摘要

Google 推出 Agent Development Kit 和 A2A 协议,实现跨语言多智能体协作,提升生产环境 AI 系统的可扩展性和稳定性。

核心要点

  • 使用 A2A 协议可实现 Python 与 Go 智能体的跨语言协作,无需重写代码。
  • ADK 的 RemoteA2aAgent 抽象可将远程 A2A 服务转换为本地子智能体,仅需几行代码。
  • 多智能体流水线架构通过职责分离,替代单一语言的复杂提示,提升系统稳定性。

结构提纲

按章节快速跳转。

  1. 介绍跨语言多智能体协作的现实需求与挑战。

  2. ·A2A 协议与 ADK 的作用

    A2A 协议支持跨语言协作,ADK 提供远程智能体抽象与流水线编排。

  3. 职责分离的智能体架构提升系统稳定性与可测试性。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • 跨语言多智能体协作
    • A2A 协议
      • 支持 Python 与 Go 协作
      • 无需重写代码
    • ADK
      • RemoteA2aAgent 抽象
      • 流水线编排
    • 多智能体流水线
      • 职责分离
      • 提升稳定性与可测试性

金句 / Highlights

值得收藏与分享的关键句。

  • Context degradation: As tools multiply beyond 10-15, the model starts missing instructions, calling wrong tools, or hallucinating parameters.

    第 3 段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • ADK's RemoteA2aAgent abstraction that turns any remote A2A-compliant service into a local sub-agent with a few lines of code.

    第 2 段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • Multi-agent pipeline orchestration where specialized agents with narrow responsibilities replace monolithic prompts that try to do everything.

    第 2 段

    ⬇︎ 下载 PNG𝕏 分享到 X
#AI#多智能体#Google#A2A#ADK
打开原文

使用 Google 的 Agent 开发工具包和 A2A 构建跨语言多代理团队

2026 年 6 月 22 日

Shubham Saboo

高级 AI 产品经理

Eric Dong

开发者关系工程师

分享

  • Facebook
  • Twitter
  • LinkedIn
  • 邮件

如何使用 Agent2Agent 协议让 Python 代理和 Go 代理协作完成合同合规性检查

你的合同合规性检查流程遇到了一个问题。数据科学团队编写了一个出色的 Python 提取代理,它使用 Gemini 解析法律合同并提取每个关键术语。安全工程团队构建了一个使用所有确定性逻辑且不使用 LLM 的快速合规性验证器。这两个代理在独立运行时都表现完美。但现在你需要它们作为一个协调的流程一起工作,而两个团队都不愿意将他们的服务重写为另一种语言。

这是生产 AI 系统的现实:不同的团队、不同的语言、不同的部署目标。问题不是你是否会遇到这种情况,而是你如何解决它。

在本文中,我们将构建一个合同合规性多代理流程,其中 Python 代理使用 Gemini 提取合同条款,Go 代理根据公司政策验证这些条款。这两个服务通过 Agent2Agent(A2A)协议连接,并由 Google 的 Agent 开发工具包(ADK)进行编排。

在这个过程中,你将学习三种架构模式,这些模式将生产多代理系统与单语言演示区分开来:

  • 使用 A2A 协议进行跨语言代理协作,这样团队可以在最适合任务的语言中构建代理,而无需重写代码。
  • ADK 的 RemoteA2aAgent 抽象,只需几行代码即可将任何远程 A2A 兼容服务转换为本地子代理。
  • 多代理流程编排,其中具有狭窄职责的专用代理取代了试图做所有事情的单块提示。

完整的源代码可在 GitHub 上找到。

一个代理并不足够

大多数 AI 项目都以相同的方式开始:一个大的代理、一个巨大的提示、所有工具都挤在一个上下文窗口中。这在演示中有效。但在生产中,由于三个关键原因,它会崩溃:

  • 上下文退化:当工具数量超过 10-15 个时,模型开始忽略指令、调用错误的工具或幻觉参数。每个额外的工具都会使模型的注意力分散在更广泛的表面上。一个同时处理翻译、摘要和电子邮件草稿的合同提取代理最终会搞不清楚该调用哪个工具。
  • 爆炸半径:一个次要功能中未处理的异常会导致整个代理回合崩溃。翻译 API 的速率限制不应该导致整个工作流程崩溃。但在单块代理中,每个失败都是完全的失败。
  • 无法测试:你无法对一个有 50 个纠缠责任的系统进行干净的单元测试。当每个提示更改都可能影响每个下游行为时,评估回归变得猜测。

解决方案与十年前后端工程的变革模式相同:将单块分解为专用的微服务。每个代理只做一项工作,有一个集中的提示和一个最小的工具集。

Agent-to-Agent(A2A)协议是一种开放标准,它使得用任何语言或框架构建的智能体之间可以相互操作。可以把它看作是智能体世界中的HTTP:一种共享的契约,使得任何两个智能体无论内部是如何构建的,都可以进行通信。

A2A解决了三个基本问题:

  • 发现:智能体通过Agent Cards(在/.well-known/agent.json上提供的JSON元数据)来宣传其能力。类似于REST API的OpenAPI规范,卡片声明了智能体的名称、URL、版本、技能和支持的输入/输出格式。调用智能体首先获取卡片以了解远程智能体能做什么。
  • 通信:所有数据交换都通过JSON-RPC 2.0进行,通过一个端点路由。智能体通信的核心方法是message/send(我们的实现使用它来提交合同数据并同步接收结果),还有其他协议方法如tasks/send和tasks/get用于任务提交和检索。数据在类型化的Message Parts中传输:TextParts用于自然语言,DataParts用于结构化的JSON。
  • 任务生命周期:每个交互都被封装在一个任务中,该任务通过明确定义的状态进行转换:已提交、正在处理、已完成或失败。这种状态机意味着智能体可以使用相同的协议来处理同步工作流(立即检查此合同)和异步工作流(在48小时内验证此文件)。

这种方法的美妙之处在于,任何一个智能体都不需要了解另一个智能体的实现。Python智能体不会导入Go包。Go智能体不会运行Python代码。它们只是通过HTTP使用共享协议进行通信。

Agent Card 实际的样子

这是Go合规服务在‘/.well-known/agent.json’上暴露的Agent Card:

code
// go-compliance-agent/internal/agentcard/card.go
func GetCard() AgentCard {
	agentURL := os.Getenv("AGENT_URL")
	if agentURL == "" {
		agentURL = "http://localhost:8888"
	}

	return AgentCard{
		Name:        "Security Compliance Validator",
		Description: "Go-based validation engine that checks vendor contracts against corporate compliance policy rules.",
		Version:     "1.0.0",
		SupportedInterfaces: []AgentInterface{
			{
				URL:             agentURL,
				ProtocolBinding: "JSONRPC",
				ProtocolVersion: "1.0",
			},
		},
		Capabilities: Capabilities{
			ExtendedAgentCard: false,
		},
		DefaultInputModes:  []string{"application/json"},
		DefaultOutputModes: []string{"application/json"},
		Skills: []Skill{
			{
				ID:          "contract_compliance_check",
				Name:        "Contract Compliance Check",
				Description: "Validates extracted contract fields against corporate policy rules.",
				Tags:        []string{"compliance", "contract", "validation"},
				Examples: []string{
					"Check this contract for compliance violations",
					"Validate vendor agreement terms against policy",
				},
			},
		},
	}
}

Go

复制

URL是从环境变量中读取的,因此相同的代码在本地(‘localhost:8888’)和容器中(‘go-compliance-agent:8888’)都能工作。Skills数组意味着一个智能体可以宣传多个能力。

代码实现概述

这里展示了如何使用Python中的ADK和Go中的标准HTTP服务器轻松地组装这个跨语言团队。

共享状态:智能体之间的数据总线

在深入探讨各个代理之前,理解它们如何通信非常重要。ADK 的 ToolContext.state 提供了一个共享字典,所有流水线中的子代理都可以读写该字典。与通过函数参数或返回值在代理之间传递数据不同,代理通过共享的会话状态进行通信。

我们合规流水线中的每一步都对应一个特定的检查点:

code
class ComplianceStep(str, Enum):
    INGESTED = "INGESTED"                     # 合同上传,等待提取
    EXTRACTED = "EXTRACTED"                    # 字段由 Gemini 解析
    COMPLIANCE_PENDING = "COMPLIANCE_PENDING"  # 发送到 Go 代理,等待结果
    COMPLIANCE_COMPLETE = "COMPLIANCE_COMPLETE"# Go 代理返回了判断结果
    MANUAL_REVIEW = "MANUAL_REVIEW"           # 超时或错误,转由人工处理
    REVIEW_READY = "REVIEW_READY"             # 报告生成,发现违规行为
    APPROVED = "APPROVED"                      # 所有检查通过

Python

MANUAL_REVIEW 状态值得特别强调。如果由于服务器崩溃、网络超时、容器未启动等原因,Go 合规代理无法访问,流水线不会直接失败。它会转为 MANUAL_REVIEW 状态,将案例路由到人工法律审查员。这种故障安全模式对于下游服务可能间歇性不可用的生产系统至关重要。

1. 完整的多代理流水线:使用 Python 包装 Go 代理

使用 ADK,你可以通过 RemoteA2aAgent 在本地定义一个远程的 A2A 合规代理。SDK 自动处理代理卡握手、参数序列化以及 JSON-RPC 网络请求。

code
# python-extraction-agent/app/agent.py
from google.adk.agents import Agent, SequentialAgent
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent
from google.adk.models import Gemini

# 子代理 1:使用 LLM 推理来提取合同细节
extractor_agent = Agent(
   name="extractor_agent",
   model=Gemini(model="gemini-3.5-flash"),
   instruction="你是一个法律数据提取代理。提取合同字段:价值、承包商、日期、保险等...",
   tools=[read_contract_text, save_extracted_fields, classify_risk_level]
)

# 子代理 2:将 Go A2A 合规服务包装为本地代理
compliance_agent = RemoteA2aAgent(
   name="compliance_agent",
   agent_card=GO_AGENT_CARD_URL,
   description="将提取的合同字段与公司政策进行验证。"
)

# 子代理 3:生成最终的审计摘要报告
report_agent = Agent(
   name="report_agent",
   model=Gemini(model="gemini-3.5-flash"),
   instruction="生成最终的合规报告和 Markdown 摘要。",
   tools=[generate_summary_report]
)

# 协调器:按顺序将它们连接在一起
root_agent = SequentialAgent(
   name="contract_compliance_coordinator",
    description="按顺序协调合同解析、A2A 合规验证和最终报告生成。",
   sub_agents=[extractor_agent, compliance_agent, report_agent],
)

2. Go 合规端点

在 Go 一侧,合规代理是一个标准的 HTTP 服务器,实现了 A2A 协议。它暴露了一个代理卡用于发现,以及一个单一的 JSON-RPC 端点,接受消息/发送请求,对提取的合同字段执行确定性策略检查,并返回通过/失败的判断结果。不需要任何 AI 框架或 SDK —— 只需使用 Go 标准库即可。

以下是简化后的流程(完整实现请参见代码库):

code
// 简化伪代码 —— 请参见 GitHub 仓库获取完整实现

func HandleJSONRPC(w http.ResponseWriter, r *http.Request) {
    var req JSONRPCRequest
    json.NewDecoder(r.Body).Decode(&req)

    // 从 A2A 消息中提取合同信息
    var details compliance.ContractDetails
    extractContractFromMessage(req.Params, &details)

    // 运行确定性策略检查
    result := compliance.CheckCompliance(details, policy)

    // 以 JSON-RPC 响应的形式返回结果
    writeJSONRPCResult(w, req.ID, result)
}

开源应用:合同合规引擎

完整的流程以开源应用的形式提供,您可以部署并扩展它。代码库中包含一个由 FastAPI 服务提供的功能齐全的操作仪表板。

  • 三面板操作仪表板:左侧面板允许操作员选择或上传合同。中间面板显示实时结果:通过合同的合规证书和失败合同的违规报告。右侧面板是一个开发人员控制台,包含策略控制、网络模拟以及两个代理之间数据流动的实时视图。
  • 网络故障模拟:一个切换选项可以将 Go 代理切换为正常、延迟或崩溃状态。将其设置为崩溃状态时,可以直观地看到容错机制:Python 代理检测到中断,停止流程,并将合同路由到人工审核,而不是静默失败。
  • 实时代理交接检查器:右侧面板显示从 Python 发送到 Go 的确切请求以及返回的响应,这样您就可以实时查看结构化合同数据在语言边界上的传输情况。

ADK 和 A2A 方法的优势

  • 技术自由度:您的数据科学团队可以使用 Python 编写复杂的认知代理,而您的系统团队可以使用 Go、Rust 或 C++ 编写高性能、安全的合规验证器。
  • 简化集成:Python 协调器与 Go 代理通信,就像它是一个本地类一样。您无需编写自定义 HTTP 客户端或处理手动 JSON-RPC 负载包装。
  • 弹性:由于代理是解耦的,您可以配置细粒度的超时和重试逻辑。如果 Go 验证器宕机,Python 代理将保存当前状态检查点并等待人工批准。
  • 隔离审计:Go 合规验证器是完全确定性的。为了审计目的,您可以传递相同的输入并验证它们是否生成相同的策略判断,从而绕过 LLM 的非确定性。

结论

多代理协调不仅仅是连接提示;它是构建强大、跨语言分布式系统的一种方式。

通过使用 Google ADK 和开放的 A2A 协议连接 Python 的 AI 生态系统和 Go 的运行时可靠性,您可以获得两全其美的优势:在存在歧义时进行认知推理,在存在策略时进行确定性执行。

准备好自己运行了吗?

  • 克隆 contract-compliance-engine 并在本地运行实时演示
  • 查看 ADK 文档了解会话管理、多代理模式和评估框架
  • 查看 Agent2Agent 协议文档获取更多详细信息。

发布在:

  • AI
  • 公告
  • 最佳实践
  • 学习
  • 探索
  • Python
  • ADK
  • 影响
  • 开源
  • AI 代理
  • Go
  • TypeScript
  • Java
  • 多代理

上一篇

下一篇

相关文章

列表

AI

公告

学习

发布 Agentic 资源发现规范

2026 年 6 月 17 日

案例研究

A2A 如何构建一个协作代理的世界

2026 年 6 月 18 日

网络

用 Jules 衡量真正重要的东西

导航点