这道标题给我的第一反应是:智能体工程这个赛道,2025年12月确实到了一个值得停下来说一说的节点。如果你这半年一直在一线做Agent相关的系统,应该能明显感觉到,大家讨论的东西变了——年初还在聊“怎么让大模型调用工具”,年尾已经有人拿着注册中心、审计日志、SLA、降级策略来找你过方案。这种变化不是某一家公司的某个版本更新带来的,而是整个技术栈在往工业化和体系化方向挪。行业里不少人管这个叫“相变”,我觉得用词还挺准:不是新增几个功能,而是整个学科从液态变成了固态,底层规则都换了。
这篇文章我想顺着“什么叫相变”“变在哪里”“对我的项目产生了什么实际影响”三条线来写。不堆概念,只讲我在这段时间观察到的信号、动手调整过的架构、以及现在还让我睡不踏实的几个问题。
1. 为什么用“相变”这个词:2025年12月的三个转折信号
相变在物理里指物质从一种状态跳到另一种状态——水温降到0度不会立刻结冰,要等一个凝结核,然后整桶水突然就冻住了。智能体工程在2025年最后一个月给我的感觉就是这种:积累了一整年的范式碎片,在某几个方向上忽然同时凝固,变成了大家默认的底层规则。
1.1 从“模型行不行”切换到“系统稳不稳”
前11个月我参加的绝大多数技术讨论,焦点都还在模型层:换个更强的底座、调一下Temperature、优化一下Function Calling的命中率。但12月这一个月的邮件和会议话题明显变了,问的最多的是:Agent工具调用的权限边界怎么划、并发50个任务时状态怎么保证不串、哪天模型服务抖动了业务能不能感知到。模型能力还是基础,但它已经默认满足,不再是被反复验证的主角。这个切换非常关键——当大家不再纠结“能不能做”,而开始讨论“怎么稳定地做、怎么出事能查、怎么控制成本”,背后的工程重心就彻底换了。
1.2 连接协议成为基础设施,治理工具开始补位
2025年上半年,我在好几个项目里见到的最多场景是每个团队自己定义工具调用格式,A组的Agent调不了B组的工具,联调全靠写胶水代码。到12月,基于模型上下文协议(Model Context Protocol,MCP)的连接方式已经在主流框架和大多数内部平台里成为默认选项。协议一统之后,讨论焦点自然就换了——因为工具连得上已经不值得炫耀,真正的麻烦变成了连上以后怎么管:谁能调、调多少次、调失败了怎么办、调用记录去哪查。我看到的12月社区讨论里,大量开发者已经开始用“工具网关”“审计日志”“策略引擎”这些词来聊Agent,这在半年前几乎是不可想象的。
1.3 评估从“发论文”变成“验收流水线”
另一个明显信号是评估方式的工程化。早先的Agent评测,很多团队是在拿几个公开测试集跑一跑,比个分数就宣布效果达标。12月的时候,我已经见到至少三个团队把Agent评估做成了持续集成里的一环:每一轮代码变更都触发几百个用例的自动验收,包含工具调用正确性、答案格式、错误恢复、甚至Token消耗上限。这个转变说明Agent开发已经脱离了“调一次试一次”的手工作坊模式,开始享受传统软件工程的老规矩——变更要有回归测试,上线要有验收门槛。
这三个信号叠在一起,我判断已经不只是“发展快”,而是整个领域的底层范式在重构。接下来几节我会拆开讲,每个方向上到底发生了什么实质变化。
2. 编排层的骨架迭代:Workflow、Graph与Runtime的取舍
我在智能体项目里待得越久越清楚一件事:大家最容易忽略的,往往不是模型调优,而是Agent的“骨架”——也就是任务怎么编排。2025年12月的相变,有一半发生在这一层。
2.1 链式编排为什么会被Graph取代
早期的Agent编排特别直白:一个Prompt进去,模型自己决定调哪个工具,然后继续循环,最多加几层条件判断。这种链式结构在Demo阶段效率极高,三五天就能跑通一个客服场景。但它有个致命问题——流程一复杂,分支就失控。用户问“我要退单但还想保留优惠券”,链路一会儿要查订单、一会儿要回滚、一会儿要并发调库存,条件判断堆成了意大利面。
Graph式编排在2025年下半年开始成为主流,不是某个框架炒作的结果,而是它天然匹配Agent的复杂形态。节点表达“做什么”(查单、退单、追问),边表达“什么条件下走哪条路”,循环和并行都成了图的显式结构。12月我看到很多团队自研的编排引擎,内部数据结构基本都收敛成了DAG或带环的状态图。这个收敛本身就是相变的证据——大家不约而同走向同一个工程答案。
2.2 Runtime:跑流程只是基础,生命周期管理才是关键
Graph只是描述结构,真正难做的是Runtime——图跑起来之后的状态管理、恢复、和外部系统的一致性。我见过不少团队第一版用现成框架跑图很开心,等要支持“任务执行到一半,模型超时该重试还是该放弃”的时候,才发现框架没给答案。
实操中我通常要求Runtime至少管三件事。第一,节点级状态持久化:每个节点的输入输出都落到存储里,进程重启后能恢复未完成的图。第二,可重试与幂等:工具调用超时后重试,不能让用户被重复退款。第三,超时与降级策略:模型节点卡了多久算失败、失败后是走兜底话术还是转人工,这些要配置化而不是写死在代码里。下面是一段我在内部平台里常用的图定义示例,节点和分支都显式声明,好维护得多:
graph = AgentGraph( nodes=[ Node("classify", handler=classify_intent, retry=2), Node("query_order", handler=query_order, timeout=30), Node("refund", handler=refund, condition="intent == 'refund'"), Node("escalate", handler=transfer_human, condition="error_count > 2"), ], edges=[ Edge("classify", "query_order", on_success=True), Edge("query_order", "refund", on_success=True), Edge("query_order", "escalate", on_failure=True), Edge("refund", "end", on_success=True), ], )注意我在每个节点上挂了超时、重试次数,在关键节点上挂了兜底分支。这套写法让“异常恢复路径”成为图的一部分,而不是靠外层catch到处补丁。
2.3 三种编排架构的选型对照
我把自己和周围团队用过的方案整理成了一张对照表,给正在选型的人一个参考:
| 架构形态 | 适用场景 | 优势 | 主要痛点 |
|---|---|---|---|
| 链式/线性编排 | 简单咨询、单工具调用 | 实现快、调试直观 | 分支一多就失控 |
| Graph状态编排 | 多工具、含人工介入的生产系统 | 表达力强、可恢复性好 | 调试复杂,需要配套追踪工具 |
| 完全自由调度(智能体自主决定一切) | 探索型任务、研究场景 | 灵活性最高 | 结果不可控,难验收,生产环境慎用 |
我的建议很直接:做Demo可以自由,做生产系统,12月之后我基本建议团队走Graph这条路,并且越早把节点级状态和兜底分支设计进去越好。等出了问题再加这些东西,改动成本是几何级上涨的。
3. 治理机制:生产级智能体绕不开的一个“管”字
如果说编排层是“骨架”,那治理就是“免疫系统”。2025年12月这个领域的相变,最深刻的部分不是技术本身,而是大家终于承认了一个事实:智能体不是单个Prompt,而是一个有权调用真实系统、能花钱、可能闯祸的软件主体。既然它有权限、有成本、有行为后果,就必须有管理机制。
3.1 权限、审计与人类介入,三项缺一不可
权限这块,我踩过一个大坑。早期我们给Agent的工具权限是按函数划分的,看着挺细,结果测试时发现Agent通过一连串合理调用拼出了不该看的用户信息。后来我们把权限改成“数据域+操作+上下文”的三元组模型:能读哪些数据域、能执行哪类操作、操作允许出现在什么场景里。每次工具调用前都要过一遍这个策略检查,模型再聪明也绕不过这层硬卡口。审计上,我要求每一个Agent的工具调用都写审计日志,包括入参、出参、耗时、Token用量、触发节点。不是为了领导检查,是你后半夜被电话叫起来排查事故的时候,没有这套日志基本就是瞎猜。
人类介入(Human-in-the-loop)在12月也彻底从“可选功能”变成了“默认要求”。金融场景的转账、医疗场景的诊断建议、电商场景的超额退款,我会把这些节点做成强制人工审批。这不是保守,是必要护栏——Agent的幻觉问题短期内不会归零,那就在关键动作上留一道人工闸门,这是工程责任的分内事。
3.2 成本控制从“事后看账单”变成了“实时干预”
Agent系统的成本模型和传统后端完全不同。传统接口调一次算一次,Agent是一次任务可能要调十几次模型,且路线不确定。我见过某团队线上跑了一个不良用例,单个用户会话烧掉了远超预期的Token费用,月账单直接翻倍。12月之后,我在项目里强制加了这几层控制:
- 按会话设预算:每个用户会话给一个Token/成本上限,超过立刻降级到轻量模型。
- 按Agent实例设配额:单个业务Agent的日调用总量设上限,防止死循环。
- 按工具设阈值:调用某个高成本工具的每日次数设值,超出后自动转人工。
这套体系落地之后,单会话成本峰值至少降了四成,而且再没出现过“一句话烧掉一大笔钱”的事故。
3.3 回退设计与“确定性兜底”
最后一块是确定性兜底。模型再强也有抽风的时候,所以我在每个Agent节点后面都留了一条“如果模型输出不符合Schema就重试,重试两次仍失败就切到规则话术”的路径。这条路径不需要任何智能,纯逻辑判断,但它保证了用户体验的底线:宁可给一个笨但正确的回答,也不要让模型自由发挥出一段危险的胡话。好的Agent工程不是追求每一步都靠模型,而是让模型的不可靠性被规则一层一层兜住。
4. 多智能体系统在这波里真正成熟的部分
2025年年初的时候,“多智能体”在我眼里还是概念大于实践。大家喜欢用“一个Agent负责理解、一个Agent负责执行、一个Agent负责质检”这种故事来讲架构,听着很高级,一跑起来就是消息满天飞、上下文互相污染、最后谁也没把活干完。到了12月,我明显感觉到这个方向上也完成了一轮“祛魅”和“再工程化”。
4.1 通信模式的选择:别把多智能体当成一群人开会
多智能体失败的第一大原因,是把多个Agent当成一群人,以为他们能靠“对话”协作。实际上工程上最稳的,是把Agent之间的交互当成模块间调用,而不是自然语言聊天。我常用的通信模式有三种,按场景选:
- 消息传递:一个Agent显式调用另一个Agent,适合明确的上下层任务分派。
- 发布订阅:一个Agent发布事件,所有订阅者各自响应,适合解耦的并行处理。
- 共享黑板:多个Agent读写同一份任务状态,适合协作式规划,但必须做好锁和冲突处理。
对多数业务场景,我强烈建议先采用第一种,最多加少量发布订阅。共享黑板听起来优雅,实现起来光是状态一致性就能吃掉你一周的工时。
4.2 上下文隔离是生死线
多智能体最常见的灾难,是Agent A把自己处理到一半的上下文塞给Agent B,Agent B以为那是最终答案,直接拿去做了下游操作。12月我在好几个技术群里见人讨论这个问题,大家逐渐统一出一个实践常识:Agent之间的任务交接,传递的应该是结构化的“任务单/结果单”,而不是自然语言叙事。每一份交接单都包含输入摘要、完成状态、结构化结果、置信度和遗留事项。下游Agent只认这个Schema,不认长篇大论。这样上下文边界清晰,出了事也容易定位——谁在哪个环节填了什么,一查就知道。
4.3 记忆设计:共享存储要防“串味”
记忆是另一个容易被低估的环节。单Agent的记忆已经难做,多Agent共享记忆的风险直接翻倍。我在一个项目里见过这种事故:客服Agent把和一位用户对话的记录写进了共享记忆池,另一个负责营销的Agent读取了这个池子,然后根据一段售后愤怒情绪判断用户对品牌不满,自动给用户推了道歉优惠券,场面极其尴尬。
我的经验是:记忆必须分层,至少分成“Agent私有工作区”和“共享知识库”两层。私有工作区只属于当前会话和当前Agent;共享知识库只存放经过校验的、可被多个Agent引用的普适知识,并加上数据来源和时间戳。任何Agent写共享库之前,都要过一道“能否公开给其他Agent”的检查逻辑。这套设计下来,跨Agent污染的case几乎清零。
5. 评估和可观测性:把智能体当成“服务”来运维
如果让我挑一个2025年12月变化最剧烈的方向,我会选评估与可观测性。半年前很多团队还在用“肉眼看看效果行不行”来验收Agent,到12月,稍微成规模的团队都已经把“能不能度量、能不能追踪、能不能复盘”当成上线的硬性条件。这一节我重点讲我实际跑的方案和踩过的坑。
5.1 别迷信LLM打分,分三层建评估矩阵
大模型给大模型打分(LLM-as-a-Judge)在前一阵子很流行,但我在实践中发现,它评估“答案顺不顺”还可以,评估“工具调得好不好、流程走没走对”经常失灵。12月之后我在项目里改成三层评估矩阵:
第一层,节点级评估:针对单个步骤做校验,比如意图分类对不对、工具参数填得准不准、输出Schema合不合规。这层可以用规则加小模型,速度快且稳定。第二层,链路级评估:把一个完整用例跑完,检查多跳任务中每一步是否按预期图路径走,有没有走错分支,有没有多余的重复调用。第三层,用户感知级评估:通过线上真实反馈、用户赞踩数据,判断整体体验满意度。第三层数据量虽然稀疏,但最接近真实价值。
下面是评估流水线里的一个配置片段,我用它把“行为路径”加入验收用例,而不只是看最终的语义相似度:
eval_cases: - id: case_1001 input: "帮我查一下昨天那笔退款到账没有" expected_path: - classify: "refund_status_query" - query_refund_tool: "called" - refund_action: "not_called" expected_cost_max: 12000 expected_latency_max: 8s assert: - "response contains 订单号" - "response does not contain 主动发起退款"Key的地方在于validation:我不单看回答内容,还要校验“该调的工具调了、不该调的工具没调、耗时和成本没超限”。这对Agent类系统特别重要,因为你很难从一句漂亮的回答里判断它中间有没有搞小动作。
5.2 Tracing是排查事故的唯一依靠
Agent系统的排错和传统后端完全是两个世界。传统后端你查个日志堆栈基本能定位;Agent系统里,一次用户请求可能涉及多次模型调用、多轮工具调用、多个Agent协作,没有全链路追踪,事故现场根本无从下手。我在项目里强制要求:每一次LLM调用、每一次工具调用、每一次状态转移,都必须写结构化Trace,包括入参、出参、Token数、模型版本、耗时、错误码。这不是为了仪式感,是为了后半夜有人求助时你能在五分钟内还原整个链路,而不是对着空日志发呆。
5.3 线上反馈要回流,评估集要长在真实数据上
最后一个习惯是评估集的“活水”。很多团队的评估用例是一次性写死的,三个月不更新,模型一变就开始失真。我的做法是每周从线上日志里筛新增案例——尤其是那些用户给了差评、或者人工介入过的问题场景——清洗后加入回归集。这样评估集就会越来越贴近用户的真实难点,而不是停留在开发团队自以为重要的假想场景上。坚持一个月之后,我能明显感觉到每个版本在上线前的拦错能力在变强。
6. 回到我自己的项目:架构调整、踩坑、以及还没解决的问题
这一波相变不是学术概念,它结结实实地改变了我的代码库和团队的工作方式。最后这一节,我不写方法论,就讲讲我自己在这段时间里做了什么、栽了什么跟头,还有哪些至今没找到完美答案的地方。
6.1 我做的最重要两个调整:Agent网关和稳定基线
第一个调整是给所有Agent统一加了一道网关。在网关里统一做权限检查、配额限制、审计日志和成本监控。这个调整落地后,线上因为Agent权限问题导致的事故基本清零。之前每个Agent自己管自己,策略五花八门,出了一次事要排查半天;网关统一收口之后,查问题变得非常单调——翻网关日志,看是策略拦了还是模型抽了。
第二个调整是建立了一套“稳定基线”评估集。我选了大约300个覆盖核心业务路径的用例,每次任何人改了Agent相关的Prompt或编排逻辑,CI必须跑完这300个用例并且全部通过才能合并。刚开始大家觉得烦,说“我就改了个错别字为什么要等二十分钟”。跑了三周之后,有两个差点上线的改动真的被这套基线拦下了。从那以后团队对评估流水线的态度就变成了“没跑不许动”,整个过程像极了传统软件工程里测试要塞进入CI的过程。
6.2 我踩过的三个坑,希望你能绕开
坑一,Graph编排的调试工具没跟上就大规模上量。我们早期上了复杂Graph,结果出现问题后在可视化界面里找半天找不到是哪个节点出的错,最后又回去补Trace和节点状态面板。所以我的建议是:编排复杂度超过10个节点之前,先把调试和追踪的面板建好,不需要多精美,能按请求ID查节点状态就行。
坑二,多Agent的共享知识库没设审核门槛。这个前面提过,结果出现过跨Agent串味的事故。现在所有的共享库写入都需要一个校验步骤,宁可慢一点,不能脏。
坑三,评估集里堆了太多“顺风局”。一开始我从网上抄了一堆标准用例,每个跑起来都是顺顺利利的,看着一片绿,上线就翻车。后来才明白,评估集里最值钱的不是“正常的时候能不能过”,而是“异常的时候能不能兜住”。所以我现在每个迭代都会专门补“刁钻用例”——模型超时、工具返回乱码、用户连续纠缠、上下文超长——这些场景过了,线上才真的敢睡个安稳觉。
6.3 我还在纠结的几件事
最后说几句实话,这个领域到目前为止并不是所有问题都有答案。第一,Graph编排的维护成本仍然偏高,尤其是几十个节点、几十条边的大图,改动一个节点要评估的影响面依然很费劲。我见过有团队为此把图拆成多个小图的,但碎片化又带来了跨图状态同步的新问题。第二,模拟环境测试和真实环境的差距还是很大,有些Agent在测试环境跑得完美,一上生产就像换了个脑子——我怀疑是因为真实环境的工具返回值、用户输入分布、并发压力都复杂得多。第三,评估集的覆盖度始终缺一个科学的度量标准,我现在是凭感觉加业务判断在补,心里并不踏实。
不过话说回来,方向本身我已经不再怀疑了。智能体工程走到2025年12月这一步,大家不再争论“要不要做Agent”,而开始讨论“怎么把Agent做成一个守规矩、可运维、成本可控的生产系统”——这本身就是一种成熟。我大概率还会在这条路上继续踩一些新的坑,但如果每一步都能踩出一点可以分享的工程经验,那这坑就没白栽。