用 Google ADK 在 Vertex AI 上构建 Claude 多 Agent 系统
本课讲什么:一份 Vertex AI Agent Engine 部署教程——怎么在 Google Cloud 上用 Google ADK + Claude 3.7 Sonnet 搭一个可落地的多 Agent 系统,并真的把它托管上线。
内容来源:本课整理自 Google Cloud Developer Advocate Ian Ardini 在 Anthropic 技术分享 session 的现场演讲《Building AI Agents on Vertex AI with Claude》。原演讲约 30 分钟,本文补上代码细节、部署流程和 A2A 协议的完整脉络。
学习目标:
- 理解 Google 的 Agent 栈四件套:ADK + MCP + Agent Engine + A2A
- 掌握在 Vertex AI 上获取 Claude 3.7 Sonnet / Claude 4 的完整路径
- 跟着做一个会「策划生日 + 安排日程」的多 Agent 系统
- 把 Agent 部署到 Vertex AI Agent Engine,上线可观测、可扩缩容
- 搞懂 A2A(Agent-to-Agent)协议的三个核心概念:Agent Card、Skill、Executor
阅读前提:对 Python、LLM Agent、Google Cloud 有基本了解。不需要读过其他 ADK 或 Skills 教程——本文独立成章。
📅 发布日期:2026-04-25
本课目录
- 开篇:为什么要在 Vertex AI 上跑 Claude?
- 第 1 节:在 Vertex AI Model Garden 获取 Claude
- 第 2 节:ADK 基本概念快速过一遍
- 第 3 节:最小可跑——Birthday Planner Agent
- 第 4 节:升级为多 Agent 系统 + MCP 工具集成
- 第 5 节:一行代码部署到 Vertex AI Agent Engine
- 第 6 节:让不同框架的 Agent 互通——A2A 协议
- 复盘:完整的 Google Agent 栈
开篇:为什么要在 Vertex AI 上跑 Claude?
从原型到生产,AI Agent 有三个绕不开的坎:
- 生态碎片化:框架、工具、模型、向量库各自为政,集成成本高
- 跨框架协作难:LangGraph 写的 Agent 和 ADK 写的 Agent 想互相调用?没标准
- 生产治理重:日志、监控、扩缩容、权限、版本管理——Agent 是应用,就得按应用运维
Google Cloud 给出的答案是一个完整四件套:
| 组件 | 解决什么 | 角色 |
|---|---|---|
| ADK(Agent Development Kit) | 构建 + 评估 + 部署 Agent 的开源框架 | 开发层 |
| MCP(Model Context Protocol) | Agent 获取工具和上下文的开放协议 | 工具层 |
| Vertex AI Agent Engine | 托管运行时,部署 + 观测 + 伸缩 | 平台层 |
| A2A(Agent-to-Agent) | 让不同框架的 Agent 相互通信的开放协议 | 协作层 |
而 Claude 作为 Anthropic 的旗舰模型,通过 Vertex AI Model Garden 原生接入——这意味着你可以在同一个 Google Cloud 项目里混用 Claude、Gemini、开源模型,按任务选模型,按平台统一管理。
这一课就把这套栈的前三件(ADK + MCP + Agent Engine)从零跑一遍,最后再补一块 A2A 拼图。
第 1 节:在 Vertex AI Model Garden 获取 Claude
Vertex AI Model Garden 是 Google Cloud 的中心化模型仓库,提供:
- 一手 Foundation 模型(Gemini 系列)
- 第三方 Partner 模型(Anthropic Claude、Meta Llama 等)
- 开源模型(Mistral、Gemma、HuggingFace 一键部署)
进入 Google Cloud Console → Vertex AI → Model Garden,搜 “Claude”,就能看到 Anthropic 的完整模型列表,包括最新的 Claude 4 和本课要用的 Claude 3.7 Sonnet。
点进某个 Claude 模型,你会看到两种使用方式:
- Playground 测试:进 Vertex AI Studio,直接 prompt 调试
- 程序调用:拿到
project_id、location、model_id,写进环境变量
# .env
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_LOCATION=us-east5
GOOGLE_GENAI_USE_VERTEXAI=TRUE
为什么 location 是
us-east5? Anthropic 在 Vertex 上的 region 分布有限,本教程写作时 Claude 3.7 Sonnet 在us-east5和europe-west1可用。调用前请查当前最新可用 region。
第 2 节:ADK 基本概念快速过一遍
ADK 有四个核心概念,熟悉任意一个 Agent 框架(LangChain / LlamaIndex / Anthropic Agent SDK)的读者会很快对应上:
| ADK 概念 | 作用 |
|---|---|
LlmAgent | 有一个 LLM 大脑的单 Agent |
Tool | Agent 能调用的能力(函数 / MCP / 预制工具) |
Runner | 协调执行、管理会话状态 |
Session | 多轮对话的上下文记忆 |
再加上 ADK run(CLI 交互)和 ADK web(可视化调试 UI)两个开发工具,你就能完整闭环开发一个 Agent。
ADK 接入 Claude 的两种方式:
- LiteLLM 适配器(通用型):通过
LiteLlm(model="anthropic/claude-3-7-sonnet")走 Anthropic 原生 API - Claude + LLM Registry 原生集成(本课推荐):
Claude(model="claude-3-7-sonnet@20250219")走 Vertex AI,credentials 复用gcloud登录
原生集成的好处:账单走 Google Cloud 统一计费,监控走 Vertex AI Observability,不需要额外管 Anthropic API Key。
第 3 节:最小可跑——Birthday Planner Agent
一个 ADK 项目只需要三个文件:
birthday_planner/
├── __init__.py
├── agent.py # Agent 主逻辑
└── .env # 环境变量
agent.py 核心:
from google.adk.agents import LlmAgent
from google.adk.models.anthropic_llm import Claude
root_agent = LlmAgent(
model=Claude(model="claude-3-7-sonnet@20250219"),
name="birthday_planner",
description="Helps user plan a birthday party with ideas and a guest checklist.",
instruction=(
"你是一个生日派对策划助手。根据用户的年龄、喜好和预算,"
"给出主题建议、嘉宾清单、活动安排三部分内容。语气轻快友好。"
),
)
跑起来:
adk run birthday_planner
CLI 会直接进入交互会话,随便问一句”帮我策划一个 30 岁朋友的生日派对,预算 2000 元”,Claude 3.7 Sonnet 就开始干活了。
三个文件,一行 CLI,搞定一个 Agent——这就是 ADK 最吸引人的地方:贴近软件工程直觉,没有隐藏概念。
第 4 节:升级为多 Agent 系统 + MCP 工具集成
策划完派对,用户自然会问:“能帮我在日历上定个提醒买礼物吗?“——这已经超出了单 Agent 的职责范围。
是时候升级成多 Agent 系统了。目标架构:
┌────────────────────────┐
│ Orchestrator Agent │ ← 根据用户意图路由
└──────┬────────────┬────┘
▼ ▼
┌───────────┐ ┌────────────┐
│ Birthday │ │ Calendar │
│ Planner │ │ Agent │
└───────────┘ └─────┬──────┘
▼
┌─────────────┐
│ MCP Server │ ← Google Calendar
└─────────────┘
4.1 用 MCP 连接 Calendar 服务
MCP(Model Context Protocol)做的事一句话讲清:标准化 LLM / Agent 和外部工具之间的通信。社区已经有大量现成的 MCP Server(Google Calendar、Slack、Notion、Postgres……),ADK 把它们原地当 Tool 用只要两行代码:
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StdioServerParameters
calendar_toolset = MCPToolset(
connection_params=StdioServerParameters(
command="npx",
args=["-y", "@modelcontextprotocol/server-google-calendar"],
),
)
ADK 背后做的事:
- 启动 MCP Server(通过 stdio 或 SSE)
- 拉取 Server 声明的 tool 列表
- 自动把每个 MCP tool 转换成 ADK Tool
- 注入到 Agent 的 tools 里
对 LLM 而言,MCP 工具和原生 Python 工具完全无差别——这是 ADK 把 MCP 作为一等公民设计的结果。
4.2 Calendar Agent
calendar_agent = LlmAgent(
model=Claude(model="claude-3-7-sonnet@20250219"),
name="calendar_agent",
description="Schedules events and reminders on the user's Google Calendar.",
instruction="你是日程助理,根据用户请求创建日历事件。时间要明确,含标题、起止、提醒。",
tools=[calendar_toolset], # ← MCP toolset 直接传进来
)
4.3 Orchestrator:一个路由器 Agent
orchestrator = LlmAgent(
model=Claude(model="claude-3-7-sonnet@20250219"),
name="orchestrator",
description="Routes user requests to the right specialist agent.",
instruction=(
"你是任务分发者。用户请求涉及生日策划,转给 birthday_planner;"
"涉及日程安排,转给 calendar_agent;可以连续调用两个完成端到端任务。"
),
tools=[birthday_planner, calendar_agent], # ← Agent 当 Tool 用
)
关键语法糖:ADK 允许把子 Agent 当作 Tool 传给父 Agent。Orchestrator 看到的”工具”其实是两个完整的下游 Agent,由它自主决定调哪个、调几次、怎么串。
4.4 用 adk web 调试多 Agent
adk web
浏览器打开 http://localhost:8000,左侧选 orchestrator,右侧聊天。每次交互都能看到完整的工具调用链 / Agent 路由轨迹——这是调试多 Agent 系统不可或缺的能力。
试试这句:“帮我策划下周六给 Alice 办个 30 岁生日派对,然后在我日历上定个周四下午 3 点提醒我去买礼物。”
你会在 UI 里依次看到:
orchestrator→birthday_planner(拿策划方案)orchestrator→calendar_agent→create_event(写入日历)orchestrator汇总两段内容返回用户
第 5 节:一行代码部署到 Vertex AI Agent Engine
开发完成不等于上线完成。真上线要处理:
- 把 Agent 包成 Web 服务(FastAPI / Django)
- Dockerfile + 容器注册表
- Kubernetes / Cloud Run 资源配置
- 日志采集、Metrics、Trace
- Session 存储、并发隔离
- 版本灰度、回滚
Vertex AI Agent Engine 是 Google Cloud 针对 Agent 应用推出的托管运行时,上面这些它全包了。你要做的只有一件事:把 Agent 对象交给它。
# deploy_agent.py
from vertexai import agent_engines
import vertexai
vertexai.init(
project="your-project-id",
location="us-central1",
staging_bucket="gs://your-staging-bucket",
)
from birthday_planner.agent import root_agent
remote_agent = agent_engines.create(
agent_engine=root_agent,
requirements=[
"google-adk>=1.0.0",
"anthropic[vertex]",
],
display_name="birthday-planner",
)
print(f"Deployed: {remote_agent.resource_name}")
python deploy_agent.py
后台发生的事:
- 打包 Agent 代码 + requirements
- 构建容器镜像
- 推到 Vertex AI Agent Engine
- 分配 serverless 实例 + 自动扩缩容
- 暴露 streaming / request-response API
- 接入 Cloud Logging + Cloud Monitoring
部署完成后在 Google Cloud Console → Vertex AI → Agent Engine 面板,你能看到:
- Queries per minute / latency / error rate
- CPU / Memory 占用:判断是否需要调整规格
- Session 列表:完整的用户会话轨迹
- Trace 详情:每一次 Agent 调用内部的 tool 链、LLM 调用、token 消耗
这些日志可以直接喂给 Vertex AI Evaluation Service 做离线评估,让 Agent 能持续迭代优化——这就是把 Agent 当生产应用管理的完整闭环。
第 6 节:让不同框架的 Agent 互通——A2A 协议
你用 ADK 写了 Agent,隔壁团队用 LangGraph 写了另一个,怎么让它们互相调用?
过去的答案是”没有答案”——每个框架私有协议。Google 联合 50+ 合作伙伴推出的 Agent-to-Agent(A2A)协议就是要解决这件事。
A2A 的设计要点:
- 基于标准协议:HTTP + JSON-RPC,没有造新轮子
- 企业就绪:鉴权、签名、速率限制、可审计
- 框架无关:ADK、LangGraph、CrewAI、LlamaIndex 都可以实现
三个核心概念:
| 概念 | 作用 | 类比 |
|---|---|---|
| Agent Card | 一张数字”名片”:描述 Agent 是谁、跑在哪、怎么调用 | HTTP /.well-known |
| Agent Skill | Agent 的能力列表:一个 Skill = 一个可被外部调用的函数 | OpenAPI operation |
| Agent Executor | 执行器,管理请求解析、调用、响应、错误 | Web 框架的 Controller |
一句话总结协作流程:对方 Agent 读你的 Agent Card,挑一个 Skill,通过 A2A 调用你的 Executor,你返回结果。
Caller Agent (LangGraph) Callee Agent (ADK)
│ │
│ 1. GET /.well-known/agent-card.json │
│────────────────────────────────────────▶│
│ │
│ 2. POST /a2a/invoke │
│ { "skill": "plan_birthday", ... } │
│────────────────────────────────────────▶│
│ │
│ 3. Response (streaming / JSON-RPC) │
│◀────────────────────────────────────────│
提示:A2A 的代码细节(Python
a2a-sdk、Agent Card schema、Skill 声明、Executor 实现)会在本站后续一篇专题文章展开——本课先建立脑图,知道”为什么需要”和”三个核心概念”即可。
复盘:完整的 Google Agent 栈
回到开篇那三个痛点,我们用完整栈给出了对应的答案:
| 痛点 | Google 栈的解法 |
|---|---|
| 生态碎片化 | ADK 统一开发体验 + MCP 统一工具接入 |
| 跨框架协作难 | A2A 作为开放协议横向打通 |
| 生产治理重 | Vertex AI Agent Engine 托管运行时一键搞定 |
再加上 Vertex AI Model Garden——同一个项目里随意混用 Claude 3.7 Sonnet、Claude 4、Gemini、开源模型,按任务选最合适的。
这一课你跑通了什么:
- 在 Vertex AI 上激活了 Claude 3.7 Sonnet
- 用 ADK 三个文件写出了第一个 Agent
- 升级为 Orchestrator + 两个子 Agent 的多 Agent 系统
- 用 MCP 把 Google Calendar 作为 Tool 接入
- 一行
agent_engines.create()部署到 Vertex AI Agent Engine - 理解了 A2A 协议的三个核心概念