kenny67nju a4aa88f697 chore: prep monorepo for first GitHub release hai 3 meses
..
demo a4aa88f697 chore: prep monorepo for first GitHub release hai 3 meses
README.md abd653428d feat: add WebUI, setup wizard, workspace routing fix, and agent examples hai 3 meses
agent-config.yml abd653428d feat: add WebUI, setup wizard, workspace routing fix, and agent examples hai 3 meses
model-override.yml a4aa88f697 chore: prep monorepo for first GitHub release hai 3 meses

README.md

travelagent67 — 旅行规划智能体 v2

架构概述

用户请求
  │
  ▼
┌──────────────────────────────────────────────────┐
│  多 MCP 数据源 (SSE 建链)                          │
│  ┌──────────┐  ┌──────────────┐  ┌────────────┐  │
│  │ 高德地图   │  │ Google Maps  │  │ 大众点评    │  │
│  │ (国内首选) │  │ (海外备用)    │  │ (餐饮补充)  │  │
│  │ priority:1│  │ priority:2   │  │ priority:3 │  │
│  └─────┬────┘  └──────┬───────┘  └─────┬──────┘  │
│        └───────────────┼───────────────┘          │
│                        │ tools/list                │
└────────────────────────┼─────────────────────────┘
                         │
                         ▼
┌──────────────────────────────────────────────────┐
│  用户偏好记忆层 (memory)                            │
│  预算 | 饮食禁忌 | 出行方式 | 住宿 | 游览节奏       │
└────────────────────────┼─────────────────────────┘
                         │
                         ▼
┌──────────────────────────────────────────────────┐
│  ReAct Agent Loop (最多 30 轮, 并行工具调用)         │
│                                                  │
│  阶段0:偏好 → 阶段1:侦察 → 阶段2:POI采集           │
│  → 阶段3:编排 → 阶段4:校验 → 阶段5:JSON            │
│                                                  │
│  ┌───────────┐    ┌──────────────┐               │
│  │ LLM 推理   │───▶│ tool_calls?  │               │
│  │ (Thought)  │    │  Y: 并行调工具│  ──▶ SSE 推送  │
│  └───────────┘    │  N: 输出JSON  │     进度到前端  │
│       ▲           └──────┬───────┘               │
│       │                  │                       │
│       └──── 结果回灌 ◀───┘                       │
└────────────────────────┼─────────────────────────┘
                         │
                         ▼
┌──────────────────────────────────────────────────┐
│  后处理校验层 (postProcess)                         │
│  ✓ 营业时间校验    ✓ 天气适配校验                    │
│  ✓ 时间冲突检测    ✓ 预算校验                       │
│  ✓ 通勤时间校验    ✓ 重复地点检测                    │
│  ──────────────────────────────                  │
│  error → 拒绝并重试  |  warning → 追加提醒           │
└────────────────────────┼─────────────────────────┘
                         │
                         ▼
┌──────────────────────────────────────────────────┐
│  输出解析                                         │
│  1. 代码块清洗 (去除 ```json```)                   │
│  2. 提取 JSON 块 ({...})                         │
│  3. 尝试根对象 → ItineraryPlan                    │
│  4. 回退 data.itinerary / itinerary              │
└────────────────────────┼─────────────────────────┘
                         │
                         ▼
                  ItineraryPlan JSON

v1 → v2 改进对照

改进方向 v1 状态 v2 实现 配置位置
多数据源 仅高德,海外不可用 高德 + Google Maps + 大众点评,优先级链式 fallback mcp.remoteServers[*].priority
流式体验 同步阻塞,无进度反馈 SSE 推送六阶段进度 + 工具调用事件 streaming.events
用户偏好 无记忆,每次从零开始 memory 持久化偏好(预算/饮食/出行/住宿/兴趣),30天有效 memory + memory.schema
增量编辑 全量重跑,无法局部修改 识别修改指令,仅验证受影响 POI,保持其余不变 systemPrompt 增量编辑模式
行程校验 仅通勤时间约束 6 项后处理校验器(营业时间/天气/冲突/预算/通勤/重复) postProcess.validators
并行工具 串行,每轮1个工具 maxConcurrent: 5,无依赖工具同轮并行 mcp.policy.maxConcurrent
成本控制 固定 $0.50 总预算 CEK 引擎 + 7 个阶段预算 + 超额自动降级模型 runtime.stageBudgets

App 亮点 — 实现机制解读

以下从产品视角说明"AI 行程规划"功能的核心卖点及其背后的技术实现。

亮点一:每个推荐地点都是真实的,不是 AI 编的

用户感知:生成的行程中每个景点、餐厅、酒店都能在地图上找到,点击即可导航。

实现机制:Agent 通过 MCP 协议实时连接三大地图数据源(高德/Google/大众点评),所有地点均来自真实查询结果。系统提示词设置"反幻觉"硬约束 + 后处理重复检测校验器双重保障。

亮点二:行程动线合理,不走冤枉路

用户感知:同一天的景点彼此不远,不会出现上午故宫、下午八达岭的离谱安排。

实现机制:逐日编排阶段要求同日行程地理聚集,maps_driving/maps_transit 验证通勤 ≤ 1h。后处理层的 transit_duration_check 校验器做二次确认。

亮点三:AI 会看天气再安排行程

用户感知:下雨天自动安排室内景点,晴天安排户外活动。

实现机制:宏观侦察阶段调用 maps_weather 查天气,编排阶段据此动态调整。后处理层的 weather_adaptation_check 校验器确保雨天不超过 1 个户外景点。

亮点四:一次生成完整行程,精确到经纬度

用户感知:生成结果直接可用于地图渲染,前端无需二次查询。

实现机制:v2 的 JSON Schema 更丰富 —— 除经纬度外,还包含 timeSlot(时间段)、transitToNext(到下一站的交通方式和时间)、estimatedCost(单项费用),前端可渲染带时间轴的地图路线。

亮点五:实时看到 AI 在干什么

用户感知:等待时不再焦虑 —— 能看到"正在查询天气..."、"正在搜索景点..."、"正在验证路线..."的实时进度。

实现机制:SSE streaming 配置监听 Agent 输出中的 [STAGE:X/5] 标记和 tool_call/tool_result 事件,实时推送给前端,展示六阶段进度条和当前操作。

亮点六:记住你的偏好,越用越懂你

用户感知:第二次使用时不需要重复说"我吃素"、"预算有限",AI 已经记住了。

实现机制:memory 模块按用户隔离,持久化 6 个偏好维度(预算/饮食/出行/住宿/兴趣/节奏),30 天有效。阶段〇自动检查历史偏好,仅对缺失项向用户确认。

亮点七:想改哪天改哪天,不用重新生成

用户感知:说一句"第二天午餐换成火锅",只改那一项,其余行程不变。

实现机制:增量编辑模式解析修改指令(第几天/第几项/操作类型),仅对修改涉及的 POI 做工具查询验证,保持未修改部分不变。避免全量重跑的资源浪费和行程漂移。

亮点八:网络抖动不怕,多源兜底

用户感知:不管网络多不稳定,行程都能正常生成。

实现机制:3 层容错 —— 单工具 3 次重试 + 指数退避;高德失败自动切 Google Maps;三源均失败则从已采集候选列表替代。绝不因单次网络问题中断整个规划。


优点

1. 多数据源冗余架构

三个 MCP 远程服务按优先级链式 fallback:高德(国内全覆盖) → Google Maps(海外覆盖) → 大众点评(餐饮深度信息)。单一数据源故障不影响整体可用性,且国内外目的地均可支持。

2. 六阶段结构化规划

从 v1 的四阶段升级为六阶段(新增偏好采集 + 行程校验),每个阶段有明确目标、工具策略和进度标记。规划过程完全可观测、可调试。

3. 并行工具调用

maxConcurrent: 5 允许单轮内并行发起多个无依赖的工具调用(如同时搜索景点/美食/酒店),将 POI 采集阶段的耗时从串行的 N 轮压缩到 ceil(N/5) 轮。

4. 用户偏好记忆

跨会话持久化 6 个偏好维度,30 天有效。第二次使用时自动加载已有偏好,仅确认缺失项。越用越精准,减少沟通成本。

5. 后处理校验层

6 个独立校验器(营业时间/天气适配/时间冲突/预算/通勤/重复)在 JSON 生成后做结构化验证。error 级别问题自动拒绝并要求模型重新生成,warning 级别追加到行程 tips 中提醒用户。

6. 增量编辑能力

支持"修改第 N 天第 M 项"的局部更新,仅对修改涉及的 POI 做工具查询和路线验证。避免全量重跑带来的资源浪费、延迟和行程漂移。

7. 分阶段成本控制

CEK 引擎支持 7 个阶段预算(偏好 $0.03 / 侦察 $0.05 / 采集 $0.25 / 编排 $0.20 / 校验 $0.15 / 输出 $0.05 / 预留 $0.07),超出阶段预算时自动从 qwen-max 降级到 qwen-plus 继续执行,兼顾质量与成本。

8. 流式进度推送

SSE streaming 实时推送六阶段进度和工具调用事件到前端,用户在等待时能看到 AI 当前在做什么,大幅降低等待焦虑感。


仍存在的局限

1. 延迟仍然较高

虽然并行工具调用减少了轮次,但六阶段流水线 + 后处理校验 + 可能的重试,整体延迟仍在 2-4 分钟级别。对于"随便帮我规划一下"的轻量需求,等待时间偏长。

2. Prompt 工程脆弱性

六阶段策略、增量编辑模式、并行工具引导、多数据源切换均依赖 system prompt 的约束力。换模型(如从 qwen-max 到 GPT-4o)可能需要重新调优 prompt。

3. 后处理校验为声明式伪代码

postProcess.validators 中的 rule 是语义描述而非可执行代码,需要运行时框架实现对应的校验逻辑。当前 lambdagent 框架尚未原生支持 postProcess,需要在应用层(如 Java 后端)额外实现。

4. Google Maps / 大众点评 MCP 依赖外部部署

高德有官方 MCP 服务 (mcp.amap.com),但 Google Maps 和大众点评的 MCP 服务需要自行搭建或使用第三方封装,增加了部署复杂度。

5. 偏好采集可能增加交互轮次

阶段〇的偏好确认需要用户回答问题,对于希望"一句话直接出结果"的用户可能感到繁琐。需要平衡个性化精度和交互简洁性。