可解释的对话式旅行规划 Agent
Trip Agent
一套会随着多轮对话持续生长的旅行规划系统:模型判断体验“好不好”,确定性代码守住方案“能不能”。
- Year
- 2026
- Role
- 产品设计、Agent 架构与全栈开发
- Python
- LangGraph
- FastAPI

Project overview
Trip Agent 是一个面向个人旅行者的对话式规划系统。它不会把行程当作一次生成后便结束的文本,而是维护一份会随着对话不断演进的结构化 Plan。
用户可以继续增加预算、兴趣、忌讳、固定活动和日期限制。系统会保留已经确认的安排,只重新规划真正受到影响的部分,并清楚说明每次变化带来的费用与体验取舍。
01
Background
常见的旅行 Agent 往往直接根据提示词生成一份看起来合理的行程,却难以保证预算、活动数量、固定预约和用户偏好能够同时成立。当用户继续修改要求时,系统还可能重新生成整份计划,导致上一轮已经确认的内容被意外改变。
02
The problem
项目需要解决的不只是“生成一份行程”,而是如何在多轮对话中维护一份可信的计划:记住用户锁定的内容,识别互相冲突的要求,保留价格和路线的来源,并在计划不可行时提供经过重新验证的调整方案,而不是让模型编造一个刚好满足条件的答案。
03
Major features
持续演进的旅行计划
通过版本化 ConversationState 和 Plan 累积多轮要求,支持补充、修改、撤回、固定活动和日期限制,并尽量保留未受影响的既有安排。
可验证的约束与取舍
预算、活动数量、偏好下限、忌讳和固定安排由确定性代码检查;发生冲突时,系统搜索并重新验证缩短天数、调整住宿或提高预算等可行方案。
有来源的在线调研
受控 Research Agent 可以调用 Nominatim、OpenTripMap、Open-Meteo 和 OSRM 获取地点、景点、天气与路线信息,同时记录数据来源、可信度和不确定性。
多 Agent 受控协作
Research、Planning、Repair、Safety 和 Explanation Agent 分别负责调研、规划、方案选择、安全披露与解释,但所有关键数字和正式计划仍需通过代码校验。
可恢复的 Web 对话
FastAPI 单页界面以 SSE 展示真实规划进度,PostgreSQL checkpoint 和幂等消息记录支持会话恢复、重试保护与用户数据隔离。
04
Implementation process
- 01
建立可解释的领域模型
先定义 Draft、Slots、Plan、Tension、Relaxation 和 Source,让用户要求、正式计划、未决冲突及数字来源成为明确的数据结构。
- 02
划分模型与代码的边界
让模型负责自然语言理解、地点偏好和候选方案选择;让代码负责费用、约束、路线验证和冲突搜索,避免模型直接生成不可验证的关键数字。
- 03
构建多轮工作流
使用 LangGraph 将解释、归约、调研、评分、规划、路线、安全审查和冲突修复组织成可恢复、可观察的状态图。
- 04
用离线测试守住行为
通过单元测试、标准工具轨迹和版本化 Eval 检查计划约束、状态版本、Agent 停止条件、降级路径与多轮会话行为。
05
Technical challenges
平衡模型能力与确定性
模型适合判断某个地点是否符合用户兴趣,却不应该决定预算是否成立。项目需要为每类决策找到明确边界,并为模型失败设计可见的降级路径。
在修改中保持计划稳定
用户修改某一天或某项偏好时,系统既要重新满足全部约束,又要避免无关日期被重排,因此需要版本化状态、活动锁定和局部修复机制共同工作。
把不可行变成可选择
发现预算或安排冲突只是第一步。系统还需要搜索多种调整方式、重新验证所有约束,并说明每条方案会失去哪些体验,而不是只返回错误。
诚实表达数据的不确定性
票价、天气和路线信息可能来自静态规则、估算或外部服务。界面必须区分精确值、估算值和未知值,避免把不完整信息呈现成确定事实。
06