One Agent Development Kit, five languages

TL;DR · AI 摘要
Google推出支持五种语言的Agent Development Kit,通过统一协议实现多语言代理互操作,消除Python依赖限制。
核心要点
- ADK支持Python/Go/TypeScript/Java/Kotlin五种语言,避免强制使用Python
- MCP协议实现工具调用互操作,A2A协议支持跨语言代理通信
- Python示例中无需装饰器,通过函数签名自动生成工具声明
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- ADK多语言架构
- 核心协议
- MCP工具调用
- A2A通信
- 支持语言
- Python
- Go
- TypeScript
- Java
- Kotlin
- 开发流程
- CLI初始化
- 项目脚手架
- 部署配置
金句 / Highlights
值得收藏与分享的关键句。
ADK通过MCP协议实现跨语言工具调用,A2A协议支持HTTP通信
Python实现中函数签名自动构造工具声明和Pydantic参数schema
支持Cloud Run/Gemini Enterprise Agent Runtime/GKE三种部署目标
One Agent 开发工具包,支持五种语言 | Google Cloud 博客
开发者与实践者
One Agent 开发工具包,支持五种语言
2026年10月14日
##### Karl Weinmeister
开发者关系总监
当我们谈论代理时,并不一定意味着我们只在谈论 Python。在当今的现代生态系统中,一个代理可能作为高并发的 Go 微服务在 Cloud Run 上运行,或者驻留在浏览器标签页中并调用 Chrome 的设备端模型。然而许多代理框架假设仅使用 Python 栈。这种假设迫使团队要么只为代理工作负载启动一个 Python 服务,要么需要在自己的语言中从零开始构建代理编排逻辑。
Google 的代理开发工具包(ADK)通过支持 Python、Go、TypeScript、Java 和 Kotlin,消除了这种权衡。每个 ADK 版本都为其运行时和类型系统从零构建,同时通过开放协议实现统一架构的互操作性。
共享的基础架构
选择语言不会锁定你的架构:所有五种语言都支持相同的开放协议。ADK 在每种语言中都包含 Model Context Protocol 客户端,因此作为 MCP 服务器公开的自定义工具可以立即被任何语言调用。
对于多代理系统,ADK 支持 Agent2Agent(A2A)协议,允许代理通过 HTTP 与远程代理通信。通过 A2A,使用不同语言或框架编写的代理可以实现互操作性。
以代理为中心的起点
要开始使用,请运行一次性设置命令以检查 Google Cloud 身份验证、安装 CLI,然后在 Antigravity、Claude Code 或 Codex 等编码代理中设置第一方 ADK 技能:
加载中...
uvx google-agents-cli setup
然后,运行 scaffold 命令生成一个包含 A2A 端点和 Cloud Run、Gemini Enterprise Agent Runtime 或 Google Kubernetes Engine(GKE)部署配置的可用项目:
架构一个 ADK 项目(使用 --agent adk 表示 Python 或 --agent adk_go 表示 Go)
agents-cli scaffold create my-go-agent \ --agent adk_go \ --deployment-target cloud_run \ --region us-central1
Python 和 Kotlin 的 ADK 仓库在其源代码树中也提供了代理构建技能,而 adk.dev/llms.txt 资源可为所有五种语言的任何编码代理提供按需 API 文档。
编码代理技能会构建你的项目,同时 MCP 和 A2A 连接所有五种语言的运行时。
每个 ADK 的实践视角
最清晰感受五种语言差异的方式是:在每种语言中定义相同的天气工具,并观察其设计如何适应运行时。
Python
在 Python 的 ADK 中,你不需要装饰器或模式构建器类。只需将一个普通的 Python 函数传递给 tools 参数,ADK 在启动时会检查其签名、类型提示和文档字符串,自动构建工具声明和 Pydantic 参数模式:
lang-py
from google.adk.agents.llm_agent import Agent
def get_weather(city: str) -> dict: """获取指定城市的当前天气报告。 Args: city (str): 要获取天气报告的城市名称。 """ return {"status": "success", "report": f"Sunny and 72F in {city}."}
root_agent = Agent( name="weather_agent", model="gemini-3.8-flash", instruction="回答有关城市天气的问题。", tools=[get_weather], )
除了快速原型开发,Python是ADK的参考实现,提供最全面的Google Cloud集成(BigQuery、Spanner、Bigtable)和模型适配器(Gemini、Anthropic、OpenAI、LiteLLM)。结合adk eval或agents-cli eval run命令,其评估工具可在持续集成(CI)中将代理轨迹与黄金数据集进行评分,实现端到端系统测试,即使生产服务使用其他语言运行。
Go
虽然Python在实验和评估方面占优,但Go版ADK在生产后端工程中表现更佳。
Go工具函数接收agent.Context配置和强类型输入结构体。functiontool.New函数利用Go泛型从结构体标签推断输入和输出模式:
type GetWeatherArgs struct { City string json:"city" jsonschema:"The city to look up weather for." } type GetWeatherResult struct { Report string json:"report" } func getWeather(_ agent.Context, args GetWeatherArgs) (GetWeatherResult, error) { return GetWeatherResult{Report: "Sunny and 72F in " + args.City}, nil } weatherTool, err := functiontool.New(functiontool.Config{ Name: "get_weather", Description: "Retrieves the current weather report for a city.", }, getWeather)
由于functiontool.New函数对处理程序签名是泛型的,Go编译器会在二进制文件运行前验证函数是否符合预期契约。
Go也是首个在Python之后提供ADK 2.0图工作流运行时的语言。当需要将LLM推理与确定性控制流结合时,workflow.New函数会将代理和普通Go函数连接成带条件路由和并行步骤的有向图:
ag, err := workflowagent.New("order_pipeline", []workflow.Edge{ {From: workflow.Start, To: triageNode}, {From: triageNode, To: fulfillNode, Route: workflow.StringRoute("fulfill")}, {From: fulfillNode, To: notifyNode}, })
Go在Cloud Run和GKE生产环境中的表现尤为突出。编译后的Go代理可打包到约2 MiB的Google无语言虚拟机静态基础镜像中,无需语言VM或重型依赖树。静态Go二进制文件在容器启动时立即绑定端口,跳过动态语言的模块导入和JVM服务的JAR解包及JIT预热过程。
运行后,Go的并发模型天然适配代理工作负载。每个goroutine初始栈大小为2 KB且调度开销极小,因此单个实例可同时处理数千个并发流式请求和工具调用。Go版ADK还内置A2A服务器处理器和开箱即用的OpenTelemetry追踪功能。
TypeScript
TypeScript在编译为JavaScript时会擦除类型注解,因此运行时反射不可行。ADK for TypeScript采用Zod方案替代。你只需将z.object(...)模式传递给FunctionTool函数,TypeScript即可从该声明静态推断execute回调的参数类型:
import { FunctionTool, LlmAgent } from "@google/adk"; import { z } from "zod"; const getWeatherTool = new FunctionTool({ name: "get_weather", description: "Retrieves the current weather report for a city.", parameters: z.object({ city: z.string().describe("The name of the city."), }), execute: async ({ city }) => { return { status: "success", report: Sunny and 72F in ${city}. }; }, }); export const rootAgent = new LlmAgent({ name: "weather_agent", model: "gemini-3.8-flash", instruction: "Answer questions about the weather in a city.", tools: [getWeatherTool], });
运行时输入验证、发送给模型的 JSON Schema 以及 execute 回调中 IDE 的自动补全功能都源自同一个统一的数据源。
TypeScript 还运行在 ADK 2.0 图工作流引擎上,并提供独立的浏览器打包版本。除了 Node.js 服务,你还可以通过 WebMCP 在浏览器标签页中直接运行 ADK 代理,使用 Chrome 的设备端 Prompt API 实现页面级工具。
Java
对于已采用 Maven、Gradle 和 Spring Boot 的团队,Java 版 ADK 可以无缝集成。你只需向方法参数添加 @Schema 注解,通过流畅的 LlmAgent.builder() API 组装代理:
public class WeatherTools { public static Map<String, String> getWeather( @Schema(name = "city", description = "The name of the city") String city) { return Map.of("status", "success", "report", "Sunny and 72F in " + city); } } LlmAgent agent = LlmAgent.builder() .name("weather_agent") .model("gemini-3.8-flash") .instruction("Answer questions about the weather in a city.") .tools(FunctionTool.create(WeatherTools.class, "getWeather")) .build();
运行时,执行器会通过 RxJava 以响应式方式流式传输代理事件。对于本地测试和现有 JVM 应用,Java 版 ADK 提供 Maven Dev UI 插件,并提供与 Spring AI 和 LangChain4j 的官方桥接工具。
Kotlin
Kotlin 版 ADK 在构建时安全性方面有明确立场。其 Kotlin 符号处理(KSP)编译器插件会在构建时读取 @Tool 和 @Param 注解,并直接将工具模式写入字节码:
class WeatherTools { @Tool( name = "get_weather", description = "Retrieves the current weather report for a city.", ) suspend fun getWeather( @Param("The name of the city.") city: String ): Map<String, String> = mapOf("status" to "success", "report" to "Sunny and 72F in $city") } val agent = LlmAgent( model = Gemini("gemini-3.8-flash"), name = "weather_agent", instruction = Instruction("Answer questions about the weather in a city."), tools = WeatherTools().generatedTools(), )
如果工具签名使用了不支持的类型,或在非空参数上声明了默认值,你的 Gradle 构建会立即失败,而不是在生产环境中崩溃。由于 .generatedTools() 函数不使用任何运行时反射,它可以兼容 Android R8 代码缩减。
这种零反射设计使得可以在 Android 上本地运行整个代理循环。它提供 JVM 服务器支持,包括 Spring AI 桥接工具和实验性的 ADK 2.0 图工作流。在设备端,Kotlin 版 ADK 与 LiteRT-LM 集成用于工具调用,与 ML Kit(Gemini Nano)集成用于文本生成。它还支持与 Room 和 AppSearch 集成实现本地状态管理,以及与 Android AppFunctions 集成实现操作系统级操作,所有功能均无需网络连接。
无妥协的选择
ADK 支持五种本地语言,这意味着您无需为整个组织选择单一的运行时环境。由于 ADK 的每个版本都使用 MCP 和 A2A 协议,系统中的每个组件都可以选择最适合自己的语言进行开发。
您使用过哪些语言来构建 Google ADK 的代理?欢迎在 X、LinkedIn 或 Bluesky 上分享您使用的技术栈。
发布于
- 开发者与实践者