BotOf TechAI / IoT / Full-Stack / 植物养护知识分享
返回首页Google ADK 覆盖五种语言:多语言 Agent 平台真正需要统一的是协议契约

Google ADK 覆盖五种语言:多语言 Agent 平台真正需要统一的是协议契约

·3 分钟阅读·

2026 年 10 月 13 日,Google Cloud 宣布 Agent Development Kit 已覆盖 Python、Go、TypeScript、Java 和 Kotlin。五种实现都原生适配各自的类型系统与运行时,同时用 MCP 连接工具、用 A2A 连接远程 Agent,并可生成面向 Cloud Run、Gemini Enterprise Agent Runtime 或 GKE 的部署配置。

这项更新对企业平台的意义不是“Java 团队终于不用写 Python”,而是 Agent 正在从单语言 SDK 变成分布式应用模型。一个高并发路由器可能由 Go 实现,浏览器内 Agent 使用 TypeScript,数据分析子代理使用 Python,核心业务服务仍是 Java/Kotlin。平台若只统一类名,跨语言后依然会在错误语义、状态传播和版本兼容上分裂。

流程图:五种语言运行时通过统一的工具契约、A2A Agent Card 和部署规范协作。

语言负责本地开发体验,协议负责跨进程协作;二者不能互相替代。

从函数签名生成工具 schema

Python ADK 可以检查函数签名、类型提示和 docstring,自动生成工具声明。官方天气示例可以压缩为:

from google.adk.agents.llm_agent import Agent

def get_weather(city: str) -> dict:
    """查询城市天气。city 必须是规范城市名。"""
    return {"status": "success", "report": f"Sunny in {city}"}

root_agent = Agent(
    name="weather_agent",
    model="gemini-3.8-flash",
    instruction="只回答天气问题,缺少城市时先追问。",
    tools=[get_weather],
)

Go 则更适合用 struct 和泛型在编译期约束输入输出;TypeScript 倾向 schema-first;Java/Kotlin 可把工具绑定到企业现有依赖注入和可观测体系。这里必须统一的不是装饰器,而是最终暴露出的 JSON Schema、错误码、幂等语义和副作用等级。

建议把工具契约放在独立仓库,用契约测试验证每种语言实现:

name: inventory.reserve
version: 2.1.0
input: ReserveRequest
output: ReserveResult
side_effect: reversible_write
idempotency_key: required
errors: [OUT_OF_STOCK, POLICY_DENIED, RETRYABLE_TIMEOUT]

Agent 不应该从自然语言错误中猜测是否重试。RETRYABLE_TIMEOUT 可以指数退避,POLICY_DENIED 必须停止,OUT_OF_STOCK 应回到规划层寻找替代方案。

A2A 不是远程函数调用的别名

MCP 通常连接工具,A2A 连接拥有状态、能力与生命周期的远程 Agent。A2A Agent Card 至少要声明能力、输入输出模态、认证方式、端点和协议版本。调用方不应假设远端同步返回;长任务需要 task ID、状态查询、流式事件和取消语义。

type AgentTask = {
  taskId: string;
  status: "queued" | "running" | "waiting" | "completed" | "failed";
  artifactRefs: string[];
  traceparent: string;
};

跨语言多 Agent 最常见的问题是状态枚举不一致:一个 SDK 把超时当失败,另一个把它当仍在运行。平台应发布协议兼容矩阵,并用真实语言对互测,而不是只让五个 SDK 各自通过单元测试。

状态与上下文需要明确所有权

调用链不能不断复制完整会话。父 Agent 只下发目标、约束、证据引用与预算;子 Agent 返回结构化结果和产物引用。用户身份、策略标签与 traceparent 由运行时传播,不由模型自行转述。

{
  "goal": "检查订单风险",
  "constraints": ["只读", "不得导出个人信息"],
  "budget": {"tokens": 12000, "toolCalls": 8},
  "contextRefs": ["s3://case/42/evidence.json"],
  "principal": "user:8f2..."
}

会话记忆也应有唯一写入者。若多个语言实现都能直接修改共享 memory,冲突与污染不可避免。更稳妥的做法是事件追加、乐观版本检查,再由专门组件生成可读摘要。

用脚手架统一交付,而不是统一业务代码

官方 agents-cli scaffold create 会生成 A2A 端点和部署配置。企业可以在此之上加入组织模板:SBOM、镜像签名、健康检查、OpenTelemetry、策略 sidecar、契约测试和回滚清单。业务团队保留语言自由,平台只约束不可缺少的生产能力。

验收多语言 ADK 时,应让 Python Agent 调 Go Agent、Go 调 Java,再让 TypeScript 工具通过 MCP 被调用;注入取消、超时、schema 升级和身份撤销,检查五种实现是否得到相同结果。多语言平台的成熟度,不在支持列表有多长,而在一次跨运行时任务能否保持同一套安全、状态和可观测语义。

参考资料