练习项目:多智能体天气查询系统
一、项目背景
1.0 技术栈
| 技术 | 版本 | 说明 |
|---|---|---|
| Python | 3.12+ | 编程语言 |
| uv | 0.10+ | Python 包管理器(虚拟环境) |
| openai-agents | 0.12.5 | OpenAI Agents SDK,多智能体框架 |
| openai | - | OpenAI API 客户端(兼容 DeepSeek) |
| pydantic | - | 数据验证和设置管理 |
| python-dotenv | 1.2.2 | 环境变量管理 |
| DeepSeek API | - | LLM 提供商(R1 推理模型、V3 对话模型) |
虚拟环境管理(uv):
bash
# 创建虚拟环境
uv venv
# 安装依赖
uv pip install openai-agents python-dotenv pydantic
# 运行脚本
uv run python xxx.py
# 运行模块
uv run python -m module_name
API 配置(.env):
bash
API_KEY=your-api-key
BASE_URL=https://api.qnaigc.com/v1 # 或其他兼容 API 地址
系统架构
用户输入: "北京今天天气怎么样?"
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 规划智能体【系统管理器】(DeepSeek-R1) │
│ 分析用户意图、提取城市名、确定调用策略 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 分配智能体【服务管理器】(DeepSeek-V3) │
│ 调用天气查询工具 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 天气查询工具 │
│ 返回指定城市的天气信息 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 格式化智能体【输出适配器】 │
│ 根据用户语言格式化输出(中文/英文) │
└─────────────────────────────────────────────────────────────┘
│
▼
返回格式化后的天气信息
项目结构要求
weather_agent/
├── __init__.py
├── agents/
│ ├── __init__.py
│ ├── planner.py # 规划智能体 (deepseek-r1)
│ ├── dispatcher.py # 分配智能体 (deepseek-v3)
│ └── formatters.py # 格式化智能体
├── tools/
│ ├── __init__.py
│ └── weather_tools.py # 天气查询工具
├── workflow.py # 工作流(支持流式输出)
├── models.py # 数据模型
└── demo.py # 演示入口
技术要求
-
模型选择
- 规划智能体使用
deepseek-r1 - 其他智能体使用
deepseek-v3
- 规划智能体使用
-
环境配置
- 使用
.env文件配置 API_KEY 和 BASE_URL
- 使用
-
流式输出
- 参考
knowledge_agent/workflow.py实现流式输出
- 参考
-
工具实现
- 使用
@function_tool装饰器 - 实现天气查询功能(可使用模拟数据)
- 使用
-
多语言支持
- 中文查询返回中文天气信息
- 英文查询返回英文天气信息
功能要求
- 城市识别:从用户输入中提取城市名称
- 天气查询:查询指定城市的天气
- 多语言输出:根据用户语言返回对应格式
- 错误处理:对无效城市给出友好提示
验收标准
- 运行
python -m weather_agent.demo - 输入测试:
- "北京今天天气怎么样?" → 返回中文天气
- "How's the weather in Tokyo?" → 返回英文天气
- 实现流式输出,实时显示各阶段进度
扩展挑战(可选)
- 支持多天预报查询
- 支持温度单位切换(摄氏度/华氏度)
- 添加更多天气信息(湿度、风力、空气质量等)
- 使用真实的天气 API(如 OpenWeatherMap)
参考资料
multi_agent_coordinator/- 完整参考实现knowledge_agent/workflow.py- 流式输出参考.env- 环境配置参考