从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-envScriptsactivate# 安装ADKpip install google-adk# 验证安装adk –version
一个简单的问答Agent
现在,让我们创建一个可以使用Google搜索回答问题的基本Agent。这展示了ADK的简单性,同时也展示了它与外部工具的集成:
from google.adk.agents import LlmAgentfrom google.adk.tools import googlesearch# 定义我们的问答Agentqaagent = LlmAgent( model="gemini-2.0-flash-exp", # 指定使用哪个LLM name="questionansweragent", # 给我们的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 getweather(city: str) -> dict: print(f"获取天气:{city}") # 模拟天气数据(在生产环境中,您会调用真实的天气API) mockweatherdb = { "newyork": {"status": "success", "report": "纽约的天气晴朗,温度为25°C。"}, "london": {"status": "success", "report": "伦敦多云,温度为15°C。"}, "tokyo": {"status": "success", "report": "东京正在经历小雨,温度为18°C。"}, } citynormalized = city.lower().replace(" ", "") if citynormalized in mockweatherdb: return mockweatherdb[citynormalized] else: return {"status": "error", "errormessage": f"Sorry, I don't have weather information for '{city}'."}# 为不同任务定义专业Agentgreetingagent = Agent( model=LiteLlm(model="anthropic/claude-3-sonnet-20240229"), name="greetingagent", instruction="你是问候Agent。你的唯一任务是向用户提供友好的问候。" "不要参与任何其他对话或任务。", description="处理简单的问候和你好",)farewellagent = Agent( model=LiteLlm(model="anthropic/claude-3-sonnet-20240229"), name="farewellagent", instruction="你是告别Agent。你的唯一任务是提供礼貌的告别信息。" "不要执行任何其他操作。", description="处理简单的告别和再见",)# 定义可以委派给专业Agent的主要天气Agentrootagent = Agent( name="weatheragent", model="gemini-2.0-flash-exp", description="""你是主要天气Agent,协调一个团队。 – 你的主要任务:使用getweather工具提供天气。处理其'status'响应('report'或'errormessage')。 – 委派规则: – 如果用户给出简单问候(如'嗨','你好'),委派给greetingagent。 – 如果用户给出简单告别(如'再见','下次见'),委派给farewellagent。 – 使用getweather自行处理天气请求。 – 对于其他查询,清楚说明你是否无法处理它们。""", tools=[getweather], subagents=[greetingagent, farewellagent])# 保存为weatheragent.py# 使用以下命令运行:adk web –agent weatheragent.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 translatetext(text: str, targetlanguage: str) -> str: """Translates the provided text into the target language. Args: text: The text to translate targetlanguage: 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 mocktranslations = { ('hello world', 'es'): 'hola mundo', ('hello world', 'fr'): 'bonjour le monde', ('hello world', 'ja'): 'こんにちは世界', } key = (text.lower(), targetlanguage.lower()) if key in mocktranslations: return mocktranslations[key] else: return f"Translation not available for '{text}' to {targetlanguage}"# Using this tool with an agentfrom google.adk.agents import LlmAgenttranslatoragent = LlmAgent( model="gemini-2.0-flash-exp", name="translatoragent", description="A helpful assistant that can translate text between languages.", instruction="You are a translation assistant. Use the translatetext tool to translate text into different languages.", tools=[translatetext],)
使用第三方集成
除了内置功能外,ADK还支持与流行的AI/ML框架和库集成。
与LangChain集成的例子from langchain.tools import Toolfrom langchain.utilities import WikipediaAPIWrapper# 创建一个用于Wikipedia的LangChain工具wikipedia = WikipediaAPIWrapper()wikipediatool = Tool( name="wikipedia", description="在Wikipedia上搜索信息", func=lambda query: wikipedia.run(query))# 将其包装以供ADK使用from google.adk.tools import wraplangchaintooladkwikipediatool = wraplangchaintool(wikipediatool)# 在ADKAgent中使用from google.adk.agents import LlmAgentresearchagent = LlmAgent( model="gemini-2.0-flash-exp", name="researchagent", description="一个可以在Wikipedia上查找信息的研究助手。", instruction="你是一个研究助手。使用Wikipedia查找用户询问的主题信息。", tools=[adkwikipediatool],)
这也意味着有更多灵活性来整合来自不同生态系统的工具。无论是可以与ADK原生集成,还是来自其他框架,您都可以使用最适合任何类型用途的工具。
系统评估
ADK带有内置的评估框架,使您能够使用现成的数据集彻底评估您的Agent。这对于可维护性和在发布前捕获回归至关重要。
// 示例 evaluation.test.json[ { "input": "纽约的天气怎么样?", "expectedoutput": "纽约的天气晴朗,温度为25°C。" }, { "input": "你好!", "expectedoutput": "嗨!我今天能帮您什么忙?" }]
您可以通过编程或使用ADK CLI运行评估:
通过CLI运行评估adk eval –agent-file weatheragent.py –test-file evaluation.test.json# 或通过编程方式from google.adk.eval import AgentEvaluatorevaluator = AgentEvaluator(agent=rootagent)results = evaluator.evaluate("evaluation.test.json")print(f"准确率: {results.accuracy * 100}%")for testcase, result in zip(results.testcases, results.results): print(f"测试: {testcase.input}") print(f"预期: {testcase.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 weatheragent.py .# 暴露端口EXPOSE 8080# 运行AgentCMD ["adk", "server", "–agent", "weatheragent.py", "–port", "8080"]
Vertex AIAgent引擎
对于生产级部署,ADK与Vertex AIAgent引擎集成,并提供完全托管、可扩展的运行时,其中包含企业级功能,如监控和日志记录:
from google.cloud import aiplatformfrom google.adk.vertex import deploytovertex# Deploy your agent to Vertex AIdeployresponse = deploytovertex( agentfile="weatheragent.py", projectid="your-gcp-project", displayname="Weather Assistant", location="us-central1",)print(f"Agent deployed to Vertex AI: {deployresponse.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 的人。





