设想你让助手把通知里的“周五闭馆”改成“周六闭馆”。它马上回答:“已修改。”你打开文件,周五还坚守在原地。
对于纯文本生成,写出“已修改”只是产生了一段文字。文件存在于另一个系统里,改变它需要实际操作。模型要从回答问题走向办理任务,就必须跨过这道边界。
先把一句话变成可执行的请求
设想助手能使用三种工具:读取文件、替换指定文本、重新读取文件。工具说明告诉模型,各工具做什么、需要哪些参数、会返回什么。
模型可以先生成一个结构化请求,指定读取哪份通知。宿主程序接到请求后,检查格式与允许范围,真正执行读取,再把文件内容作为工具结果交回来。决定“读哪个文件”与实际“打开文件读取字节”,由不同环节承担。
然后模型根据读到的内容提出替换请求。执行成功后,文件才发生变化。模型输出的工具参数如果错了,程序可能报错,也可能作用于错误位置;工具可用并不保证调用正确。
2022年公布的ReAct研究,将语言中的推理与面向任务的动作交替安排,让外部观察参与接下来的处理,是理解现代语言模型行动循环的一项代表工作。1
和第十二篇的检索相比,读取只是其中一种工具。有的工具取得信息,有的改变状态。后者一旦执行,世界可能已经变了。通知上的日期不会因为模型后来换了个说法,就自动变回去。
为什么执行以后还要再看一眼?
仍用同一教学任务。工具返回“未找到周五闭馆”。这时合理的下一步不是宣布完成,而是检查是否有空格、日期格式差异,或者目标文件是否选错。
设想重新读取后发现正文其实是“本周五暂停开放”。模型可以根据实际内容提出对应改动;工具执行后,再读到“本周六暂停开放”,才有依据报告文件中的变化。
观察、选择动作、执行、取得新观察,再决定下一步,这就是本篇使用的Agent基本工作方式。Agent常译作智能体,但行业定义并不统一。我们在这里明确指能够围绕目标,根据反馈组织若干行动的系统,不把任何一个会聊天的角色都自动算入。1 2
循环的价值在于后一步可以依赖前一步尚未发生时未知的结果。它也能出错:找错文件、误读工具返回、重复修改,都可能让任务偏离。因此“跑了很多轮”不等于“进展很多”。洗衣机同样很擅长循环,但它不负责把通知发到正确日期。
与ELIZA时期相比,这里的关键已经不限于回应文本与上一句是否搭得上。外部文件是可独立检查的对象,成功必须体现在那个对象上。
流程写死,还是让模型决定下一步?
设想另一个需求非常稳定:每天读取一份表格,计算总数,按固定模板生成摘要。程序完全可以预先规定步骤;其中某一步让语言模型润色,也不会让整套程序突然获得自由行动能力。
Anthropic的工程文章作了一种有用区分:工作流主要沿预先编排的程序路径运行;Agent则让语言模型动态决定更多处理过程与工具使用。这是该文的架构区分,实际产品可能混合两者。2
对于固定日期替换,受限流程可能更简单可靠;如果任务是“找出通知与网页之间的不一致,修正受影响内容”,相关文件和下一步检查未必事先确定,动态决策更有用。
灵活性的代价是选择更多,也就增加了选错与检查的成本。模型决定每个步骤,通常还需要额外调用与等待。不要仅为获得一个更时髦的称呼,就让本来三步结束的工作开成十二次协调会。
历史变化因此不是“所有自动化升级为Agent”。预设流程仍适合许多明确任务;语言模型增加的是处理变化、组织工具的另一种选择。
工具接口和技能说明,各自补什么?
设想两个文件工具,一个参数叫“文件名”,另一个叫“资源地址”,返回格式又不同。接入更多系统时,开发者必须让模型与宿主程序知道这些接口怎么用。MCP,即模型上下文协议,提供一种连接工具与数据服务的标准化方式;它解决连接约定的一部分,不自动保证每次决策正确。2
再设想项目有份可复用说明,规定修改通知前核对生效日期,修改后检查目录中的所有入口。将这种指令与资源打包为Skill,可以让后续任务按需使用。它主要把工作方法明确提供给系统,并不等于为模型即时训练了新参数。3
工具像实际能操作的设备,Skill像针对工作的方法说明,Agent循环负责在当前情境下组织步骤。三者不能互相替代。拿着详细操作手册,没有编辑工具,文件照旧;工具齐全,目标理解错了,也可能高效地改错通知。
如果任务涉及提交或发送,还必须区分准备内容与实际提交的边界。系统具备调用能力,不意味着任何动作都已经得到授权;权限范围会直接决定哪些请求能被执行。
标题的答案最终落在证据上:真正改好了,应该有执行后的文件状态支持。语言模型生成动作请求,宿主执行,结果进入下一轮判断,这套闭环才让“我来做”有机会变成现实变化。
下一篇,我们把通知换成软件项目。那里最不配合表演的角色已经就位:测试程序。它不太关心“已修复”四个字写得多有信心。