CASE STUDY · TripMind

Travel Agent

把一句出行想法,变成核验过、能继续改的行程

面向第一次自由行、已选好国内城市的用户:用自然语言说出天数、节奏和在意的事,得到一份 2–5 天的行程。地点、路线和天气来自真实地图工具,没核验过的结果不会被当成当前行程。

查看关键取舍
我的职责
用户与范围定义 · 评测设计 · 关键取舍与验收(借助 Codex 实现)
交付形态
Web(手机/桌面)
当前阶段
原型验证(0A),未公开发布

200 次真实规划交付 157 次
真实模型与真实高德地图,四条固定需求各 50 次。

记录「无胜者」
唯一候选配置稳定性不达标,不为结论改门槛。

行程质量护栏上线
超长步行改公交、餐厅按餐段营业过滤,均经真实请求确认。

01 / 问题与范围

只服务一类人,只做一件事

目标用户

第一次自由行、已经选好城市

不缺攻略,缺的是把景点、吃饭、路上时间排成一份能走得通的计划。

产品承诺

一份合理的 2–5 天行程

对话说需求,行程是结果;之后继续对话修改,由用户明确定稿。

明确不做

不订票,不做内容社区

住宿只是可选候选、不代表有房;没有信息流、关注、热门榜单。

自然语言是主入口,不把规划流程做成伪装的表单;一句话里同时提出多个要求时,走同一个理解入口,再决定要调用哪些工具。

02 / 方案

模型负责理解和取舍,事实由工具核验

  1. 自然语言输入

    目的地、天数、同行人、节奏、必去,用平常的话说。

  2. 意图与需求理解

    区分新建、修改、只读提问,并逐句保留原文,防止需求被漏掉。

  3. 调用必要工具

    高德地点搜索、路线、天气;只在需要时调用。

  4. 预览与核验分开

    结构校验后先显示「未保存」预览;路线核验通过才写入当前行程。

  5. 持续修改,用户定稿

    点名某一天的修改只动那一天;失败时恢复旧方案,不悄悄覆盖。

03 / 关键取舍

用证据决定留下什么,也决定撤回什么

取舍 1

可核验的文字交给服务端

模型只负责需求理解、选点和日程取舍;行程里的营业、路线、天气说明由服务端从工具结果生成,减少编造事实的空间。

取舍 2

没有合格配置,就写「无胜者」

唯一候选在 6 个会话中 5 个自动通过,但同条件路线重复 1 成 1 败。没有提高 45 秒截止、也没有加 fallback 来制造成功。

取舍 3

无收益的方向关掉,但保留开关

候选片区、远郊限额、一天一片区等 6 个方向经真实对照没有收益后关闭;开关保留,旧证据仍可复现。

一次中途转向:从「提速」回到完整旅程

早期工作集中在压缩单次规划的耗时。2026-09-04 我把目标改为完整闭环:自然语言理解、必要工具、可编辑草稿、持续调整、用户定稿。模型、Agent 架构和 45 秒等待目标都改为可被证据推翻的假设,而用户隔离、事实边界、未校验结果不得写入当前行程这些底线不随试验放松。

行程质量护栏是怎么来的

先离线检查 344 份已交付行程(不花请求),找出最常见的问题,再逐项修复并用小批量真实请求确认:超过 2 公里的步行改查公交(慢节奏或行动受限时 1.2 公里),餐厅按餐段营业和菜系过滤,景点时段与营业时间冲突时给出提示。确认轮中超限步行 29 段全部改成公交,餐厅营业冲突 0/55。

04 / 验证与现状

交付率 78.5%,0A 仍未通过

200 次真实规划交付 157 次(78.5%,95% 区间 72.2%–84.0%)
加入停滞重发后未触发重发的 134 次交付 124 次(92.5%),耗时中位数 31 秒
结构失败/需求丢失0 / 0
剩余失败的主要原因模型提供方的输出流停滞

诚实边界:完整规划仍会超过 45 秒截止,用户自由输入的验收还没开始,所以 0A 没有通过。这是一份原型验证记录,不是已上线的旅行产品。

一次更正:第一轮 200 次评测里「餐厅按菜系过滤」一项,事后发现判定有缺陷,至少 19 餐选了川菜馆;我在报告里更正为不成立,修复后再单独确认。

两轮评测之间不比较提升幅度:各自没有对照组,模型提供方在不同时段的状态差异很大。

Demo 部署后会在这里开放体验。