返回资料库 Agent 框架实战

Google ADK 实战:用代码优先的方式构建 AI Agent

Google Agent Development Kit(ADK)是 Google 推出的开源、代码优先的 Agent 开发框架。它的设计哲学是:用纯代码定义 Agent 的行为、工具和工作流,而不是依赖可视化拖拽或声明式配置。

来源:google.github.io/adk-docs · google/adk-python · google/adk-java | 整理时间:2026-04-07


什么是 Google ADK?

Google Agent Development Kit(ADK)是 Google 推出的开源、代码优先的 Agent 开发框架。它的设计哲学是:用纯代码定义 Agent 的行为、工具和工作流,而不是依赖可视化拖拽或声明式配置。

关键数据

  • 开源时间:2025 年 4 月首次发布
  • 支持语言:Python、Java、Go、TypeScript(其中 Python 和 Java 已达 v1.0.0 稳定版)
  • 许可证:Apache 2.0
  • 模型支持:Gemini(深度优化)、Claude、Vertex AI、Ollama、vLLM、LiteLLM

与其他框架的定位差异

框架 定位 复杂度 适合场景
Google ADK 代码优先、模型无关 需要 Google 生态集成的生产级 Agent
LangGraph 图式工作流编排 需要精确控制每一步的场景
CrewAI 多 Agent 角色协作 快速搭建多 Agent 团队
OpenAI Agents SDK 单 Agent + 工具 简单工具调用场景

核心概念

四大支柱

概念 说明 类比
Agent 智能决策单元,可以是 LLM 驱动或流程控制器 团队成员
Tool Agent 可调用的能力(搜索、代码执行、自定义函数等) 手里的工具
Runner 执行引擎,管理 Agent 与用户的交互循环 项目经理
Session 会话管理,维护对话历史和状态 项目记录本

Agent 类型

ADK 提供四种 Agent 类型,覆盖从简单到复杂的所有场景:

类型 类名 用途
LLM Agent LlmAgent 由大模型驱动的智能 Agent,能推理、决策、调用工具
顺序 Agent SequentialAgent 按顺序依次执行子 Agent
并行 Agent ParallelAgent 同时执行多个子 Agent
循环 Agent LoopAgent 反复执行子 Agent 直到满足条件

此外,你可以通过继承 BaseAgent 创建自定义 Agent。


安装

Python

pip install google-adk

Java(Maven)

<dependency>
    <groupId>com.google.adk</groupId>
    <artifactId>google-adk</artifactId>
    <version>1.0.0</version>
</dependency>

Java(Gradle)

implementation 'com.google.adk:google-adk:1.0.0'

Go

go get google.golang.org/adk

第一个 Agent(Python)

最简单的 Agent:城市时间查询

from google.adk.agents.llm_agent import Agent

def get_current_time(city: str) -> dict:
    """返回指定城市的当前时间。"""
    from datetime import datetime
    import zoneinfo

    timezone_map = {
        "北京": "Asia/Shanghai",
        "东京": "Asia/Tokyo",
        "纽约": "America/New_York",
        "伦敦": "Europe/London",
    }

    tz = timezone_map.get(city, "UTC")
    now = datetime.now(zoneinfo.ZoneInfo(tz))
    return {
        "status": "success",
        "city": city,
        "time": now.strftime("%Y-%m-%d %H:%M:%S"),
        "timezone": tz,
    }

root_agent = Agent(
    model="gemini-2.5-flash",
    name="time_agent",
    description="查询全球城市的当前时间。",
    instruction="""你是一个时间查询助手。
当用户询问某个城市的时间时,使用 get_current_time 工具查询。
用中文回答用户。""",
    tools=[get_current_time],
)

用 Runner 运行 Agent

from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService

# 创建会话服务
session_service = InMemorySessionService()

# 创建 Runner
runner = Runner(
    agent=root_agent,
    session_service=session_service,
    app_name="time_app",
)

# 创建会话
session = await session_service.create_session(
    user_id="user_1",
    app_name="time_app",
)

# 运行 Agent
from google.genai import types

user_message = types.Content(
    role="user",
    parts=[types.Part(text="现在北京几点了?")],
)

async for event in runner.run_async(
    user_id=session.user_id,
    session_id=session.id,
    new_message=user_message,
):
    if event.is_final_response():
        print(event.content.parts[0].text)

工具系统

内置工具

ADK 提供了多种开箱即用的工具:

工具 说明
google_search Google 搜索,获取实时网络信息
code_execution 代码执行环境
VertexAISearchTool Vertex AI 搜索
GoogleCalendarToolset Google 日历操作
BigQueryToolset BigQuery 数据查询

搜索 Agent 示例

from google.adk.agents import Agent
from google.adk.tools import google_search

search_agent = Agent(
    name="search_assistant",
    model="gemini-2.5-flash",
    instruction="""你是一个搜索助手。
使用 Google 搜索来回答用户的问题。
优先引用搜索结果中的信息,并注明来源。""",
    description="一个可以搜索互联网的助手。",
    tools=[google_search],
)

自定义工具

任何 Python 函数都可以作为工具,ADK 会自动从函数签名和 docstring 中提取参数描述:

def calculate_mortgage(
    principal: float,
    annual_rate: float,
    years: int,
) -> dict:
    """计算房贷月供。

    Args:
        principal: 贷款总额(元)
        annual_rate: 年利率(百分比,如 3.5 表示 3.5%)
        years: 贷款年限

    Returns:
        包含月供和总利息的字典
    """
    monthly_rate = annual_rate / 100 / 12
    months = years * 12
    if monthly_rate == 0:
        monthly_payment = principal / months
    else:
        monthly_payment = principal * (
            monthly_rate * (1 + monthly_rate) ** months
        ) / ((1 + monthly_rate) ** months - 1)

    total_payment = monthly_payment * months
    total_interest = total_payment - principal

    return {
        "monthly_payment": round(monthly_payment, 2),
        "total_payment": round(total_payment, 2),
        "total_interest": round(total_interest, 2),
    }

finance_agent = Agent(
    name="finance_agent",
    model="gemini-2.5-flash",
    instruction="你是一个金融助手,帮助用户计算房贷。",
    tools=[calculate_mortgage],
)

MCP 工具

ADK 支持 Model Context Protocol(MCP),可以直接接入 MCP 服务器提供的工具:

from google.adk.tools.mcp_tool import MCPToolset
from mcp import StdioServerParameters

# 连接到 MCP 文件系统服务器
file_tools = MCPToolset(
    connection_params=StdioServerParameters(
        command="npx",
        args=["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
    )
)

file_agent = Agent(
    name="file_agent",
    model="gemini-2.5-flash",
    instruction="你可以读写 /tmp 目录下的文件。",
    tools=[file_tools],
)

多 Agent 编排

层级式编排(子 Agent)

通过 sub_agents 将多个 Agent 组合成层级结构:

from google.adk.agents import LlmAgent, SequentialAgent

# 专家 Agent
greeter = LlmAgent(
    name="greeter",
    model="gemini-2.5-flash",
    instruction="你负责热情地问候用户,用中文打招呼。",
)

task_executor = LlmAgent(
    name="task_executor",
    model="gemini-2.5-flash",
    instruction="你负责执行用户的具体任务请求。",
)

# 协调者 Agent
coordinator = LlmAgent(
    name="coordinator",
    model="gemini-2.5-flash",
    instruction="""你是协调者,根据用户的请求分配给合适的子 Agent。
- 简单打招呼交给 greeter
- 具体任务交给 task_executor""",
    description="协调多个专家 Agent 为用户服务。",
    sub_agents=[greeter, task_executor],
)

顺序执行

from google.adk.agents import SequentialAgent

pipeline = SequentialAgent(
    name="research_pipeline",
    sub_agents=[
        research_agent,   # 步骤 1:研究
        writer_agent,     # 步骤 2:写作
        reviewer_agent,   # 步骤 3:审查
    ],
)

并行执行

from google.adk.agents import ParallelAgent

parallel_analysis = ParallelAgent(
    name="parallel_analysis",
    sub_agents=[
        sentiment_agent,  # 同时分析情感
        summary_agent,    # 同时生成摘要
        keyword_agent,    # 同时提取关键词
    ],
)

循环执行

from google.adk.agents import LoopAgent

refinement_loop = LoopAgent(
    name="refinement_loop",
    max_iterations=3,
    sub_agents=[
        writer_agent,     # 写一版
        reviewer_agent,   # 审查并给出修改建议
    ],
)

复杂编排示例

将多种编排模式组合使用:

# 完整的研究-写作-审查流水线
research_pipeline = SequentialAgent(
    name="research_pipeline",
    sub_agents=[
        # 先并行收集多方面信息
        ParallelAgent(
            name="info_gathering",
            sub_agents=[
                web_search_agent,    # 网络搜索
                database_agent,      # 数据库查询
            ],
        ),
        # 然后循环写作和审查
        LoopAgent(
            name="write_review_loop",
            max_iterations=3,
            sub_agents=[
                writer_agent,
                reviewer_agent,
            ],
        ),
    ],
)

Java 版本示例

ADK 的 Java API 与 Python 保持一致的设计风格:

import com.google.adk.agents.LlmAgent;
import com.google.adk.tools.FunctionTool;

// 定义工具方法
public class HelloTimeAgent {

    public static ToolOutput getCurrentTime(ToolContext ctx, String city) {
        String time = java.time.LocalTime.now().toString();
        return ToolOutput.success(
            "Current time in " + city + " is " + time
        );
    }

    // 定义 Agent
    public static final LlmAgent ROOT_AGENT = LlmAgent.builder()
        .name("hello-time-agent")
        .description("查询城市当前时间")
        .instruction("""
            你是一个时间查询助手。
            使用 'getCurrentTime' 工具查询城市时间。
            """)
        .model("gemini-2.5-flash")
        .tools(FunctionTool.create(HelloTimeAgent.class, "getCurrentTime"))
        .build();
}

运行 Java Agent:

import com.google.adk.runner.Runner;
import com.google.adk.runner.InMemoryRunner;
import com.google.adk.session.Session;
import com.google.genai.types.Content;
import com.google.genai.types.Part;

InMemoryRunner runner = new InMemoryRunner(HelloTimeAgent.ROOT_AGENT);

Session session = runner.sessionService()
    .createSession(runner.appName(), "user1234")
    .blockingGet();

Content userMsg = Content.fromParts(Part.fromText("现在东京几点了?"));

runner.runAsync(
    session.userId(),
    session.id(),
    userMsg,
    RunConfig.builder().build()
)
.subscribe(event -> {
    if (event.isFinalResponse()) {
        System.out.println(event.content().parts().get(0).text());
    }
});

模型无关设计

ADK 虽然对 Gemini 做了深度优化,但设计上支持多种模型后端:

模型 接入方式
Gemini 直接使用,性能最优
Claude 通过 Vertex AI 或 LiteLLM
GPT 系列 通过 LiteLLM 代理
Ollama 本地模型 直接配置 endpoint
vLLM 直接配置 endpoint
Vertex AI 托管模型 原生支持

使用非 Gemini 模型的示例:

from google.adk.agents import Agent
from google.genai import types

# 通过 LiteLLM 接入 Claude
agent = Agent(
    name="claude_agent",
    model="litellm:anthropic/claude-sonnet-4-6",
    instruction="你是一个助手。",
    tools=[my_tool],
)

# 通过 Ollama 接入本地模型
agent = Agent(
    name="local_agent",
    model="ollama:qwen3:14b",
    instruction="你是一个本地运行的助手。",
)

开发者工具

内置 Dev UI

ADK 提供了 Web 界面用于交互式调试:

# 启动开发服务器
adk web

在浏览器中打开后,可以:

  • 与 Agent 实时对话
  • 查看工具调用过程
  • 检查中间状态和事件流

评估工具

# 运行评估
adk eval --config eval_config.json

支持定义测试用例和预期输出,自动评估 Agent 的表现。

部署选项

方式 命令/说明
Cloud Run adk deploy cloud_run
Vertex AI Agent Engine adk deploy vertex
GKE 容器化部署到 Google Kubernetes Engine
Docker 自行构建镜像,部署到任意环境

与其他框架的互操作

ADK 提供了与其他流行框架的桥接工具:

  • LangchainTool:将 LangChain 工具包装为 ADK 工具
  • CrewaiTool:将 CrewAI 工具包装为 ADK 工具
  • MCP 协议:直接连接 MCP 服务器,复用现有工具生态
from google.adk.tools import LangchainTool
from langchain_community.tools import WikipediaQueryRun

# 将 LangChain 工具转为 ADK 工具
wiki_tool = LangchainTool(WikipediaQueryRun())

agent = Agent(
    name="wiki_agent",
    model="gemini-2.5-flash",
    instruction="使用维基百科回答问题。",
    tools=[wiki_tool],
)

A2A 协议

ADK 支持 Agent-to-Agent(A2A)协议,允许不同框架、不同服务上的 Agent 之间相互通信:

┌─────────────┐     A2A Protocol     ┌──────────────┐
│  ADK Agent  │ ◄──────────────────► │ CrewAI Agent │
│  (Python)   │                      │  (Python)    │
└─────────────┘                      └──────────────┘
       ▲                                    ▲
       │ A2A                                │ A2A
       ▼                                    ▼
┌─────────────┐                      ┌──────────────┐
│ LangGraph   │                      │  Remote API  │
│  Agent      │                      │  Agent       │
└─────────────┘                      └──────────────┘

相关链接

常见问题

Google ADK 实战:用代码优先的方式构建 AI Agent 适合什么读者?

Google ADK 实战:用代码优先的方式构建 AI Agent 适合希望系统掌握 Agent 框架实战 的读者,尤其是需要从概念快速过渡到实践的人。页面包含主题摘要、相关阅读和来源链接,便于形成可执行的学习路径。

阅读 Google ADK 实战:用代码优先的方式构建 AI Agent 需要多久?

当前页面预估阅读时长约 17 分钟。建议先读正文结论,再根据“同专题延伸”继续阅读,通常 20 到 40 分钟可以建立完整主题框架。

如何把 Google ADK 实战:用代码优先的方式构建 AI Agent 的内容用于实际项目?

先按正文中的关键概念完成最小可运行示例,再把示例嵌入你当前项目流程。你可以结合来源链接验证细节,并使用同专题文章补齐部署、协作和评估步骤。