Skip to main content
Glama
README.md
# AI 旅游助手

基于 **Qwen2.5-1.5B + LoRA** 微调与 **ChromaDB + BGE** 向量检索的智能旅游 Agent。
通过 **MCP 协议** 暴露工具服务,可被 Claude Code 等 AI 客户端直接调用。

## 功能一览

| 功能 | 说明 |
|------|------|
| 🌤️ 天气查询 | 30+ 城市实时/预报天气,支持"明天""后天"等中文日期 |
| 🚄 高铁查票 | 84 条内置线路,起止城市双向查询 |
| ✈️ 航班查询 | 89 条内置航线,含航司、时刻、参考票价 |
| 🗺️ 行程规划 | 智能解析预算/人数/天数/偏好,自动生成完整方案 |
| 📋 RAG 攻略 | 19 城旅游知识库,多轮对话记忆,追问自动补城市名 |
| 🔀 复合查询 | 多工具同时调用(如 "天气 + 高铁") |
| ⚡ 流式响应 | SSE 逐 token 推送,前端逐字渲染 |

## 快速开始

### 环境要求

- Python 3.10+
- CUDA 11.8+(显存 ≥ 4GB)
- 已下载 Qwen2.5-1.5B-Instruct 模型到本地缓存

### 启动

```bash
pip install -r requirements.txt

# 方式一:一键启动
python launch_api.py

# 方式二:直接运行
python api/main.py

# 访问 http://127.0.0.1:8000
```

### 测试

```bash
python test_api.py "深圳明天天气怎么样"
python test_api.py "北京故宫有什么特色"
```

## 项目结构

```
├── api/                    # Web API
│   ├── main.py             # FastAPI 主入口(REST + SSE 端点)
│   ├── session_store.py    # SQLite 会话持久化
│   └── static/index.html   # 卡片式聊天前端
├── agent/                  # Agent 核心
│   ├── dispatcher.py       # 工具调度器
│   ├── agent_loop.py       # 复合意图编排器
│   ├── planner.py          # 行程规划器
│   ├── mcp_server.py       # MCP 协议服务器
│   └── tools/              # 工具实现
│       ├── weather.py      # 天气工具
│       ├── train.py        # 高铁工具
│       └── flight.py       # 航班工具
├── finetune/               # LoRA 微调
│   ├── train_lora.py       # 训练脚本
│   └── rebuild_chroma_v3.py # 重建向量库
├── docs/                    # 知识文档
│   └── travel_knowledge     # 19 城攻略原始数据
├── launch_api.py           # 一键启动脚本
└── requirements.txt        # 依赖清单
```

## 技术栈

**模型与推理:** Qwen2.5-1.5B · LoRA (PEFT) · BitsAndBytes 4-bit · Transformers  
**RAG 检索:** BAAI/bge-small-zh-v1.5 · ChromaDB · LangChain  
**Web 框架:** FastAPI · Uvicorn · SSE 流式 · Pydantic  
**前端:** 原生 HTML/CSS/JS · 卡片式 UI · 响应式布局  
**协议:** MCP (Model Context Protocol) — stdio + SSE 双模式  
**持久化:** SQLite · WAL 模式 · 线程安全  
**工具:** wttr.in API · 内置 84 条高铁线路 · 89 条航线  

## License

MIT