引子:一个CI排查任务,两种截然不同的处理方式
假设你遇到一个真实的开发场景:本地分支的CI流水线跑测试失败了,你需要排查原因并修复。
把这个问题分别交给Chatbot和Agent。
Chatbot的处理路径是这样的:你把终端里的报错堆栈复制出来,粘贴给它,它分析这段报错“大概率是数据库连接超时”,建议你检查一下docker-compose配置,然后这次响应就结束了。接下来你需要自己打开终端,自己运行docker ps,自己去看配置文件哪里写错了,自己修改、重新跑测试、看结果,如果还失败,再复制新的报错回去问它。每一轮推进,都需要你在聊天框里敲一次回车。
Agent的处理路径则完全不同。你只给它一句话:“排查当前分支CI跑测试失败的原因,并尝试修复它。”它会自己进入一个循环:先读取CI系统的报错日志,发现是数据库连接超时;然后调用Shell工具运行docker ps,发现测试数据库容器压根没启动;接着去查docker-compose.yml,定位到某个环境变量配错了;它自主修改配置文件,重新执行make test;本地测试通过后,确认问题已解决,自动提交代码变更,最后给你输出一份结构化的排查与修复报告。
这个对比揭示了Chatbot和Agent之间最根本的分野:Chatbot解决的是“怎么回答”,Agent解决的是“怎么完成”。Chatbot是单次问答,Agent是自主循环。这个“循环”二字,是理解后续所有Agent技术概念的原点。
一、交互逻辑的根本差异:从“请求-响应”到“目标驱动的自主循环”
从工程角度看,传统Chatbot遵循的是标准的“请求-响应”模式。你给它一段Prompt,模型根据当前上下文推理,吐出Response。一旦响应生成完毕,这次交互的生命周期就结束了,系统挂起状态,安静等待下一次显式触发。Chatbot本质上是“一个具备语义理解能力的对话接口”,它很擅长解释、总结和改写,但工作流程在单次交互后就断开了。
Agent的交互逻辑则发生了范式转变。你不再需要定义具体的操作步骤,只需要给Agent定义一个“终态目标”,剩下的由它自主进入控制循环去推进。在这个循环中,前一步的执行结果直接决定下一步的决策——如果docker ps执行时发现权限不足,Agent会自己捕获异常,尝试用sudo重试或切换排查路径;如果报错日志不全,它会主动去查更底层的系统日志;如果判定本地测试已经通过,它需要知道在什么时候终止循环并提交代码。
用一张表来对比两者的核心差异:
| 维度 | Chatbot | Agent |
|---|---|---|
| 交互方式 | 你说一句,它回一句 | 你给目标,它拆步骤执行 |
| 工具使用 | 不能调用外部工具 | 可读写文件、搜索网络、执行代码 |
| 自主性 | 被动响应 | 主动规划、自我修正 |
| 循环能力 | 单轮或简单多轮 | 自主循环直到任务完成 |
这四项差异中,循环能力是基础性的。因为只有存在循环,工具调用才有“调用后观察结果、再决定下一步”的空间;只有存在循环,“主动规划”和“自我修正”才有实施的时间窗口。没有循环,其他能力都无处附着。
从Agent的架构层面看,这个循环对应的是感知—思考—行动(Perceive-Think-Act)三阶段的持续迭代。感知阶段接收信息,可能是用户输入,也可能是上一步工具执行的结果;思考阶段分析当前状态,判断任务是否完成、还差什么、应该调用哪个工具;行动阶段执行具体操作,可能是调用API、读写文件、执行代码。然后回到感知阶段,观察行动的结果,继续思考下一步。
Java视角:Chatbot相当于一个无状态HTTP接口——请求进来,处理,返回响应,连接关闭,下次请求重新开始。Agent相当于一个有状态的服务编排引擎——它持有一个持续演进的状态(当前任务进展、已获取的信息、待解决的子问题),每一步操作都是对状态的读写,直到状态满足终止条件。
二、Agent的“引擎”长什么样:从Manus看生产级Agent的工程约束
理解了“自主循环”这个核心概念之后,下一个问题是:这个循环在实际系统中跑起来是什么样子的?需要面对哪些工程约束?
Manus提供了一个很好的观察样本。它的工作循环是:Agent在每次迭代中根据当前上下文从预定义动作空间选择动作,在虚拟机沙箱中执行产生观察结果,动作和观察结果被追加到上下文,形成下一轮输入。看起来很简单,但Manus团队披露了一个关键数据,揭示了这个循环在生产环境中的真实成本结构:Agent的平均输入输出Token比约为100:1。
这意味着什么?Chatbot每次对话的输入输出比例大致接近1:1——你问一段话,它回一段话。但Agent的输入输出比是100:1,因为它每一次迭代都要把之前所有轮次的上下文全部重新读一遍,而实际产生的“新输出”(动作决策或最终结果)只占极少比例。大部分计算成本花在了“读上下文”上,而不是“写响应”上。
这个Token比直接决定了Agent的工程优化方向。Manus团队明确指出,KV缓存命中率是生产阶段AI Agent最重要的单一指标。原因很直接:具有相同前缀的上下文可以复用KV缓存,大幅降低首Token生成时间和推理成本。以Claude Sonnet为例,缓存输入的Token成本是0.30美元/百万Token,未缓存则高达3美元/百万Token——10倍的差距。对于一个需要执行几十步的Agent任务,如果每一步的上下文前缀都无法命中缓存,成本会迅速失控。
这就是为什么Manus的工程实践中有几个看起来“反直觉”的设计:不把当前时间戳写进系统提示(因为时间戳每次都变,会破坏前缀稳定性),上下文修改只允许追加不允许删改(删改会打断缓存连续性),工具的增删通过“遮蔽”而非“移除”实现(移除工具定义会改变上下文前缀,导致缓存失效)。
Java视角:Agent的上下文管理和Java中连接池+缓存预热的思路完全一致。连接池的核心价值是避免每次请求都重新建立连接——把“建立连接”这个昂贵操作的结果缓存起来复用。Agent的KV缓存也是同理:把上下文前缀的注意力计算结果缓存起来,避免每次迭代都从头计算。区别在于,连接池缓存的是TCP连接,KV缓存缓存的是Transformer的注意力Key-Value矩阵。Manus对“稳定前缀”的执着,相当于Java中做缓存预热时强调“热路径上的数据不要频繁变动”。
三、Agent的“手”从哪里来:从OpenClaw看工具调用的双通道设计
Agent能“完成”任务,前提是它能操作真实世界的软件。Chatbot只能输出文本,Agent需要能读文件、发邮件、开浏览器、运行命令。OpenClaw(小龙虾)的工具调用设计提供了一个非常有教学价值的实例。
央视网对OpenClaw工作原理的拆解中,用了一个生动的比喻:OpenClaw有“两只手”。第一只手是“正规军”——直接通过软件自带的API来干活,比如直接调用文件系统接口、邮件接口、通讯录接口。第二只手是“模仿秀”——对于那些没有开放API的老软件,它会模拟真人的鼠标点击和键盘输入,完全像人一样操作。
这个双通道设计的意义在于覆盖面与可靠性的权衡。API通道可靠、结构化、速度快,但依赖软件是否开放接口;UI自动化通道可以覆盖几乎任何有图形界面的软件,但脆弱——软件UI一改,模拟点击的坐标或选择器就失效了。在实际Agent产品中,这两条通道不是互斥的,而是分层的:优先走API通道,API不可用时降级到UI自动化。
更重要的是,OpenClaw的工具调用不是“用户在界面上点一下按钮”触发的,而是Agent在自主循环中根据当前任务状态自己决定调用哪个工具、传什么参数。当你对OpenClaw说“帮我把周报发给领导”,它不会直接开始操作,而是先把这句话拆解为任务序列:打开文件→找到周报→打开邮件→填入周报→发送给联系人。每一步执行后,它观察结果,决定下一步。如果“找到周报”这一步发现文件不存在,它会回到“打开文件”阶段,检查是不是路径搞错了。
Java视角:OpenClaw的“API优先+UI自动化兜底”双通道,和Java中**“优先调用内部服务,降级走HTTP接口”** 的思路完全一致。在微服务架构中,一个服务调用另一个服务时,如果存在gRPC接口,优先走gRPC(性能好、结构化);如果没有,降级走REST HTTP(通用但开销大)。OpenClaw的Skill系统则相当于Java中把重复的业务逻辑封装为可复用的Service方法——一次调通的流程,沉淀为标准化Skill,下次直接调用,不需要重新规划每一步。
四、从单体Agent到多Agent团队:当“一个人”不够用的时候
前面讲的都是一个Agent的循环。但当一个任务复杂到超出单Agent的上下文窗口或能力边界时,就需要多个Agent协作。这个演进方向用织灵Coda Loom的实践来说明最清楚。
织灵Coda Loom 2.0的核心创新是多ADE(工程级数字机器人)协同交付模式。它通过DAG工作流驱动产品经理、架构师、开发工程师、测试工程师及运维工程师等多角色智能体协同作战,让多个AI角色像人类团队一样分工配合、互相校验。实际落地数据值得关注:高端设备制造商复力克采用织灵私有化部署后,研发效率提升75%、代码缺陷率降低50%、新员工上手时间缩短80%。能源领域客户的测试效率提升2倍以上,研发交付周期缩短60%。
这些数据的意义不在于“数字好看”,而在于它验证了一个判断:生产级Agent的瓶颈不是单个Agent的智力,而是多个Agent之间的协作可靠性。一个Agent写代码、另一个Agent审代码,一个Agent做规划、另一个Agent做执行——这种“读写分离”的设计思路,正是让Agent系统从“能做”走向“能稳定地做”的关键。
Java视角:织灵Coda Loom的DAG工作流驱动多角色协作,和Java中Camunda/Activiti工作流引擎的设计思路同构——节点是Service Task(每个ADE相当于一个专业化的Worker Service),边是Sequence Flow(任务流转路径),状态是Process Variable(共享的团队上下文)。区别在于,路由决策不再是预定义的规则,而是由每个ADE根据当前上下文动态做出的。
小结:理解Agent的三个关键锚点
回到本文的核心命题——Chatbot解决“怎么回答”,Agent解决“怎么完成”。如果你只从这篇文章带走三件事,建议是:
第一,循环是本质。Agent和Chatbot的分水岭不是“能不能调工具”,而是“有没有自主循环”。工具调用是循环中的一个动作,规划是循环前的准备,记忆是循环中的状态保持。所有Agent技术概念都可以挂在“感知—思考—行动”这个循环上来理解。
第二,100:1的Token比是工程约束的锚点。Manus披露的这个数据不是理论值,是生产系统的实际运行特征。它意味着Agent的优化重点不在“怎么生成更好的回复”,而在“怎么让上下文的复用效率更高”。KV缓存、上下文压缩、文件系统作为外部记忆——这些技术方向都由此而来。
第三,多Agent是规模化的必由之路,但可靠性是第一约束。织灵的落地数据说明多Agent协作能带来可量化的效率提升,但前提是“可控”——可审计、可回滚、可度量。这和Java工程师做分布式系统的经验高度一致:分布式带来的扩展性,必须用工程可靠性来交换。
下一篇进入1.2 Agent的上下文工程,用Manus的KV缓存设计做主线,深入拆解“为什么生产级Agent的上下文管理和Chatbot的对话历史管理,是两件完全不同的事”。