这道题我觉得本质是在问一个复杂规划任务怎么拆解,以及拆完之后各个模块怎么协作。行程规划涉及目的地、交通、住宿、日程四个领域,每个领域知识独立,工具接口不一样,而且它们之间有很强的约束冲突,比如酒店位置会直接影响交通方案。这种情况下,我会选择[[多智能体]]架构,原因很简单:专业分工。每个[[Agent]]专注一个领域,Prompt和工具集可以做到很聚焦,不会互相干扰;另外像目的地推荐和交通查询这种可以并发跑,提升效率;还有一个好处是容错隔离,一个Agent挂了不会拖垮全局。
具体怎么拆呢?我把它分成两阶段。第一阶段是粗规划,按领域并行。目的地Agent、交通Agent、住宿Agent同时跑,各自给出候选方案。第二阶段是精编排,按时序串行,由日程协调Agent把前面三个的结果整合起来,按天编排,同时解决冲突。你可以这么理解:先各自出牌,再统一洗牌。
每个子Agent的职责很清晰。目的地Agent负责根据用户偏好生成景点列表,输出景点、预估时长和标签;交通Agent算城市间和市内的交通方案,输出班次、价格、耗时;住宿Agent筛选酒店,输出候选酒店、位置和评分。这三个都是Worker,无状态执行,输出标准化JSON。而日程协调Agent是Manager,也是唯一有全局视角的角色,它拿到所有候选后,要做冲突检测和优化编排。
协作机制我用的是Manager-Worker模式,也就是中心化仲裁。日程协调Agent持有全局状态,分发子任务,收集结果,仲裁冲突。举个例子,住宿Agent推荐了一个郊区的酒店,价格便宜,但交通Agent发现第二天早班机需要凌晨五点出发,那日程协调Agent就会触发重规划,向住宿Agent反馈约束,要求酒店必须三十分钟内能直达机场,然后住宿Agent重新召回酒店。通信上我用共享内存加消息队列,Worker输出写入共享状态,Manager订阅变更。
这里有个边界划分的问题。单Agent加Tools的方案适合简单任务或者快速MVP,但行程规划领域太宽,一个Agent的Prompt容易混乱。多Agent去中心化像AutoGen那种,适合需要自主协商的开放任务,但行程规划目标明确,中心化仲裁效率更高,结果也更可控。所以真正落地,我会选 多Agent中心化,也就是Manager-Worker模式。
落地时有个前提:所有Agent必须输出标准化的Schema,比如位置信息要有经纬度,时间要有时间窗口,否则Manager没法做约束求解。常见失败场景是Worker返回的数据不一致,比如一个用城市名,一个用经纬度,导致冲突检测失效。上线我会特别关注这个数据对齐问题,先做一轮Schema校验。
还有一个点我特别想提一下:冲突解决不一定都能一次搞定,比如住宿Agent可能返回不了满足约束的酒店,那日程协调Agent就需要降级处理,比如调整景点顺序或者接受高一点的预算。这个反馈重规划的机制,在多Agent协作里其实很关键,但容易被忽略。
所以整体上,我更倾向于把行程规划看成 一个中心化编排的约束满足问题,而不是纯粹的对话任务。多Agent架构在这里是自然的选择,但核心在于Manager的仲裁能力,以及Worker之间的数据标准化。