本文要点(TL;DR)
- Google 的 Agentic 技术栈由四层组成:ADK(开发框架)+ MCP(工具协议)+ Agent Engine(托管部署)+ A2A(Agent 间通信)
- ADK 是 code-first 的开源框架,三个文件 + 一行命令就能跑起一个 Agent,支持 Claude、Gemini 等多种模型
- 通过 MCP 集成外部工具只需 两行代码,Agent 自动把 MCP server 转成可调用的工具
- 多 Agent 编排用 AgentTool 把子 Agent 当工具传给编排 Agent,写法和单 Agent 几乎一样
- Agent Engine 让部署从"搭 FastAPI + Docker + 运维"简化到 一行
agent_engines.create() - A2A 协议解决跨框架 Agent 互通难题:Agent Card(名片)+ Agent Skill(能力声明)
关于配图:本文配图分两类——① 取自演讲视频的真实画面(现场幻灯片、VS Code 代码、Vertex AI 控制台截帧);② 根据演讲内容重新绘制的中文示意图(图注中标注"基于演讲内容整理")。
1. 问题:构建 AI Agent 很强大,但上生产很痛苦
Ivan 开场直接点明三个痛点:
| 挑战 | 具体表现 |
|---|---|
| 碎片化格局 | 框架太多(LangChain、CrewAI、ADK...),选型和集成成本高 |
| 跨框架集成难 | 不同框架构建的 Agent 之间无法共享工具、记忆、计划 |
| 运维和治理缺失 | 部署、扩缩容、监控、日志、评估全部要自己搭 |
Google 的回答是一套四层技术栈:
- Agent Development Kit (ADK):开源、code-first 的 Agent 开发框架
- Model Context Protocol (MCP):标准化 Agent 获取工具和上下文的方式
- Vertex AI Agent Engine:托管平台,一行代码部署,内置可观测性
- Agent-to-Agent Protocol (A2A):开放协议,让不同框架的 Agent 互相通信
2. 在 Vertex AI 上使用 Claude
在写第一行代码之前,Ivan 先演示了如何在 Google Cloud 上获取 Claude 模型的访问权限。
Vertex AI 的 Model Garden 是一个集中式模型目录,Claude 系列模型(包括演讲当天刚发布的 Claude 4)都在合作伙伴区域。启用后可以通过 API 或 Vertex AI Studio(一个在线 prompt 测试界面)直接使用。
3. ADK 核心概念:三个文件搞定一个 Agent
ADK 的设计哲学是 code-first,尽可能贴近软件工程的最佳实践。核心概念只有四个:
| 概念 | 作用 | 类比 |
|---|---|---|
| LlmAgent | Agent 的大脑,接入 LLM(Claude / Gemini 等),通过 name、model、instruction、tools 四个参数定义 | 招一个员工 |
| Tools (FunctionTool) | Agent 的技能,可以是 Python 函数,ADK 自动生成 schema 给 LLM | 给员工技能手册 |
| Runner | 执行器,把 Agent 和工具组合起来协调运行 | 工位管理员 |
| Session & State | 会话 = 对话,State = 跨轮次传递的数据字典 | 对话记忆 |
Birthday Planner Agent:实战第一个 Agent
Ivan 现场演示的第一个 Agent 是一个"生日派对策划师"。整个项目只需要三个文件:
birthday_planner_agent/
├── agent.py # Agent 逻辑
├── .env # 环境变量(模型凭证等)
└── __init__.py # Python 包标识
agent.py 的核心代码:
root_agent = LlmAgent(
name="BirthdayPlannerAgent",
model="claude-3-7-sonnet@20250219",
description="Helps plan birthday parties and activities.",
instruction=(
"You are a friendly and creative Birthday Planner assistant.\n"
"Your goal is to help the user brainstorm ideas for a birthday party.\n"
"1. First, ask for the age of the birthday person.\n"
"2. After receiving the age, ask about their interests or hobbies.\n"
"3. Once you have both, provide 3-5 suitable and creative "
"birthday party theme or activity suggestions.\n"
),
tools=[],
)
启动方式只需一行命令:
adk run birthday_planner_agent
adk run 启动 Agent4. 用 MCP 集成外部工具:两行代码搞定
Agent 能聊天了,但还不够——我们想让它能操作日历。Ivan 引入了一个 Calendar Service Agent,通过 MCP 连接到日历服务。
ADK 和 MCP 的集成有两种方向:
- ADK 作为 MCP 客户端:把外部已有的 MCP server 当作 Agent 的工具使用
- ADK 暴露为 MCP Server:把 ADK 中定义的工具通过 MCP 协议暴露给其他 Agent
在代码层面,集成一个 MCP server 只需要两行:
# 连接已有的 MCP server
calendar_mcp = MCPServer(url="http://localhost:8080")
calendar_tools = calendar_mcp.get_tools()
# 创建带 MCP 工具的 Agent
calendar_agent = LlmAgent(
name="CalendarAgent",
model="claude-3-5-sonnet",
tools=calendar_tools, # MCP 工具自动转成 ADK 工具
...
)
背后发生的事:ADK 获取 MCP server 的工具定义,自动转换成 Agent 可调用的 FunctionTool。不需要手动写 schema 或适配层。
5. 多 Agent 编排:用 AgentTool 组合子 Agent
有了 Birthday Planner 和 Calendar Agent,Ivan 引入了一个 Event Organizer 编排 Agent 来协调它们。
编排器的写法出奇地简单:
organizer = LlmAgent(
name="EventOrganizerAgent",
model="gemini-2.0-flash",
description="Main coordinator for event planning.",
instruction=(
"You are an expert Event Organizer.\n"
"You have a team of specialist agents:\n"
f"- '{planner_agent_instance.name}': This agent is an expert...\n"
f"- '{calendar_agent_instance.name}': This agent handles all...\n"
"Your primary job is to understand the user's request and delegate...\n"
),
tools=[
agent_tool.AgentTool(agent=planner_agent_instance),
agent_tool.AgentTool(agent=calendar_agent_instance),
],
)
把子 Agent 用 AgentTool 包一下,和普通工具一样传给编排 Agent 就行了。编排 Agent 根据用户请求自动选择调用哪个子 Agent。
注意一个细节:编排 Agent 用的是 Gemini,子 Agent 用的是 Claude。ADK 支持在同一个多 Agent 系统中混用不同模型。
ADK 还提供了一个 Web UI 用于调试多 Agent 系统,可以实时看到编排器把请求路由到了哪个子 Agent。
6. Agent Engine:一行代码部署到生产
Agent 在本地跑通了,怎么上生产?
| 维度 | 没有 Agent Engine | 有 Agent Engine |
|---|---|---|
| 开发代码 | 用 FastAPI/Django 包装 → Docker 容器 → 配 GCP | 一行 agent_engines.create() |
| 基础设施 | 自己管部署、扩缩容 | Vertex 自动管理,含安全和区域扩展 |
| 可观测性 | 手动加日志/监控/追踪/评估 | 内置 Cloud Logging、Monitoring、Tracing + Gen AI Evaluation |
部署代码也非常精简:
AGENTS_TO_DEPLOY = [
birthday_planner_agent,
calendar_agent,
organizer_agent,
]
BASE_REQUIREMENTS = [
"google-cloud-aiplatform[adk, agent_engines]==1.93.0",
"anthropic[vertex]==0.51.0",
"fastmcp==2.3.4",
...
]
# 一行部署
deploy_single_agent(agent_object, requirements)
部署完成后,在 Vertex AI 控制台可以看到 Agent 的运行状态:
控制台提供:
- 查询量和延迟监控
- CPU / 内存使用情况
- Session 管理
- API 端点信息(支持实时和流式两种调用方式)
- 部署详情
7. A2A 协议:让不同框架的 Agent 互相对话
最后一个挑战:如果你用 ADK 构建了一些 Agent,同事用 LangChain 构建了另一些,它们怎么协作?
A2A(Agent-to-Agent Protocol)是 Google 提出的开放协议,基于 HTTP 和 JSON-RPC,设计上就考虑了企业级的安全和治理需求。
核心概念只有两个:
| 概念 | 作用 | 类比 |
|---|---|---|
| Agent Skill | 描述 Agent 的具体能力或功能 | 简历上的技能列表 |
| Agent Card | JSON 格式的数字名片(.well-known/agent.json),告诉其他 Agent "我是谁、我能做什么" | 名片 |
有了 Agent Card,任何框架构建的 Agent 都能通过标准 HTTP 协议发现对方、了解对方的能力、发起协作请求。
8. 关键收获
开发者体验是一等公民
ADK 的整个设计围绕"让开发者写最少的代码"展开:
- 三个文件创建一个 Agent
- 两行代码集成 MCP 工具
- 一行代码部署到生产
- 把子 Agent 当工具传给编排器实现多 Agent 系统
模型无关性
同一个 ADK 项目可以混用 Claude 和 Gemini,编排 Agent 用 Gemini,子 Agent 用 Claude,根据任务特点选择最合适的模型。
从开发到生产的完整路径
不是只给你一个 SDK 就完事了——ADK + MCP + Agent Engine + A2A 覆盖了从本地开发到生产部署到跨系统互通的全链路。
开放生态
ADK 和 A2A 都是开源的,Agent Engine 支持 LangChain、CrewAI 等多种框架,MCP 是社区标准——不锁定任何特定技术栈。
本文基于 Ivan Nardini(Google Cloud AI/ML Developer Advocate)的现场演讲整理,原始来源见 X 推文。
图文整理:AI 辅助