微信扫码
添加专属顾问
我要投稿
掌握Google ADK,开启多Agent系统开发新纪元。 核心内容: 1. AI多Agent系统发展趋势及ADK的重要性 2. ADK核心能力:灵活可组合、多Agent架构、模型无关性 3. 实战教程:从环境设置到构建第一个ADK问答Agent
从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如何彻底改变您开发智能系统的方式有一个扎实的理解!
灵活可组合:自由选择组件,结构化组装Agent系统,无模型/方法限制。
多Agent架构:支持Agent间协作、任务委派,实现复杂目标(如专业AI团队)。
模型无关性:兼容多源模型(Gemini/Claude/Llama等),集成Vertex AI与LiteLLM。
工具生态丰富:内置常用工具(搜索/代码执行),支持LangChain等外部库,支持Agent嵌套(分层架构)。
双向流支持:内置音视频流,实现多模态自然交互。
灵活编排:结合结构化工作流(顺序/并行/循环)与LLM动态路由,平衡可靠性与适应性。
让我们深入了解使用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
现在,让我们创建一个可以使用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。
ADK提供了多种与Agent交互的方式。最快的方法是使用CLI或Web UI。要启动Web UI,请运行:
# 使用web界面运行Agent
adk web
这将启动一个带有聊天界面的本地web服务器,您可以在那里与您的Agent交互。Web UI还提供了调试工具,让您可以准确看到底层发生的情况,包括状态转换、工具调用和完整的执行跟踪。
虽然单一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
这个系统的优势在于ADK的自动委派机制。
在接收到用户消息时,LLM使用查询、当前Agent的描述和相关Agent的描述来执行处理。如果它发现另一个Agent更能胜任,就开始进行转移。
例如,如果用户输入"嗨",根Agent识别出"嗨"不是天气查询,并自动将控制权传递给问候Agent。相反,当用户询问天气时,根Agent通过其get_weather工具直接管理它。
这种将复杂系统分解为具有明确角色的专业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"]
对于生产级部署,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可以立即带来价值的实际场景:
构建一个可以搜索公司文档、回答员工问题并执行诸如安排会议或生成报告等操作的多Agent系统。这使您能够利用多个Agent(人力资源、IT、财务等)的力量,同时保持关注点的清晰分离。
构建一个帮助您查找产品、提供个性化推荐并引导您完成结账流程的购物助手。一个Agent可能学习产品属性,一个可能学习客户偏好,第三个可能学习处理购买流程。该系统可以提供流畅的体验,同时保持模块化代码。
构建一个使数据科学家能够探索复杂数据集的Agent系统。一个Agent可以专注于数据清理和准备,另一个可以运行统计分析,第三个可能生成可视化和报告。通过将复杂的数据分析过程分解为由专门Agent处理的离散步骤,可以创建更强大和可维护的系统。
开发一个自适应辅导系统,不同的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+中大型企业
2025-04-23
只需6G显存,就能本地跑的AI视频算法,开源了!
2025-04-23
OpenAI Codex 使用OpenRouter上的免费模型
2025-04-23
又一个牛皮的开源的通用型智能体界面和Manus有99分相似
2025-04-23
超强辅助,Bolt.diy 一步搞定创意建站
2025-04-22
AI新手村:Hugging Face
2025-04-22
6.4K star!轻松搞定专业领域大模型推理,这个知识增强框架绝了!
2025-04-22
mcp-sse-webui可视化实战项目:基于MCP的webui服务,支持连接多个sse服务端(附完整源码)
2025-04-22
008-蹭了个热点,一次对内部普通人的DeepSeek培训课
2025-01-01
2024-07-25
2025-01-21
2024-05-06
2024-09-20
2024-07-20
2024-06-12
2024-07-11
2024-08-13
2024-12-26
2025-04-21
2025-04-19
2025-04-17
2025-04-15
2025-04-13
2025-04-10
2025-04-07
2025-04-03