F14
概念 · AI 基础
知识截止日与模型缺失的那只钟。
模型没有钟:问它今天几号,它是在猜;问它任何东西的最新版本,它答的是训练数据被采集时的情况。真正让老手栽跟头的更微妙——它对截止日之前那几个月的知识,比对两年前的知识稀薄得多,因为互联网当时还没来得及把那些事写完。
STEP 1
截止日是一道渐变,不是一堵墙。
训练数据是文本在被采集那一刻的快照。但围绕任何一件事写出来的东西——文档、教程、争论、勘误、后续分析——会在之后的数月乃至数年里持续累积。紧随事件之后拍下的快照,抓到的是那份公告,以及几乎没有任何理解。
- 「近」意味着稀薄,而不是空白。模型可能认得一个在截止日前不久发布的库,知道它的名字和大致用途,却对它的 API 几乎没有可靠细节。这个状态比彻底不知道更危险,因为它会产出自信、具体而错误的输出。
- 反过来也成立。几年前那些已经稳定下来的主题,模型的知识密实、被反复交叉印证,通常相当出色。
- 别去问模型自己的截止日。那个日期并不是它被训练过的一项事实;它是在推断,而且推断得很差——往往猜得偏早,因为那正是它的证据开始变稀的地方。请改从提供方文档里读。
- 后训练也会挪动这条线。同一模型家族的小版本之间,行为与知识都可能移动——参见后训练。
「它的截止日挺新,所以它知道 X」是错误的推论。正确的推论是:一个主题离截止日越近,模型的自信就越是跑在证据前面——你也就越应该去检索,而不是去回忆。
STEP 2
没有钟,以及随之而来的算术。
模型收到的是文本,不是时间戳。缺了它,「下周二」「这份合同签了多久」「这个还在保修期内吗」全都是对着一个想象出来的「现在」算出来的——而答案回来时自洽且错误,这是最难被察觉的那一种。
STEP 3
智能体会把过时的认知变成动作。
在聊天界面里,一条过时的事实只是一句人读了会打折扣的话。在智能体循环里,它是一次工具调用——而过时的操作性知识比过时的事实危害大得多,因为它看起来和「胜任」一模一样。
- 典型故障都出在带版本的接口上。被移除的 API 参数、被改名的 CLI 标志、默认值变了的库、挪了位置的配置项。智能体写出那次调用,它失败了,而如果错误信息毫无帮助,智能体就会把同样错误的东西再试一遍。
- 宁可去读,不要去回忆。环境才是事实基准,而查证它很便宜:跑一下
--help、打开那份真实的配置文件、请求一次 schema。多一次工具调用,胜过一个看似合理的幻觉外加一次失败的运行。 - 错误信息必须列出合法取值。「参数无效」逼着模型从记忆里猜——而那恰恰是已经过期的那份记忆。「参数
foo无效;合法取值:bar、baz」一步就能终结循环;参见为智能体设计工具。 - 能钉住的就钉住。如果智能体要对着一个有版本的依赖工作,就把版本号放进上下文。「猜装的是哪个大版本」不是一个模型能做成的任务。
STEP 4
让「时效性」成为一个路由决策,而不是一句免责声明。
解法不是在答案后面附一句提醒,而是在设计阶段就判定哪些问题对时间敏感,并强制它们走上一条会读取当前数据的路径。
- 按问题分类,而不是按模型的自信度。价格、可用性、版本、某个职位上的人、法规,以及任何带「当前」「最新」字样的问法——这些一律路由到检索。别把这件事的开关交给模型自报不确定性;它并不可靠地知道自己不知道什么。
- 接地把「回忆」转换成「阅读」。把当前文档放进上下文,就把一道记忆题变成了一道理解题,而模型在后者上强得多——参见幻觉与接地。
- 给检索到的文档打上时间戳。拿到两段互相矛盾、又都没有日期的材料,模型没有任何有原则的方式去取舍,常常会把它们揉在一起。有了日期,你才能指示它优先采信更新的那份。
- 盯住你自己索引的截止日。一套半年前爬取的 RAG 系统,把你当初引入它来解决的那个问题原样复刻了一遍——只不过这一次的截止日是你自己的,你能修。
两处改动能覆盖其中大部分:每次请求都在系统提示词的末尾注入当前日期;并且让一切带版本的东西——API 接口、配置格式、CLI 标志——变成智能体从环境里读到的,而不是从训练里回忆出来的。然后,把检索索引的新鲜度纳入与模型版本相同的复查节奏。从提供方那里继承来的截止日容易记住;你自己造出来的那个,才是会悄悄变老的那个。