Tour Pass 当前是一个可独立部署的旅行规划 Web 平台。用户可以通过结构化表单或自然语言提交需求,系统使用 LLM 编排行程,并调用高德地图和天气服务核验地点、路线与天气,最终保存、展示和分享结构化行程。
- 结构化需求表单:城市、天数、日期、住宿区域、同行人、节奏、交通、预算、每日时段、必去地点、兴趣和补充要求。
- 自由描述与后续修改:可恢复历史消息和上一版完整行程,在同一会话中重新规划。
- 真实地点证据:高德 POI 搜索、地点详情、规范名称、地址、坐标和营业时间。
- 真实路线证据:步行、公交和驾车路线;仅在坐标及证据匹配时采用路线距离和时长。
- 天气证据:优先和风天气,高德天气兜底。
- 有界规划循环:默认最多 16 个模型决策步骤、20 个底层工具查询;支持一次并行执行 2~5 个独立工具查询。
- 实时进度:通过 SSE 展示模型阶段、工具调用、缓存、耗时、结构处理和保存状态。
- 结果页:逐日时间轴、住宿锚点、区域组合、交通段、地图点位、风险提示、候选区域比较和完整度报告。
- 自动保存与版本:保存会话、消息、每次成功生成的完整版本和运行事件。
- 匿名体验:首次访问无需注册,默认每天 5 次规划额度。
- 基础账号:注册、登录、退出、Argon2id 密码哈希和跨设备行程恢复;默认每天 20 次额度。
- 所有权隔离:访客和账号只能访问自己的私有行程。
- 分享与发现:访客生成不公开收录的私密链接;登录账号可把固定快照发布到发现页。
- PDF 导出:使用浏览器原生打印能力和专用打印样式。
- 持久化:本地默认 SQLite,生产环境通过
DATABASE_URL使用 PostgreSQL。 - 运行观测:脱敏 JSONL 日志、请求 ID、模型和工具耗时、缓存命中及错误阶段。
- 部署:FastAPI 单容器和 Render PostgreSQL Blueprint。
浏览器初始化身份和额度
-> 用户填写结构化表单或自由描述
-> POST /chat/stream
-> 校验会话、CSRF、所有权和每日额度
-> 创建 session_id / run_id
-> 读取当前会话历史和上一版行程
-> LLM 选择下一批事实查询
-> Provider Cache
-> 高德地点 / 地点详情 / 路线,和风或高德天气
-> 汇总已核验地点、路线和天气证据
-> LLM 基于证据输出完整结构化行程
-> 后端规范化地点、路线、地图和风险来源
-> 生成完整度报告
-> 保存消息、行程版本和运行轨迹
-> SSE 返回最终结果
-> 前端渲染时间轴、交通、地图、风险和完整度
模型每轮只能返回 tool、batch、ask 或 plan。地点证据达到目标后,工具范围收缩为路线查询,避免继续无界扩展候选地点。工具响应按请求参数缓存;重复成功查询会被拒绝且不重复计入预算。
本轮不实现硬校验器。当前后端会执行证据规范化和完整度检查,但完整度结果只用于透明展示,不阻止交付。
已经确定性执行的内容:
- 未经工具核验的地点不能伪装成高德实体。
- 路线坐标或证据哈希不匹配时,不采用模型给出的精确距离和时长。
- 地图点位根据规范化后的行程重新生成。
- 缺少营业时间证据时,开放状态降级为
unknown。
当前仍由模型判断、尚未成为硬门禁的内容:
- 必去地点是否全部覆盖。
- 到访时间是否真正落在营业时间内。
- 时间轴是否存在冲突。
- 每天是否有完整的酒店出发与返回路线。
- 步行强度和节奏是否严格满足用户约束。
因此,当前定位是“有真实地点、路线和天气证据的 LLM 行程规划平台”,不是“确定性 Solver + Hard Validator”的 Grounded Planner。
| 方法 | 路径 | 作用 |
|---|---|---|
GET |
/health |
服务、Provider、缓存和数据库状态 |
GET |
/api/auth/session |
获取或创建浏览器身份 |
POST |
/api/auth/register |
注册账号 |
POST |
/api/auth/login |
登录 |
POST |
/api/auth/logout |
退出登录 |
GET |
/api/sessions |
当前身份的已保存行程 |
GET |
/api/sessions/{session_id} |
行程消息和最新版本 |
POST |
/api/sessions/{session_id}/publish |
分享或公开行程 |
DELETE |
/api/sessions/{session_id}/publish |
取消分享 |
GET |
/api/public/itineraries |
查询公开行程 |
GET |
/api/public/itineraries/{slug} |
读取公开快照 |
POST |
/chat |
非流式规划接口 |
POST |
/chat/stream |
SSE 流式规划主入口 |
python -m pip install -r trip_agent/requirements.txt
python -m trip_agent.app复制 trip_agent/.env.example 为 .env,至少配置 LLM Key;启用真实地点和天气能力时再配置高德与和风天气 Key。运行状态数据库、Provider 缓存、日志和 .env 均已加入 Git 忽略规则。