我做了一个 Coding Agent,才发现调用模型只是开始
做 Coding Agent 后才明白,调用模型只是开始。长任务中,状态管理、工具记录、可观察性和失败恢复才是关键。聊天只是入口,系统要像 Runtime 一样持续推进并验证结果;稳定可靠往往比一次惊艳回答更重要。
做 Coding Agent 之前,我对 Agent 的理解很简单
做 Coding Agent 之前,我对 Agent 的理解很简单。
给大模型一个目标,再接上 Prompt 和工具调用。用户说一句“帮我修这个 Bug”,模型分析代码,调用工具,修改文件,运行测试。只要这条链路能走通,一个 Agent 好像就做出来了。
真正自己做以后,我才发现,调用模型很容易,把一个任务从开始送到结束很难。
模型知道怎么解决问题,任务却还是会停在半路。它可能完成了前几步,却不知道当前做到哪里。工具调用失败后,状态接不上。上下文变长以后,前面的决定被冲掉。修改范围扩大,最后的代码甚至超出了用户原本想改的地方。
这些问题不能靠换一个更强的模型自动解决。模型能力当然重要,但它只负责其中一段。剩下的事情,得由软件系统接住。
我一开始盯着模型
刚开始做 CodeLeveler,我花了很多时间比较模型。
用什么模型,上下文有多大,推理能力怎么样,Tool Calling 支持得好不好。
当时我默认一件事,模型越强,Agent 就越强。
这个判断在短任务里经常成立。用户问一个问题,模型给出答案,过程很快结束。到了 Coding Agent,任务开始变长,模型能力就不再是唯一的限制。
一个 Agent 需要连续做很多事。它要理解目标,制定计划,调用工具,读取结果,修改代码,再运行测试。中间任何一步出了问题,后面的动作都可能失去依据。
模型知道下一步该做什么,不等于系统记得上一步已经做了什么。
Agent 开始像一个 Runtime
后来重新设计 CodeLeveler 时,我逐渐把它看成一个 Runtime。
用户说“帮我优化这个项目”,这句话背后至少包含了几类信息。 用户到底想解决什么问题,当前计划是什么,哪些步骤已经完成,哪些步骤还没开始,中间产生过哪些文件和结果。
如果这些内容只存在当前上下文里,Agent 每次出错都像回到起点。它重新读一遍需求,重新做一遍判断,甚至可能重复修改已经改过的文件。
状态管理因此变成了第一件需要认真处理的事。
工具调用也不是模型发出一个函数请求,等着结果回来这么简单。真实过程通常是,系统先判断权限,再执行工具,记录结果,必要时压缩上下文,最后决定是否继续规划。
模型的调用只是其中一个动作。
另一个容易被忽视的部分是可观察性。
传统程序出了问题,工程师会去看日志。Agent 出问题以后,我们还想知道它为什么选了这个方案,为什么调用了这个工具,为什么在这里停下来,失败以后有没有尝试恢复。
这些信息需要被记录下来。Event Log、Trace、Tool History、Task Timeline,都不是为了让系统看起来更复杂,它们决定了开发者能不能找到问题,也决定了用户能不能理解一次任务究竟发生了什么。
做到这里,Agent 已经越来越像一个需要长期运行的软件系统。
聊天只是入口
这也改变了我对 Coding Agent 产品形态的看法。
聊天界面只是入口,后面的执行过程才是重点。
用户提出目标,系统拆解任务,Agent 进入执行循环,工具负责操作,状态持续更新,结果接受验证。验证失败以后,它还要继续修正,或者把问题交回给用户。
一次聊天的质量,通常取决于某一句回答。 一次任务的质量,取决于它能不能持续推进,能不能在失败后恢复,能不能让用户中途接管,最后能不能交付一个经过验证的结果。
这两种产品的差别,只有真正做长任务时才会显现出来。
Demo 为什么惊艳,长期使用却很难
很多 Agent Demo 展示的是第一次成功。
用户给出一个目标,模型完成一次调用,界面上出现一个漂亮结果。整个过程几分钟就结束了,看起来很流畅。
真实工作往往要持续几个小时,修改几十个文件,中途处理各种错误,还要理解之前的历史上下文。用户可能随时插入新的要求,工具可能返回异常,某一步的判断也可能需要重新检查。
这时,稳定性会把智力差距放大。
一个能力只有八十分,但能持续运行、知道自己做到哪一步的 Agent,通常比一个能力一百分,却经常忘记状态、重复操作、半路失控的 Agent 更有价值。
因为用户真正需要的,往往不是一次惊艳的回答,而是一个任务能被可靠地完成。
我现在会换一套问题
以前做软件,我更关注功能有没有完成。
现在做 Agent,我会继续追问几件事。
任务失败以后能不能恢复。用户暂停以后能不能接着做。工具结果有没有被正确记录。上下文变长以后,系统还能不能保留重要信息。最后的结果有没有经过验证。
这些问题看起来和模型参数没有直接关系,却决定了用户能不能长期使用这个产品。
做 CodeLeveler 之后,我对软件的理解也发生了变化。
过去的软件,通常需要人把操作步骤提前写好。人告诉机器怎么做,机器按照规则执行。
Agent 时代,用户更多是在描述自己想达到什么目标。目标之后的计划、操作、检查和修正,需要另一套软件系统来完成。
我现在最关心的,已经不再是怎样让模型多说一句漂亮的话,而是怎样让它在复杂任务里少忘一步,少失控一次,最后真的把事情做完。
