第 5 章
循环高于模型
旧金山市场街以南的街区在2022年10月已经凉下来了。不是那种需要穿厚外套的凉,而是风从海湾切进来、穿过半空置的办公楼群时带着的那种干冷。
哈里森·蔡斯(Harrison Chase)坐在第三街一家咖啡馆靠窗的位子上,面前摊着一台笔记本电脑,屏幕上是一个新创建的GitHub仓库。仓库的名字还没有最终确定,但目录结构已经搭起来了:一个Python包,几个子模块,一个examples文件夹。他刚刚跑通了第一个能工作的原型——一个简单的脚本,让语言模型调用维基百科搜索,读完结果,判断是否需要再搜一次,然后把最终答案写出来。
这个过程不是一次调用完成的。模型先读问题,生成一个“搜索”动作,脚本执行搜索,把结果塞回提示词,模型再读,再决定是继续搜索还是输出答案。总共三次循环。
蔡斯看着终端里跑出来的日志,每一次循环的推理文字和工具调用结果交替排列,像一段对话,但对话的双方不是两个人,而是同一个模型在两种角色之间切换:思考者,行动者,观察者,再次思考者。这个原型在GitHub上被提交的时间是2022年10月17日。几天之后,哈里森·蔡斯会把它命名为LangChain。
但命名是后来的事。这一天的蔡斯只是在做一件很多工程师都在做的事:他被一个想法抓住了,于是动手把它写出来。这个想法不算复杂——语言模型可以做更多事,如果给它一个循环。不是一次问答,不是一次补全,而是一个闭环:推理、行动、观察、再推理。论文里叫ReAct,蔡斯后来在博客里写,他只是想“把这个循环抽象成任何人都能用的组件”。
他当时可能没有意识到,这个动作正在把缰绳层从手艺推向工程。他更不可能知道,就在同一个十月,另一群人——普林斯顿大学和谷歌研究院的研究者——刚刚把同一个想法写成了一篇论文,而那篇论文的标题里就带着ReAct这个词。
把时间拉回2022年初。大语言模型的世界还在消化GPT-3带来的冲击,但开发者们已经开始撞上一堵墙。这堵墙不是模型不够大,而是模型只会说。你问它一个问题,它回答;你给它一段指令,它执行。
但如果你要求它做一件需要多步完成的事——查三个数据源,比较两组数字,算出一个结果,再写在表格里——单次调用不够用。你可以把指令写得很长,把每一步都描述清楚,把中间结果假想出来填进提示词里,然后希望模型猜对。但猜对的比例不高,而且一旦某一步错了,整个链条就断了。
思维链提示(Chain-of-Thought prompting)在2022年1月发表,给了这堵墙第一道裂缝。谷歌大脑的研究者发现,只要在提示词里加上一句“让我们一步步思考”,模型在算术推理、常识推理和符号推理任务上的准确率就会大幅提升。不是微调模型,不是增加参数,只是改了一下提示词。这个发现简单到令人不安——它意味着模型的潜力远超单次调用所释放的,而释放的关键在于结构。
思维链的价值是真实的,但它的边界也很清晰。它仍然固守在单次调用的范式里。模型可以“一步步思考”,但那只是内部推理链,它不能真正去查外部信息,不能在执行过程中修正自己的错误,不能根据中间结果改变后续策略。它像一个人被关在房间里解数学题,可以打草稿,但不能翻书,不能问人,不能站起来走到黑板前看一眼之前写的东西。草稿再详细,也只在房间里。
2022年上半年,一小群研究者开始追问:如果让模型走出房间呢?普林斯顿大学计算机科学系的姚舜宇(Shunyu Yao)和谷歌研究院的几位合作者在这个方向上做了最系统的工作。他们不是第一个尝试把语言模型和外部工具连接起来的人——2021年就有团队做过类似探索,比如让模型调用计算器或搜索引擎——但那些工作大多是零散的,没有形成统一的范式。姚舜宇团队要回答的问题更根本:能不能把推理和行动编织进一个架构,让两者交替驱动,而不是一个在另一个之后?
能不能让模型在思考的过程中随时调用外部世界的信息,然后根据这些信息调整思考方向?他们给出的答案是ReAct。这个名字是Reasoning和Acting的合成词,但它描述的不是两种能力的并列,而是一种交替循环。在ReAct框架下,模型不再是一次性生成最终答案,而是在一个循环中运行:生成一个推理步骤,决定一个行动(比如搜索、查找、计算),执行行动,观察结果,把结果纳入新的推理,再决定下一步行动。这个循环可以持续多次,直到模型判断任务完成。
2022年10月,ReAct论文在arXiv上发布。论文的实验数据清楚显示,对于需要多步检索或计算的任务,这种循环架构的增益远超单纯改善模型。在HotpotQA多跳推理数据集上,ReAct比纯思维链提示的准确率高出近10个百分点;在Fever事实验证任务上,优势同样显著。
更重要的是,ReAct的推理过程是可解释的——人类可以阅读模型每一步的推理文字和行动记录,理解它为什么做出某个决定,在哪个环节出了错。这不是一个黑箱输出,而是一条可追溯的轨迹。
论文的作者们不是工程师,他们是研究者。他们的目标是证明一个架构的优越性,而不是把它变成产品。论文发表后,他们在GitHub上放了一个参考实现,几百行Python代码,演示了如何在HotpotQA和Fever上运行ReAct智能体。代码是干净的,但也是极简的。它服务于实验复现,不服务于生产环境。
现在回到旧金山第三街那家咖啡馆。哈里森·蔡斯在2022年秋天读到ReAct论文时,他看到的不是一篇需要被引用的学术成果,而是一个需要被封装的设计模式。蔡斯此前在机器学习初创公司工作,对提示词工程有实战经验。他知道开发者们正在做什么——他们手工编写提示词,把模型输出解析成行动指令,用if-else逻辑拼接工具调用,然后祈祷整个流程不崩溃。
这些代码散落在各处的Jupyter笔记本和内部脚本里,没有复用性,没有测试,没有抽象。每一次新的任务都需要重新搭一遍。蔡斯判断,ReAct不是最佳实践,而是最小单元。它是一个可以被抽象、被模板化、被包装成可复用组件的循环模式。如果做得好,开发者不需要理解ReAct论文的细节,不需要手写推理-行动循环的提示词模板,不需要自己设计工具接口——他们只需要选择一个智能体类型,传入工具列表和任务描述,框架负责运行循环。
这个判断驱动了LangChain的早期设计。蔡斯在2022年10月底到11月初的几周里密集提交代码,搭建了框架的核心抽象:Chain(链式调用序列)、Agent(基于ReAct循环的智能体)、Tool(可被智能体调用的外部工具接口)、Memory(跨循环的记忆管理)。这些抽象不是凭空发明——它们的原型都藏在ReAct论文的参考实现里,藏在开发者社区分享的零散代码里,藏在过去一年提示词工程积累的经验里。
蔡斯做的事情是把它们萃取出来,命名,定义接口,写成文档,让下一个开发者可以在十分钟内用几行代码启动一个ReAct智能体。这不是一个技术突破,这是一个工程封装。
但工程封装本身可以成为商业事件。当一项能力被封装成组件,使用门槛就降低了,使用者范围就扩大了,价值就从“懂得怎么做的人”转移到“提供组件的人”手里。ReAct论文证明了循环的价值,LangChain试图捕获这个价值。
LangChain的早期增长曲线验证了需求的存在。框架在GitHub上发布后,星标数在几周内开始攀升,不是在GitHub趋势榜上排第一那种爆炸性增长,而是一种稳定的、持续的上行。早期用户主要是独立开发者和初创公司的工程师,他们的反馈集中在同一个方向:这个东西帮我省了时间。
他们把之前花了几天写出来的提示词-工具编排代码替换成LangChain的Agent模块,发现代码量减少了,可维护性提高了,而且——这一点在当时被反复提及——当底层模型升级时,用框架写的代码比手工写的代码更容易适配。因为框架的抽象层隔离了变化。模型厂更新API,框架可以更新底层适配,用户代码不需要改。这在2022年底还不是一个紧迫的问题,但它将在接下来的两年里成为缰绳层公司最核心的生存逻辑。
现在把三个视角并置在一起,同一组事实——2022年秋天,循环被证明是放大模型能力的关键架构——在不同角色眼中呈现出截然不同的意义。对ReAct论文的作者们,这是学术发表。论文被接收,被引用,成为后续研究的基础。姚舜宇在接下来的几年里继续推进智能体架构的研究,ReAct成为这个领域被引用最多的论文之一。研究者们关心的是循环的泛化边界、收敛性、与强化学习的结合可能性。他们不做商业产品,不需要考虑用户留存。
对哈里森·蔡斯和LangChain,这是机会。一个刚刚被学术验证的架构,还没有成熟的工程封装,市场空白已经出现。蔡斯在2022年底到2023年初快速迭代框架,加入更多智能体类型(零样本ReAct、对话式ReAct、自定义智能体),加入更多工具集成(搜索、数据库、API、文件系统),加入更多记忆管理策略。LangChain的定位逐渐清晰:它不训练模型,不提供模型,它只做模型外面的那一层——循环、工具、权限、记忆。换句话说,它做缰绳。
对模型厂,尤其是OpenAI,这是下一轮吸收的蓝图。ReAct论文和LangChain的早期实践清楚地标出了缰绳层的价值所在,同时也标出了模型厂可以吞并的边界。思维链?可以合成为训练数据,让模型在内部产生推理链而不需要外部提示。工具调用?可以变成API功能,让模型自己输出结构化的工具调用指令而不是依赖外部框架解析。多步规划?可以进入强化学习奖励函数,让模型在训练过程中学会更有效的策略。
研究者发表的每一个发现,框架工程师封装的每一个组件,都在为模型厂绘制下一阶段的内化路线图。这就是脚手架悖论的第一次完整呈现。它还没有被命名——这个名字要到2023年才被一位科技评论者提出——但它的结构已经清晰可见。缰绳层的发明是为了放大模型的能力,但放大的方式把价值路径暴露在模型厂的视野里。模型厂拥有底层模型,拥有训练管线,拥有API分发渠道。当一项缰绳能力被验证,模型厂可以选择把它吸收进模型内部,从而消除对外部缰绳的依赖。缰绳公司要么向上爬升到更抽象的层次,远离被吸收的边界,要么留在原地,等模型升级时被替代。
2022年秋天,这个悖论还只是一个理论上的可能性。LangChain的早期用户不担心这个问题,因为当时的模型还远没有能力内化ReAct循环。GPT-3.5和GPT-4还没有发布,函数调用API还在一年的未来,强化学习吞并缰绳的故事还要等到2025年才开始。
站在2022年10月,循环的价值如此明显,而模型内化循环的能力如此遥远,以至于没有人把这个威胁当成实际风险。但悖论的力量不在于它是否立即兑现,而在于它一旦成立就无法被逆转。从ReAct论文和LangChain创立的那个月算起,缰绳层的每一层发明都将沿着同一条轨迹运行:发明、验证、封装、被模型厂吸收、缰绳公司向上爬或死亡。这条轨迹将贯穿此后四年的全部历史。
2022年11月,LangChain还在快速迭代,GitHub上的issu区和Discord社区开始活跃起来。早期用户分享他们的使用案例:有人用LangChain搭建了能查询多个数据库的智能体,有人把文档问答流程封装成了链式调用,有人尝试让智能体自动生成和运行Python代码。
代码生成和执行的案例尤其引人注目——因为代码可以运行,可以验证,可以出错,智能体可以读到错误信息然后修正。这是地面真值定律在循环架构中的第一次现身:当循环中的每一步行动都有可验证的反馈,智能体就能自我纠正;
当反馈不可验证,智能体只是在随机游走。一篇在LangChain社区流传的博客文章记录了这样一个案例:一个开发者让ReAct智能体计算一个复杂的数学表达式,智能体决定调用Python解释器,但第一次生成的代码有语法错误,解释器返回了错误信息,智能体读到错误,修正代码,再次调用,得到正确结果。整个过程自动化,不需要人类介入。这个案例的简单性掩盖了它的深刻性——它演示了循环架构如何把不可靠的模型输出转化为可靠的结果。不是模型变得更聪明,而是循环给了模型犯错和修正的机会。这个案例的作者没有意识到,他正在描述的正是未来两年编程智能体的核心逻辑。Copilot已经证明了代码补全可以在单次调用中创造价值,但ReAct循环打开了一个更大的门:智能体不只是帮你写代码,它可以自己写、自己跑、自己改、自己完成一个任务。从补全到自主,中间隔着一个循环。2022年11月30日,ChatGPT上线。这不是一个渐进式的事件。
ChatGPT的发布在几天内引爆了公众对AI的想象,同时也在缰绳层的轨迹上投下了一道强烈的光。这道光有两个效果,方向相反,但力量相当。第一个效果是验证。ChatGPT本身就是一个对话循环的产物——它不只是单次补全,而是在多轮对话中维持上下文,根据用户反馈调整输出。这个产品形态证明了循环架构对于用户体验的重要性。如果OpenAI只是把GPT-3.5做成一个更好的补全API,它不会获得一亿用户。循环——对话循环、反馈循环、修正循环——是模型从工具变成产品的关键一步。这对于刚刚成立的LangChain和正在推广的ReAct范式来说,是最高级别的市场验证。循环有价值,这是ChatGPT用数据量证明的。第二个效果是淘汰。ChatGPT将模型能力从GPT-3的水平提升到了GPT-3.5系列,指令遵循能力、对话一致性、推理质量都有了肉眼可见的提升。
那些建立在GPT-3能力缺陷之上的缰绳技巧——那些复杂的提示词模板、那些为了解决模型不听话而设计的手工规则、那些为了弥补推理能力不足而拼接的多步流程——在一夜之间贬值。底层模型能力的突增,总是会淘汰低阶缰绳。这不是第一次,也不会是最后一次。对于LangChain而言,ChatGPT的发布构成了一个复杂的压力测试。一方面,ChatGPT的产品形态验证了框架的核心假设——循环和工具编排是释放模型能力的关键。LangChain的早期团队在Discord上讨论ChatGPT时,语气里有一种被证实的兴奋。他们看到自己正在搭建的东西和全球最成功的AI产品共享同一个架构逻辑。另一方面,ChatGPT也展示了底层模型能力突增对框架的威胁。当模型本身变得更强大、更听话、更擅长推理时,某些框架层面的抽象是否还必要?如果模型可以直接在对话中调用工具,为什么还需要一个外部框架来做工具编排?
这些问题在2022年12月还没有人能够回答,但它们已经悬在空气里,像一道还没有落下的闸刀。哈里森·蔡斯在2022年12月的一篇博客里回应了这些隐忧。他没有直接提ChatGPT,而是讨论了框架的价值层次。他写道,框架的价值不在于帮模型做它做不到的事,而在于帮开发者做他们反复做的事。即使模型能力提升,重复性工作的抽象仍然有价值——这是软件工程的基本规律。从机器码到汇编,从汇编到高级语言,从高级语言到框架,每一层抽象都在底层能力提升后仍然存在,因为它解决的不是能力问题,而是效率问题。这篇文章的论证是清晰的,但它隐藏了一个关键的变量。软件工程史上的抽象层——操作系统、编译器、网络协议——底层的硬件能力提升是缓慢的、渐进的,抽象层有足够的时间成熟和捕获价值。但大模型的底层能力提升是突变的、跳跃的。当GPT-4在2023年3月发布时,许多在GPT-3.5上辛苦搭建的缰绳技巧再次经历贬值。
框架的抽象层需要不断向上爬,才能在模型厂的每一次跳升中存活。这个动态——模型厂和缰绳公司之间的进化竞赛——在2022年12月还只是远景。但ChatGPT的发布让远景逼近了。从这一天起,缰绳的故事不再是原理探索,而变成了一场有明确地租和竞争者的商业演进。2022年最后一个月,LangChain的GitHub仓库在开发者社区中持续获得关注。框架的文档逐渐完善,社区贡献者开始提交新的工具集成和智能体类型。哈里森·蔡斯辞去了上一份工作,全职投入LangChain的开发。他做了一个决定,这个决定在后来的历史回顾中将被反复提及:LangChain将保持开源。不是开放核心,不是部分开源,而是完全开源,MIT许可证。这个决定在2022年底看起来是自然的。开源可以加速社区增长,降低采用门槛,建立开发者信任。但它的商业含义将在接下来的两年里逐渐显现。一个完全开源的框架如何捕获价值?如果框架的核心抽象可以被模型厂免费吸收,商业护城河在哪里?
蔡斯在2023年创立了LangChain公司,开始探索商业化的路径——托管服务、企业支持、私有部署——但开源许可证已经写死了。这个选择定义了一条与后来的封闭框架(如Anthropic的特定工具集成)不同的竞争路线。ReAct论文的作者们也在2022年底看到了他们工作的影响力扩散。论文在学术圈内被广泛引用,但它的溢出效应超出了学术边界。GitHub上开始出现各种语言的ReAct实现,不只Python,还有JavaScript、Rust、Go。开发者社区把ReAct从一个学术架构变成了一个通用设计模式。姚舜宇在2023年初的一次在线讲座中提到,他收到的最意外的反馈来自一位金融行业的开发者,这位开发者用ReAct搭建了一个分析财报的智能体,效果出乎意料地好。研究者在乎的是通用性,但使用者发现的是场景——场景是缰绳层真正落脚的地方。
2022年12月,距离ChatGPT上线不到一个月,距离ReAct论文发表不到两个月,距离LangChain的初始提交不到两个月。这三个事件的时间线在历史回顾中看起来像是被精心编排的,但当事者没有一个人在协调。它们来自不同的方向——学术研究、工程创业、产品发布——但在同一个秋天汇聚到同一个点上:循环高于模型。这个判断是对当时流行的“模型就是一切”论调的直接反驳。2022年的大多数AI讨论集中在模型规模和参数数量上。GPT-3有1750亿参数,PaLM有5400亿参数,模型越大越强是共识。但ReAct的循环架构展示了一个不同的路径:不需要增加参数,只需要改变模型外部的结构,就能在复杂任务上获得显著增益。这个发现的意义不亚于模型规模的扩大——它意味着智能的瓶颈不全在模型内部,也在模型外部,在缰绳的设计里。对于2022年底的AI行业,这是一个需要被消化的观念。模型厂希望开发者相信模型是全部答案,因为模型是他们的产品。
但缰绳层的兴起在讲一个不同的故事:模型是引擎,但不加缰绳的引擎只能空转,不能驱动任何东西。引擎越强大,缰绳越重要——因为强大的引擎在脱缰时造成的破坏也更大。ChatGPT的爆发会把AI从开发者工具变成大众消费品,OpenAI会在2023年3月推出插件体系,试图把工具调用的入口收进自己的平台。LangChain会在2023年经历爆炸式增长,也会在增长中撞上“过度抽象”的批评。AutoGPT会在2023年春天创造GitHub星标增长纪录,然后在九十天内从神坛跌落——因为没有地面真值的while循环只是昂贵的随机游走。脚手架悖论将第一次兑现:思维链被合成为训练数据,进入模型内部;工具调用从框架功能变成API功能;多步规划从提示词工程变成强化学习奖励函数。但这一切都还在一月之遥的未来。2022年12月的旧金山,哈里森·蔡斯在LangChain的Discord频道里回复用户问题,窗外是市场街南区的冬日薄雾。
他刚刚提交了一版新的Agent模块代码,在commit信息里写道:“让循环更容易被访问。”这句朴实的话,比任何宣言都更准确地描述了缰绳层在2022年秋天所完成的跃迁——从研究者手里的实验,到工程师工具箱里的组件,再到即将爆发的智能体浪潮的基础设施。循环被发明出来是为了放大模型的能力,但当它被封装成组件的那一刻,它就变成了别的东西:变成了一个可以独立进化、独立捕获价值的架构层。这个架构层的命运,在接下来的四年里,将由它和模型厂之间的进化竞赛来书写。