认真地使用语言模型做开发大约半年后,我撞上了一堵意料之外的墙。当时,我想把一个3000行的代码库塞进提示词里,好让模型帮我重构一个棘手模块。结果模型一直在忘事。它回答文件开头某个函数的问题时,就像从未见过四百行之后的类定义一样。倒也不算胡言乱语,它只是基于手里能抓住的那点信息在干活。
就是从那一刻起,上下文窗口对我来说不再是评测数字,而成了真正的设计约束。
打开网易新闻 查看精彩图片
从那以后,我和很多开发者聊过,大多是通过公开构建和发布产品的方式。同样的规律反复出现:人们抽象地知道上下文窗口是什么,在营销文案里见过那个数字,但直到出了问题,才会真正去思考它。
上下文窗口,就是模型一次能处理的全部文本量:你的系统提示词、对话历史、注入的任何文档,以及正在生成的回答,全都算在一起。一旦超出限制,会出现两种情况。要么硬报错,要么模型悄悄丢掉较早的内容。两种都不优雅,而静默丢内容更糟,因为等到输出开始行为异常时,你才会意识到问题。
对开发者而言,上下文窗口就是模型做当前任务时的工作记忆边界。不是它的通用知识,那些来自训练;也不是推理能力,那是架构决定的。就是工作记忆,在你运行的这个具体会话里。如果你做的是让用户进行长对话的应用,或者往流水线里注入文档,或者跑多步智能体任务,上下文窗口就是那个你不断撞头的天花板。
理解这一区别,比人们以为的重要得多。训练数据影响模型知道什么,而上下文窗口影响它在当下能够推理什么。
热门跟贴