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

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

从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:核心能力灵活可组合:自由选择组件,结构化组装Agent系统,无模型/方法限制。

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

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

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

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

灵活编排:结合结构化工作流(顺序/并行/循环)与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# 安装ADKpip install google-adk# 验证安装adk --version一个简单的问答Agent现在,让我们创建一个可以使用Google搜索回答问题的基本Agent。这展示了ADK的简单性,同时也展示了它与外部工具的集成:

from google.adk.agents import LlmAgentfrom google.adk.tools import google_search# 定义我们的问答Agentqa_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界面运行Agentadk web这将启动一个带有聊天界面的本地web服务器,您可以在那里与您的Agent交互。Web UI还提供了调试工具,让您可以准确看到底层发生的情况,包括状态转换、工具调用和完整的执行跟踪。

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

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

from google.adk.agents import Agentfrom 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}'."}# 为不同任务定义专业Agentgreeting_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的主要天气Agentroot_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.pyAgent委派如何工作这个系统的优势在于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 agentfrom google.adk.agents import LlmAgenttranslator_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 Toolfrom 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_tooladk_wikipedia_tool = wrap_langchain_tool(wikipedia_tool)# 在ADKAgent中使用from google.adk.agents import LlmAgentresearch_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 AgentEvaluatorevaluator = 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的DockerfileFROM python:3.9-slimWORKDIR /app# 安装依赖COPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txt# 复制Agent代码COPY weather_agent.py .# 暴露端口EXPOSE 8080# 运行AgentCMD ["adk", "server", "--agent", "weather_agent.py", "--port", "8080"]Vertex AIAgent引擎对于生产级部署,ADK与Vertex AIAgent引擎集成,并提供完全托管、可扩展的运行时,其中包含企业级功能,如监控和日志记录:

from google.cloud import aiplatformfrom google.adk.vertex import deploy_to_vertex# Deploy your agent to Vertex AIdeploy_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都提供了创建智能、有用应用所需的构建块,减少努力并提高灵活性。

相关推荐

祥云的简笔画简单又好看(17张)
365bet下注

祥云的简笔画简单又好看(17张)

📅 07-04 👁️ 7449
买辣椒油时,牢记这4大要点,无论什么牌子,都是好的辣椒油!
盘点2022十大图片编辑软件,图文创作者必备工具