# 谷歌ADK实战:5分钟搭建你的第一个多智能体天气查询助手(附完整代码)
最近在开发者社区里,谷歌开源的Agent Development Kit(ADK)成了热门话题。作为一个长期关注多智能体系统的技术实践者,我发现ADK真正解决了我们在构建复杂代理应用时的痛点——它把原本需要数百行代码才能实现的智能体协作逻辑,简化成了几行清晰的Python代码。今天,我就带大家用5分钟时间,从零开始构建一个能处理天气查询和日常问候的多智能体系统。
这个天气助手虽然简单,但包含了ADK最核心的三个概念:工具定义、代理协作和任务委派。我们会用模拟天气数据库来避免调用真实API的复杂度,让你能立即看到运行效果。最重要的是,所有代码都是即插即用的——你可以直接复制到自己的开发环境运行。
1. 环境准备与ADK安装
在开始编码前,我们需要准备好Python环境和ADK库。推荐使用Python 3.10或更高版本,这是ADK官方支持最稳定的运行环境。
# 创建并激活虚拟环境(可选但推荐) python -m venv adk_env source adk_env/bin/activate # Linux/Mac adk_envScriptsactivate # Windows # 安装ADK核心库 pip install google-adk
如果你遇到网络问题,可以尝试使用国内镜像源:
pip install google-adk -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,验证是否成功:
from google.adk import __version__ print(f"ADK版本: {__version__}")
> 提示:ADK目前仍在快速迭代中,建议定期更新到最新版本以获得**体验。可以使用pip install --upgrade google-adk命令升级。
2. 构建天气查询工具
工具(Tool)是ADK中最基础的概念,它定义了智能体能执行的具体操作。我们先创建一个模拟天气查询工具,它会返回预设城市的天气数据,而不是调用真实API。
from typing import Dict def get_weather(city: str) -> Dict: """模拟天气查询工具 参数: city: 城市名称(不区分大小写和空格) 返回: 包含状态和天气报告的字典 """ print(f"[工具调用] 正在查询{city}的天气...") # 模拟天气数据库 weather_db = { "beijing": {"status": "success", "report": "北京今天晴转多云,气温25-32°C"}, "shanghai": {"status": "success", "report": "上海当前阴天,局部有雨,气温28°C"}, "guangzhou": {"status": "success", "report": "广州持续高温预警,气温34°C"}, "shenzhen": {"status": "success", "report": "深圳今日雷阵雨,出门请带伞"}, "hangzhou": {"status": "success", "report": "杭州空气质量优,气温26°C"} } # 标准化城市名称(去除空格并转为小写) normalized_city = city.lower().replace(" ", "") if normalized_city in weather_db: return weather_db[normalized_city] else: return { "status": "error", "error_message": f"找不到{city}的天气信息,请检查城市名称" }
这个工具的设计有几个关键点:
- 类型注解:明确标注输入输出类型,这是ADK工具的**实践
- 标准化处理:对输入城市名称进行规范化,提高匹配成功率
- 结构化返回:使用固定格式的字典,包含状态字段和具体数据
> 注意:在实际项目中,你可以轻松将这个模拟工具替换为真实天气API调用,接口定义保持不变。
3. 创建专业问候代理
多智能体系统的优势在于不同代理各司其职。我们先创建一个专门处理问候语的代理,它只做一件事——回复友好的问候。
from google.adk.agents import Agent greeting_agent = Agent( name="greeting_agent", description="专门处理问候语的代理,如'你好'、'早上好'等", instruction=""" 你是一个专业的问候代理,你的唯一职责是: 1. 识别用户输入的问候语(如"你好"、"Hi"、"早上好"等) 2. 返回友好、自然的问候回应 3. 不处理任何非问候相关内容 回答示例: - "你好!今天有什么可以帮您的吗?" - "早上好!祝您有愉快的一天!" - "Hi there! 我是您的问候小助手~" """, model="gemini-1.5-flash" # 使用轻量级模型即可 )
这个代理的配置体现了ADK的几个设计理念:
- 单一职责:每个代理只做好一件事
- 明确指令:通过instruction字段精确控制代理行为
- 模型适配:简单任务使用小模型,节省资源
4. 构建主天气代理
现在我们来创建系统的核心——天气代理。它将负责协调所有功能:直接处理天气查询,或将特定任务委派给其他代理。
from google.adk.agents import Agent weather_agent = Agent( name="weather_agent", description=""" 主天气查询代理,具备以下能力: 1. 使用get_weather工具查询城市天气 2. 识别问候语并转交给greeting_agent 3. 处理工具返回的成功/错误状态 """, instruction=""" 你是一个智能天气助手,请遵循以下规则: [天气查询] - 当用户询问城市天气时,调用get_weather工具 - 如果工具返回status='success',直接报告天气 - 如果status='error',友好地告知用户错误信息 [问候处理] - 当检测到问候语(如"你好"、"Hi")时,立即转交给greeting_agent - 不要自行回复问候 [其他情况] - 明确告知用户你只能处理天气查询 """, model="gemini-1.5-pro", tools=[get_weather], sub_agents=[greeting_agent] )
关键配置解析:
- 工具绑定:通过tools参数关联我们之前创建的天气查询工具
- 子代理:sub_agents列表包含可委派任务的代理
- 模型选择:主代理使用更强大的模型处理复杂逻辑
5. 运行与测试系统
完成代理配置后,我们可以立即开始交互测试。ADK提供了多种交互方式,这里我们使用最简单的控制台模式。
from google.adk.runners import ConsoleRunner # 创建控制台运行器 runner = ConsoleRunner(weather_agent) # 启动交互 print("天气助手已启动!输入'退出'结束对话") runner.start()
现在你可以尝试各种输入:
用户: 你好 助手: 你好!今天想查询哪个城市的天气呢? 用户: 北京天气怎么样? 助手: 北京今天晴转多云,气温25-32°C 用户: 纽约的天气 助手: 找不到纽约的天气信息,请检查城市名称 用户: 退出
> 提示:在开发过程中,可以使用ADK的Web界面实时查看代理的决策过程。启动命令:adk web --agent weather_agent
6. 扩展更多功能
基础系统运行后,我们可以轻松扩展更多代理。比如添加一个专门处理告别的代理:
farewell_agent = Agent( name="farewell_agent", description="处理告别语的专用代理,如'再见'、'拜拜'", instruction=""" 你只做一件事:当用户说再见时,回复礼貌的告别语。 示例回复: - "再见!祝您生活愉快!" - "期待再次为您服务,拜拜!" """, model="gemini-1.5-flash" ) # 更新主代理配置 weather_agent.sub_agents.append(farewell_agent)
还可以添加更多工具,比如城市空气质量查询:
def get_air_quality(city: str) -> Dict: # 模拟实现... return {"status": "success", "aqi": 65, "level": "良"} # 更新主代理工具集 weather_agent.tools.append(get_air_quality)
这种模块化扩展正是ADK的强大之处——无需修改现有代码,就能不断增加新功能。
7. 部署与生产化建议
当开发完成后,ADK提供了多种部署选项。最简单的方案是将代理打包为Docker容器:
# Dockerfile示例 FROM python:3.10-slim WORKDIR /app COPY . . RUN pip install google-adk CMD ["adk", "serve", "--agent", "weather_agent", "--port", "8080"]
构建并运行容器:
docker build -t weather-assistant . docker run -p 8080:8080 weather-assistant
对于生产环境,建议:
- 添加认证:通过ADK的Auth模块保护API端点
- 监控集成:接入Prometheus等监控工具
- 日志收集:配置结构化日志记录所有交互
- 性能优化:对高频工具实现缓存机制
8. 调试与性能优化技巧
在实际使用中,你可能会遇到需要调试的情况。ADK提供了几种有用的调试方式:
查看详细执行日志:
adk run --agent weather_agent --debug
性能分析工具:
from google.adk.debug import profile_agent stats = profile_agent( weather_agent, test_inputs=["北京天气", "你好", "上海空气质量"] ) print(stats.response_times) # 查看各请求耗时
常见性能优化手段:
| 优化方向 | 具体措施 | 预期效果 |
|---|---|---|
| 模型选择 | 简单任务使用轻量模型 | 降低30-50%响应时间 |
| 工具调用 | 添加缓存机制 | 减少重复计算 |
| 代理数量 | 合并相似功能代理 | 降低协调开销 |
| 批量处理 | 使用adk.batch接口 | 提高吞吐量 |
我在实际项目中发现,最影响用户体验的往往是工具调用的网络延迟。一个实用的技巧是为工具添加本地缓存:
from functools import lru_cache @lru_cache(maxsize=100) def get_weather_cached(city: str) -> Dict: return get_weather(city) # 原始工具实现 # 更新代理配置使用缓存版本 weather_agent.tools = [get_weather_cached]
这个简单的改动能让重复查询的响应时间从秒级降到毫秒级。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/259171.html