支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


从零到多智能体:Google Agent开发套件(ADK)入门指南

发布日期:2025-04-23 13:06:55 浏览次数: 1555 作者:李孟聊AI
推荐语

掌握Google ADK,开启多Agent系统开发新纪元。

核心内容:
1. AI多Agent系统发展趋势及ADK的重要性
2. ADK核心能力:灵活可组合、多Agent架构、模型无关性
3. 实战教程:从环境设置到构建第一个ADK问答Agent

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

从OpenAI的浏览器和代码解释功能,到Anthropic的Claude,随着AI从单一Agent模型转向复杂的协作多Agent系统,我们正经历一场惊险旅程。

然而,开发这些复杂系统传统上需要深厚的AI知识、大量开发时间和复杂的协调工作。

直到谷歌在2025年Google Cloud NEXT大会上推出了Agent开发套件(Agent Development Kit, ADK)。ADK是一个开源框架,使用户能够快速构建Agent和多Agent系统,覆盖直观和高级应用场景。

ADK是Agent技术民主化运动中的重要一步。

它为开发者提供了广泛的工具和技术,用于实施、测试和部署能够独立解决复杂任务或与其他Agent协作的智能Agent。

ADK特别令人兴奋的是,它是支持谷歌产品内部Agent的同一框架,如Agentspace和谷歌客户参与套件(Google Customer Engagement Suite, CES)。

在本文中,我们将关注ADK的实用方面,以及开发者如何使用这个工具包实现强大的多Agent应用。

我们将通过构建您的第一个Agent的过程,探索可用工具和模型的丰富生态系统,并突出ADK可以立即产生影响的实际应用。

到最后,您将对ADK如何彻底改变您开发智能系统的方式有一个扎实的理解!

了解ADK:核心能力

  1. 灵活可组合:自由选择组件,结构化组装Agent系统,无模型/方法限制。

  2. 多Agent架构:支持Agent间协作、任务委派,实现复杂目标(如专业AI团队)。

  3. 模型无关性:兼容多源模型(Gemini/Claude/Llama等),集成Vertex AI与LiteLLM。

  4. 工具生态丰富:内置常用工具(搜索/代码执行),支持LangChain等外部库,支持Agent嵌套(分层架构)。

  5. 双向流支持:内置音视频流,实现多模态自然交互。

  6. 灵活编排:结合结构化工作流(顺序/并行/循环)与LLM动态路由,平衡可靠性与适应性。

构建ADKAgent

让我们深入了解使用ADK构建的实际示例。理解ADK强大功能的最简单方法是创建一个基本Agent。我们将从一个能够使用Google搜索回答查询的简单问答Agent开始。

设置您的环境

在编写任何代码之前,您需要设置开发环境。ADK是一个Python框架,因此您需要安装Python 3.8+。以下是开始的方法:

# 创建虚拟环境
python -m venv adk-env


# 激活环境
source adk-env/bin/activate  # 在Windows上: adk-env\Scripts\activate


# 安装ADK
pip install google-adk


# 验证安装
adk --version

一个简单的问答Agent

现在,让我们创建一个可以使用Google搜索回答问题的基本Agent。这展示了ADK的简单性,同时也展示了它与外部工具的集成:

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


# 定义我们的问答Agent
qa_agent = LlmAgent(
    model="gemini-2.0-flash-exp",  # 指定使用哪个LLM
    name="question_answer_agent",  # 给我们的Agent一个唯一名称
    description="一个能够使用搜索回答问题的有用助手Agent。",
    instruction="""使用Google搜索回应用户需要事实信息的查询。
    在回应中保持简洁、直接和切中要点。""",
    tools=[google_search],  # 提供搜索工具
)


# 将此保存为名为agent.py的文件
# 您可以使用以下命令运行它:adk web

这段代码创建了一个由Gemini 2.0 Flash驱动的简单Agent,它可以搜索网络来回答问题。ADK的简单性很明显——只需几行代码,我们就创建了一个具有网络搜索功能的Agent。

Agent交互

ADK提供了多种与Agent交互的方式。最快的方法是使用CLI或Web UI。要启动Web UI,请运行:

# 使用web界面运行Agent
adk web

这将启动一个带有聊天界面的本地web服务器,您可以在那里与您的Agent交互。Web UI还提供了调试工具,让您可以准确看到底层发生的情况,包括状态转换、工具调用和完整的执行跟踪。

构建多Agent系统

虽然单一Agent很有用,但ADK的真正优势在于构建专业Agent协作的多Agent系统。现在让我们构建一个更灵活、更高级的设置,其中多个Agent能够将对话的各个部分委派给彼此。

天气助手系统

我们将构建一个拥有三个专业Agent的天气助手系统:主要天气Agent将回答天气查询,问候Agent将响应欢迎消息,告别Agent将响应告别消息。在适当的情况下,主Agent将任务转交给专业Agent。以下是说明这些Agent如何设置的示例Python代码:

from google.adk.agents import Agent
from google.litellm import LiteLlm


# 首先,让我们定义一个获取天气数据的工具
def get_weather(city: str) -> dict:

    print(f"获取天气:{city}")


    # 模拟天气数据(在生产环境中,您会调用真实的天气API)
    mock_weather_db = {
        "newyork": {"status""success""report""纽约的天气晴朗,温度为25°C。"},
        "london": {"status""success""report""伦敦多云,温度为15°C。"},
        "tokyo": {"status""success""report""东京正在经历小雨,温度为18°C。"},
    }


    city_normalized = city.lower().replace(" """)


    if city_normalized in mock_weather_db:
        return mock_weather_db[city_normalized]
    else:
        return {"status""error""error_message"f"Sorry, I don't have weather information for '{city}'."}


# 为不同任务定义专业Agent
greeting_agent = Agent(
    model=LiteLlm(model="anthropic/claude-3-sonnet-20240229"),
    name="greeting_agent",
    instruction="你是问候Agent。你的唯一任务是向用户提供友好的问候。"
               "不要参与任何其他对话或任务。",
    description="处理简单的问候和你好",
)


farewell_agent = Agent(
    model=LiteLlm(model="anthropic/claude-3-sonnet-20240229"),
    name="farewell_agent",
    instruction="你是告别Agent。你的唯一任务是提供礼貌的告别信息。"
                "不要执行任何其他操作。",
    description="处理简单的告别和再见",
)


# 定义可以委派给专业Agent的主要天气Agent
root_agent = Agent(
    name="weather_agent"
    model="gemini-2.0-flash-exp",
    description="""你是主要天气Agent,协调一个团队。
    - 你的主要任务:使用`get_weather`工具提供天气。处理其'status'响应('report'或'error_message')。
    - 委派规则:
      - 如果用户给出简单问候(如'嗨','你好'),委派给`greeting_agent`。
      - 如果用户给出简单告别(如'再见','下次见'),委派给`farewell_agent`。
      - 使用`get_weather`自行处理天气请求。
      - 对于其他查询,清楚说明你是否无法处理它们。"""
,
    tools=[get_weather],
    sub_agents=[greeting_agent, farewell_agent]
)


# 保存为weather_agent.py
# 使用以下命令运行:adk web --agent weather_agent.py

Agent委派如何工作

这个系统的优势在于ADK的自动委派机制。

在接收到用户消息时,LLM使用查询、当前Agent的描述和相关Agent的描述来执行处理。如果它发现另一个Agent更能胜任,就开始进行转移。

例如,如果用户输入"嗨",根Agent识别出"嗨"不是天气查询,并自动将控制权传递给问候Agent。相反,当用户询问天气时,根Agent通过其get_weather工具直接管理它。

这种将复杂系统分解为具有明确角色的专业Agent的能力使系统更易于维护和调试。这允许每个Agent专注于做好一件事,而不是试图处理每一种可能的交互。

工具生态系统:扩展Agent能力

Agent需要工具来与世界互动并执行有用的任务。ADK提供了丰富的工具生态系统,可以显著扩展您的Agent能力。让我们探索一些工具如何增强您的Agent的实际例子。

内置工具

ADK带有几个可以立即使用的内置工具:

  • Google搜索:访问网络信息

  • 代码执行:安全运行Python代码

  • 文件操作:读取、写入和操作文件

  • HTTP请求:进行API调用并检索数据

创建自定义工具

ADK促进自定义工具生产的能力是其优势之一。本质上,工具只是一个带有描述性文档字符串的Python函数。例如,让我们构建一个在两种语言之间翻译文本的自定义工具:

def translate_text(text: str, target_language: str) -> str:
    """Translates the provided text into the target language.

    Args:
        text: The text to translate
        target_language: The language code to translate to (e.g., 'es', 'fr', 'ja')

    Returns:
        The translated text or an error message
    """
    # In a real application, you'd call a translation API here
    # For this example, we'll use a simple mock
    mock_translations = {
        ('hello world', 'es'): 'hola mundo',
        ('hello world', 'fr'): 'bonjour le monde',
        ('hello world', 'ja'): 'こんにちは世界',
    }

    key = (text.lower(), target_language.lower())
    if key in mock_translations:
        return mock_translations[key]
    else:
        return f"Translation not available for '{text}' to {target_language}"


# Using this tool with an agent
from google.adk.agents import LlmAgent


translator_agent = LlmAgent(
    model="gemini-2.0-flash-exp",
    name="translator_agent",
    description="A helpful assistant that can translate text between languages.",
    instruction="You are a translation assistant. Use the translate_text tool to translate text into different languages.",
    tools=[translate_text],
)

使用第三方集成

除了内置功能外,ADK还支持与流行的AI/ML框架和库集成。

# 与LangChain集成的例子
from langchain.tools import Tool
from langchain.utilities import WikipediaAPIWrapper


# 创建一个用于Wikipedia的LangChain工具
wikipedia = WikipediaAPIWrapper()
wikipedia_tool = Tool(
    name="wikipedia",
    description="在Wikipedia上搜索信息",
    func=lambda query: wikipedia.run(query)
)


# 将其包装以供ADK使用
from google.adk.tools import wrap_langchain_tool
adk_wikipedia_tool = wrap_langchain_tool(wikipedia_tool)


# 在ADKAgent中使用
from google.adk.agents import LlmAgent


research_agent = LlmAgent(
    model="gemini-2.0-flash-exp",
    name="research_agent",
    description="一个可以在Wikipedia上查找信息的研究助手。",
    instruction="你是一个研究助手。使用Wikipedia查找用户询问的主题信息。",
    tools=[adk_wikipedia_tool],
)

这也意味着有更多灵活性来整合来自不同生态系统的工具。无论是可以与ADK原生集成,还是来自其他框架,您都可以使用最适合任何类型用途的工具。

系统评估

ADK带有内置的评估框架,使您能够使用现成的数据集彻底评估您的Agent。这对于可维护性和在发布前捕获回归至关重要。

// 示例 evaluation.test.json
[
  {
    "input": "纽约的天气怎么样?",
    "expected_output": "纽约的天气晴朗,温度为25°C。"
  },
  {
    "input": "你好!",
    "expected_output": "嗨!我今天能帮您什么忙?"
  }
]

您可以通过编程或使用ADK CLI运行评估:

# 通过CLI运行评估
adk eval --agent-file weather_agent.py --test-file evaluation.test.json
# 或通过编程方式
from google.adk.eval import AgentEvaluator


evaluator = AgentEvaluator(agent=root_agent)
results = evaluator.evaluate("evaluation.test.json")
print(f"准确率: {results.accuracy * 100}%")
for test_case, result in zip(results.test_cases, results.results):
    print(f"测试: {test_case.input}")
    print(f"预期: {test_case.expected_output}")
    print(f"实际: {result.output}")
    print(f"通过: {result.passed}")
    print("---")

部署选项

ADK提供了多种将Agent部署到生产环境的选项:

容器部署

您可以将ADKAgent容器化,部署到任何托管Docker的地方:

# ADKAgent的Dockerfile
FROM python:3.9-slim


WORKDIR /app


# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt


# 复制Agent代码
COPY weather_agent.py .


# 暴露端口
EXPOSE 8080


# 运行Agent
CMD ["adk", "server", "--agent", "weather_agent.py", "--port", "8080"]

Vertex AIAgent引擎

对于生产级部署,ADK与Vertex AIAgent引擎集成,并提供完全托管、可扩展的运行时,其中包含企业级功能,如监控和日志记录:

from google.cloud import aiplatform
from google.adk.vertex import deploy_to_vertex


# Deploy your agent to Vertex AI
deploy_response = deploy_to_vertex(
    agent_file="weather_agent.py",
    project_id="your-gcp-project",
    display_name="Weather Assistant",
    location="us-central1",
)


print(f"Agent deployed to Vertex AI: {deploy_response.resource_name}")

这种部署方法对于需要处理大量流量的企业应用特别有益,同时确保可靠性和性能。

实际应用

ADK的灵活性使其适用于各种实际应用场景。让我们探索几个ADK可以立即带来价值的实际场景:

1. 企业知识助手

构建一个可以搜索公司文档、回答员工问题并执行诸如安排会议或生成报告等操作的多Agent系统。这使您能够利用多个Agent(人力资源、IT、财务等)的力量,同时保持关注点的清晰分离。

2. 电子商务购物助手

构建一个帮助您查找产品、提供个性化推荐并引导您完成结账流程的购物助手。一个Agent可能学习产品属性,一个可能学习客户偏好,第三个可能学习处理购买流程。该系统可以提供流畅的体验,同时保持模块化代码。

3. 数据分析工作流

构建一个使数据科学家能够探索复杂数据集的Agent系统。一个Agent可以专注于数据清理和准备,另一个可以运行统计分析,第三个可能生成可视化和报告。通过将复杂的数据分析过程分解为由专门Agent处理的离散步骤,可以创建更强大和可维护的系统。

4. 教育辅导员

开发一个自适应辅导系统,不同的Agent处理不同的学科或学习风格。协调员Agent可以评估学生的需求并将他们分配给合适的专业辅导员。这种方法允许大规模个性化教育,每个业务部分都专注于其卓越领域。

结论

谷歌的Agent开发套件在使多AgentAI系统对开发者可访问方面代表了重要的一步。

通过提供内置工具用于构建、测试和部署Agent的结构化框架,ADK消除了许多传统上使Agent开发变得具有挑战性的障碍。

ADK的实际好处很明显:通过高级抽象加快开发,通过内置评估工具实现更可靠的系统,以及适应不同需求的灵活部署选项。

创建能够有效协作的模块化、专业Agent的能力为各行业的AI应用开辟了新的可能性。

随着AI格局继续向更多Agent系统发展,像ADK这样的框架将在民主化这些技术的访问方面发挥关键作用。

无论您是构建简单的助手还是复杂的多Agent系统,ADK都提供了创建智能、有用应用所需的构建块,减少努力并提高灵活性。

本文同步自知识星球《AI Disruption》

我是Substack和Medium顶级编辑。还是独立开发。

星球里面分享AI趋势和国外数字营销。

星球非免费。定价99元/年,0.27元/天。

  • 一是运行有成本,我希望它能自我闭环,这样才能长期稳定运转;

  • 二是对人的挑选,鱼龙混杂不是我想要的,希望找到关注和热爱 AI 的人。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询