基于 Qwen 的大型模型智能旅行规划助手
个性化行程定制、景点推荐、路线优化及深入思考
快速开始 · 功能特性 · 项目结构 · 文档 · 更新日志
</div>智能旅行规划代理整合了大型语言模型(LLM)、工具调用、内存管理和可视化能力。该系统基于 Qwen,并结合 MCP 协议、Tavily 搜索和本地 RAG 检索,为用户提供实用的旅行路线规划、景点推荐以及互动地图显示服务。
# 进入项目
cd ai
# 创建并激活虚拟环境(建议命名为 .venv)
py -3.10 -m venv .venv
. .\.venv\Scripts\Activate.ps1
# 升级 pip 并安装依赖
python -m pip install --upgrade pip
pip install -r ..\requirements.txt
# 如果存在 .env.example,可以复制:
# Copy-Item -Path .env.example -Destination .env
# 如果不存在,请新建 .env 并填写:
# DASHSCOPE_API_KEY=<你的通义千问密钥>
# TAVILY_API_KEY=<你的Tavily密钥>
# GAODE_API_KEY=<你的高德地图密钥>
# (可选)DEFAULT_MODEL=qwen-max
# (可选)DEEP_THINKING_MODEL=qwen-plus
# 从项目根目录启动
python .\main_gradio.py
| 功能 | 描述 | 状态 |
|---|---|---|
| 智能对话 | 基于 Qwen 的自然语言交互 | ✅ |
| 深度思考 | 开启 qwen plus 进行复杂推理 | ✅ |
| 在线搜索 | Tavily 实时搜索最新信息 | ✅ |
| 地图服务 | 高德地图(通过 MCP 协议)POI 搜索和路线规划 | ✅ |
| 可视化 | 生成 HTML 地图和数据图表 | ✅ |
| RAG 搜索 | 本地旅游知识库查询 | ✅ |
| 代码执行 | 安全的 Python 代码沙箱 | ✅ |
| 文件生成 | PDF/Excel 行程文件导出 | ✅ |
启动深度思考后,系统会:
长期记忆:
短期记忆:
temp_visualizations/*.html,前端直接加载显示)关键实现点(来自)main_gradio.py:
qwen-plus / qwen-maxtemp_visualizations/*.html 地图和图像 URLCURRENT_USER_ID 用于可视化和文件归属d:\ai\
├── main_gradio.py # Gradio Web 界面入口
├── requirements.txt # 依赖库清单
├── chat_agent_qwen/ # 核心 Agent 模块
│ ├── prompts/
│ │ └── system_prompts.py # 系统提示词库
│ ├── agent_self/
│ │ ├── agent.py # 主 Agent 类
│ │ └── chat_agent_qwen_3_max.py # Qwen 模型封装
│ ├── agent_memory/
│ │ └── memory.py # 记忆管理器
│ ├── agent_tools/
│ │ ├── tools.py # 工具集入口(地图/搜索/可视化等)
│ │ ├── rag_tool.py # RAG 检索工具
│ │ └── Tavilysearch_tool.py # Tavily 搜索封装
│ ├── agent_mcp/
│ │ └── agent_mcp_gaode.py # 高德地图 MCP 客户端
│ ├── RAG_agent/
│ │ └── rag_engine.py # FAISS 向量检索
│ └── ICL_agent/
│ └── icl_agent.py # 少样本学习
├── md_file/ # 文档集合(本 README 所在)
│ ├── README.md # 项目说明(本文件)
│ ├── 快速开始指南.md
│ ├── 改进完成报告.md
└── temp_visualizations/ # 临时可视化文件
├── *.html # 地图 HTML
└── *.png # 图表图片
md_file/ 目录 API 和提示词优化文档待补充更多依赖,请参阅 ../requirements.txt。
用户: 帮我规划从深圳技术大学到广东海洋大学的路线
助手:
🚗 路线规划如下:
**方式一: 高铁(推荐)**
- 深圳坪山站 → 湛江西站
- 车程: 约3.5小时
- 票价: 二等座约150元
- 到达后打车20分钟到校
**方式二: 自驾**
- 全程: 约500公里
- 耗时: 约6小时
- 路线: 沈海高速(G11)
[附带交互式地图展示]
用户: (开启深度思考) 帮我规划北京到杭州的三日游,预算5000元
助手:
💭 思考: 分析行程需求...北京到杭州直线距离约1100公里,建议高铁往返,
单程耗时约5小时,往返预算约1000元...
💭 思考: 评估景点方案...杭州主要景点包括西湖(免费)、灵隐寺(门票75)、
宋城千古情(门票300)...综合考虑时间和预算...
💭 结论: 推荐"经典文化游"路线,总预算约4800元
**Day 1: 抵达 + 西湖游**
- 上午: 北京南 → 杭州东 (高铁5小时, 500元)
- 下午: 西湖景区(断桥、苏堤、雷峰塔)
- 晚上: 入住西湖附近酒店(300元)
...
[详细行程 + 交通 + 住宿 + 美食推荐]
编辑 chat_agent_qwen/prompts/system_prompts.py:
# 修改对话风格
CHAT_RESPONSE_SYSTEM_PROMPT = """
你是一个专业且幽默的旅行助手...
[自定义您的提示词]
"""
ICL_FEW_SHOT_EXAMPLES.append({
"input": "你的问题示例",
"output": "期望的回答示例"
})
在 .env 中间:
DEFAULT_MODEL=qwen-max
DEEP_THINKING_MODEL=qwen-plus
MAX_HISTORY_LENGTH=100
确认虚拟环境已激活,重新安装依赖(在项目根目录下):
pip install -r .\requirements.txt --force-reinstall
</details>
<details>
<summary><b>Q: API 调用失败</b></summary>
检查:
.env 文件是否存在且配置正确temp_visualizations 目录权限在当前会话中放松执行策略后激活:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
. .\.venv\Scripts\Activate.ps1
</details>
<details>
<summary><b>Q: 端口 7860 被占用</b></summary>
方法 1:结束占用进程(示例)
netstat -ano | Select-String 7860
taskkill /PID <上一步查到的PID> /F
方法 2:临时修改启动端口(编辑)main_gradio.py 最后一行)
demo.launch(server_port=7861)
</details>
<details>
<summary><b>Q: .env 似乎未生效</b></summary>
.env 位于项目根目录(与 main_gradio.py 同级)load_dotenv() 请确保该语句未被移动.env更多问题,请参阅《快速开始指南》的常见问题部分。
新功能:
优化和改进:
性能提升:
欢迎贡献代码、报告问题或提供意见!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)本项目采用 MIT 开源许可(如果未包含 LICENSE 文件,请根据需要添加)。
wjj
感谢以下开源项目:
如有任何问题或建议,请:
⭐ 如果这个项目对你有帮助,请点击 Star 支持! ⭐
由 wjj 制作 ❤️
</div>