DraftReviewPublishedArchived

一个专用领域 Agent,我是怎么搭的

我做了个自驾路线规划 Agent 叫野行 Y。这篇不写旅行,写它整体怎么搭起来——通用架构 × 专业能力两层、十来个模块,从循环、工具、上下文到数据真实性、判断层,一层层拆开。

By Joker2026/07/235 min

我做了一个叫野行 Y 的东西,是一个自驾路线规划 Agent。

它干的活是这样:你跟它说个大概方向——「成都出发,带上老人,想走川西,五天左右」——它帮你把目的地定下来、查每段路的真实路况、算好每天开多久别太累、比一遍机票酒店,最后排出一条能直接照着出发的线:哪天到哪、住哪、开多少公里、要注意什么高反和封路。排完,还能顺手帮你找到一起上路的搭子。

野行 Y 的规划入口

我自己是重度自驾玩家,青甘、川西、南疆、藏东这些大环线都是自己一条条设计、招人、开着车走完的,所以很清楚「能出发的行程」和「看着挺美的文字」差在哪。这篇不写旅行攻略,写的是这么一个专用领域的 Agent,整体是怎么搭起来的——功能、编排、业务、架构,一层层拆开。

先说一个底层选择:它的骨架,和 Claude Code 这类 Coding Agent 是一套东西。

Coding Agent 之所以好用,是因为它把「写代码」这件事做成了一个 Agent——一套工具(读文件、改文件、跑命令)、一个模型驱动的循环(模型自己决定下一步调哪个工具)、加上上下文管理、记忆、来回确认。我做野行 Y,等于把这一整套原样搬过来,只是把工具从「读文件改文件」换成「搜目的地、估驾时、查机酒、推车型」,把领域从「代码」换成「旅行」。

所以要拆这个 Agent,我把它分成清清楚楚的两层。

第一层,通用架构。 这层是从 Coding Agent 这类成熟范式借来的骨架,换个行业基本不变,我基本照着成熟做法搭,没自己发明轮子。

  • 模型驱动的循环。 这是地基。它不是一条写死的流水线(先查机票、再查酒店、再排每天),而是一个循环:模型每一轮看着当前情况,自己决定下一步调哪个工具,直到它认为排完了、调「提交行程」收尾。但光让模型自由决定不够,真跑起来它会跑偏、会不收敛,所以循环里还得编排一层护栏——查资料查够了就把搜索工具从它眼前撤掉、出报告前必须先把主线摆给你确认一次、自驾行程必须先算一遍驾时别排出一天开十二小时。让它自由是一行循环,兜住它乱来是一大半的代码。
  • 一套工具。 循环里模型能调的每个动作就是一个工具——搜目的地、并行核实路况、估算每段驾时、查真实机酒、推荐车型、提交行程。工具的集合,划定了这个 Agent 能干什么、不能干什么。
  • 上下文工程。 模型每一轮知道的一切,就是这次喂进窗口的那些字。一趟排线要调十几次工具,如果每个原始返回都堆进去,窗口会飞快膨胀、又贵又慢。所以像 web 搜索这种高噪音的返回,进模型之前先瘦身,只留标题和一小段摘要;有些并行核实,甚至在工具内部就先把一堆网页蒸馏成一句结论再回来。
  • 记忆。 上下文是一次会话里的短期记忆;跨会话记住「你去过哪、偏好什么」,靠一套单独的记忆系统——老用户开新行程,会先把他的画像注入进去,让 Agent 一上来就记得这个人。
  • 子 Agent 与并行。 有些活不该主循环顺手做。要核实一批垭口的路况,并行分出去,比一个个串着查快好几倍;排完的方案要不要过关,换一个「干净脑子」的子 Agent 去核对硬伤,比让它自己检查客观得多。
  • 模型层。 一个 Agent 往往不止用一个模型:难的重活用强模型,简单高频的用快模型,主力挂了还得有免费兜底的顶上,绝不断线。这一块底下是模型分层、fallback 链、并发控制一整套。
  • 工程与运维。 部署、性能、调试、监控,让它在真实流量下不崩、出了问题查得到。

第二层,专业能力。 这层是旅行这个领域独有的,没有现成答案,全靠自己啃——也正是它,决定了这个 Agent 到底懂不懂行。

  • 把业务动作变成工具。 「排一趟自驾」到底要做哪些事?拆出来就是搜目的地、核实路况、估驾时、查机酒、推车型这些动作,每一个变成一个工具。这一步拆得准不准,得非常懂这行。
  • 领域建模。 自驾有它自己的规矩:一天开十二个小时是灾难,得拆成两天、中间加个住宿点;多人出行不能只顾一个人,得把每个人的诉求列出来、排一版大家都能接受的。这些约束是旅行独有的,得一条条建进去。
  • 数据真实性。 这是专业 Agent 的生命线。机票拿不到实时价,就老实标「参考价」,绝不假装精确;一个地名查不到坐标,宁可地图上少一个点,也绝不乱指到一个同名的地方去。真实性不是一个开关,是一百个这种小决定累加出来的。
  • 判断层。 最值钱的数据,不是能搜到的规格,是没人结构化过的判断。「一家六口带老人走川西烂路该开什么车」——这句话任何参数表、任何 API 里都没有,是自己一款款车攒出来的经验。我把它做成了一个车型库:上半截是能抓到的客观参数,下半截是「适合什么路、什么人别选」的判断,这半截才是抄不走的。
  • 产品化。 最后,把这些变成一个真有人用的东西——账户、约伴、路线广场,让它从一个工具,长成一个产品。

这两层最后产出的,是这么一份东西——不是一段漂亮话,是一条标好了每天住哪、每段开多久、出发前要核实哪些路况和高反的、能直接照着出发的线:

野行 Y 排出的一份完整行程

这两层怎么合起来?我把它看成一个乘法:通用架构 × 专业能力。 通用架构决定它能不能跑起来,专业能力决定它到底懂不懂这行。缺一层都不成——只有架构没有专业,是个套了旅行皮的空壳,给的东西经不起推敲;只有专业没有架构,是一堆没有引擎的死数据。而且这两半的性质不一样:通用架构是可以学、可以抄的,成熟范式已经趟出来了;专业能力没有现成答案,得自己一点点啃、一点点攒。

这就是野行 Y 的整体框架:两层结构,十来个模块。这个号接下来,我会拿它当例子,把每一块拆开细讲——那个循环具体怎么写、护栏怎么加、工具怎么设计成能力边界、上下文怎么经营、数据真实性怎么用架构兜住、模型层怎么分层兜底、车型库那种判断层怎么建。每一篇讲一块,都是真做过、踩过坑的东西。

今天先把整张图给你。下一篇,从最底下那块地基开始拆:Agent 的那个「循环」,到底是怎么回事。

QUEST COMPLETEREWARD: +30 XP, +1 EPIC ITEM
Build Progress100%
无信号
PULSE
0PULSES