用 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 协议的完整脉络。

学习目标

  1. 理解 Google 的 Agent 栈四件套:ADK + MCP + Agent Engine + A2A
  2. 掌握在 Vertex AI 上获取 Claude 3.7 Sonnet / Claude 4 的完整路径
  3. 跟着做一个会「策划生日 + 安排日程」的多 Agent 系统
  4. 把 Agent 部署到 Vertex AI Agent Engine,上线可观测、可扩缩容
  5. 搞懂 A2A(Agent-to-Agent)协议的三个核心概念:Agent Card、Skill、Executor

阅读前提:对 Python、LLM Agent、Google Cloud 有基本了解。不需要读过其他 ADK 或 Skills 教程——本文独立成章。

📅 发布日期:2026-04-25

本课目录


开篇:为什么要在 Vertex AI 上跑 Claude?

从原型到生产,AI Agent 有三个绕不开的坎:

  1. 生态碎片化:框架、工具、模型、向量库各自为政,集成成本高
  2. 跨框架协作难:LangGraph 写的 Agent 和 ADK 写的 Agent 想互相调用?没标准
  3. 生产治理重:日志、监控、扩缩容、权限、版本管理——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_idlocationmodel_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-east5europe-west1 可用。调用前请查当前最新可用 region。


第 2 节:ADK 基本概念快速过一遍

ADK 有四个核心概念,熟悉任意一个 Agent 框架(LangChain / LlamaIndex / Anthropic Agent SDK)的读者会很快对应上:

ADK 概念作用
LlmAgent有一个 LLM 大脑的单 Agent
ToolAgent 能调用的能力(函数 / MCP / 预制工具)
Runner协调执行、管理会话状态
Session多轮对话的上下文记忆

再加上 ADK run(CLI 交互)和 ADK web(可视化调试 UI)两个开发工具,你就能完整闭环开发一个 Agent。

ADK 接入 Claude 的两种方式

  1. LiteLLM 适配器(通用型):通过 LiteLlm(model="anthropic/claude-3-7-sonnet") 走 Anthropic 原生 API
  2. 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 背后做的事:

  1. 启动 MCP Server(通过 stdio 或 SSE)
  2. 拉取 Server 声明的 tool 列表
  3. 自动把每个 MCP tool 转换成 ADK Tool
  4. 注入到 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 里依次看到:

  1. orchestratorbirthday_planner(拿策划方案)
  2. orchestratorcalendar_agentcreate_event(写入日历)
  3. 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

后台发生的事:

  1. 打包 Agent 代码 + requirements
  2. 构建容器镜像
  3. 推到 Vertex AI Agent Engine
  4. 分配 serverless 实例 + 自动扩缩容
  5. 暴露 streaming / request-response API
  6. 接入 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 SkillAgent 的能力列表:一个 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、开源模型,按任务选最合适的。

这一课你跑通了什么

  1. 在 Vertex AI 上激活了 Claude 3.7 Sonnet
  2. 用 ADK 三个文件写出了第一个 Agent
  3. 升级为 Orchestrator + 两个子 Agent 的多 Agent 系统
  4. 用 MCP 把 Google Calendar 作为 Tool 接入
  5. 一行 agent_engines.create() 部署到 Vertex AI Agent Engine
  6. 理解了 A2A 协议的三个核心概念

资源

English EN 简体中文 ZH