知识截止日期
语料决定它偏向谁、缺哪一块,而语料收集停在某一天。凡是会过时的信息,都得由你在这一次请求里补进去。
这一章回答一个问题:它交回来的话,哪些能信。答案的根子在一处——它的能力不是凭空来的,是语料的形状。而语料有两个天生的缺口:它只装过被公开写下来的东西,而且收集到某一天就停了。所以它的答案里,总有整块的世界从来没出现过。
读完你能回答:
- 为什么你们内部的业务口径,它答得理直气壮却全不对?
- 同一个问题,为什么换个语种问、换个技术栈问,深浅会不一样?
- 「最新版本」「目前价格」这类问题,它为什么答得格外不准?
没进过语料的东西,在它眼里就不存在
你们公司的内部文档、内部的口径和定义、没有公开的行业数据、客户名单、上周刚改过的流程——这些东西在公开语料里一个字都没有。这跟「它知道得不全」不能算同一件事:它是压根没有见过。
真正的麻烦就在这里:「完全没见过」和「见得很少」在它身上的反应是一样的,都是照样给你一个答案。 你问它一个只有你们内部才用的字段是什么意思,它会顺着字段名的字面意思猜一个,语气跟它回答真正掌握的问题时一模一样。编造最密集的地方就在这里——它不是不肯说不知道,是它没有这个状态。
语料里有什么,它哪一块就强
各家怎么配比不对外公开,但大结构是清楚的:网页占最大一块,书和论文一块,代码一块,对话和问答一块。此外还有一轮人工标注的偏好数据,那一轮不装事实,装的是姿态。
- 网页给的是广度。 百科、论坛、新闻、博客、商品页都算在内,所以它什么话题都能接上几句;代价是网上那些错的、过时的、带营销腔的内容也一起吃了进去。它口中所谓的「业界最佳实践」,不少时候只是被重复写得最多的那一种说法。commoncrawl
- 书和论文给的是长程推理。 前后连贯几千字、层层递进的论证,只有长文本里才有。但受版权限制,这部分实际拿到的量比外界以为的少,它因此在通俗话题上远比在专业深水区靠得住。pile
- 代码给的是结构感。 语法严格、对错能被机器直接判定的文本,用来训练的价值格外高。它之所以能一次给出程序就能解析的结构化输出,很大程度上要归功于代码语料。
- 对话给的是人话。 自然的口语、问答之间的节奏,都是从这一块学来的。
有一轮数据不装知识,只装姿态
偏好数据那一轮解决的是另一个问题:什么样的回答更受人喜欢——语气、篇幅、什么时候先给结论。它塑造的是姿态,跟知道多少事实没有关系。所以同一套知识,可以长出一个说话直接的产品,也可以长出一个总在绕圈子的产品。
副作用里有一样值得单独说:它会顺着你说。这个倾向和语料里装了多少事实没有关系,纯粹是训练奖励的产物——凡是顺着提问者预设给出来的回答,在标注里拿到的分数都更高。产品里用带着预设的问法去征询它的意见,收获的往往是一份确认,而不是一次判断。这类诱因具体怎么起作用、怎么绕开,编造那一篇单独讲。
写得多的那一类,它答得熟
语料不是对世界做均匀采样,采的是「这件事有多少人写到过网上」。写的人多,它就熟;写的人少,它就生。这种偏差是系统性的,落到具体场景里至少有这么几层:
- 语言这一层。 同一个问题换成英文问、再换成中文问,能问出的深度不一样;语种越小,差距越明显。
- 技术栈这一层。 社区里被讨论最多的那套写法,它张口就来;你们自己封装的第二层,它只能靠名字猜。
- 内容层次这一层。 写给大众看的解释遍地都是,行业内部真正的做法很少被写下来,于是它给的答案听着都对,落到项目里处处不合。
- 叙事方向这一层。 成功案例和正面宣传随处可见,失败复盘和负面细节少得多,所以它对风险的估计天然偏乐观。
做产品的人要格外留心最后一条:你让它评估一个方案,它给出的评价,往往等于这个方案在网上被宣传出来的样子,而不是它在真实项目里跑起来的样子。语料在语言和领域上的分布,直接决定了它在哪类任务上表现得好。stanford-ai-index
应对的办法很朴素:把「用哪一套」的决定权收回自己手里。 别问它「该用什么方案」,方案由你来定、交给它去执行,把它的活限制在你给定的约束之内。按既定路线执行是它擅长的,替你选路线不是。
过了那一天,它按旧模式往下推
语料收集到某一天就停了,之后还有训练、评估和内部测试,才轮到发布。所以你手上的模型,知识比今天旧一大截,往往比它自己的发布日还要旧几个月。 各家会在模型文档里给出这个日期的量级,可以查,但别把它当成精确刻度。claude-models
比日期本身更要紧的是:这条线在现实里并不干净。 不同来源的新旧程度差得很远——一份标准文档可能好几年没修订过,一条评测榜单每周都在动;而越靠近截止日,网上的讨论越少,语料密度越低,它反倒比更早的时期还陌生。所以准确的说法不是「某月某日之前它全知道」,而是越新的事它越不可靠。还有一条常被忽略:你问它自己的知识截止到什么时候,这个回答同样是生成出来的,要准数得去查官方文档。
过了这条线的事,它的反应方式是固定的:没有记忆,但见过大量同类事情的规律,于是照规律往下推。下面四种情形最容易被它骗过去:
- 变化快、格式又固定的内容。 型号、批号、标准号、行政区划代码——格式把答案框得很死,填一个不存在的值毫无难度,而且看不出破绽。
- 相对时间。 「这个季度还剩几天」「距离那个节点还有多久」——它不知道今天几号,起点错了,后面每一步都跟着错。
- 「最新」「目前」这类措辞。 提示词里一出现这些词,你先得确认一件事:它知道现在是什么时候吗?
- 榜单和基准分数。 它给的是语料里那一版数字,谁排在前面、差距有多大,早就不一样了,它却讲得像刚看过。
凡是「最新」都要你喂
办法不在模型那一侧,而在你这一侧:凡是会过时的信息,都得由你在这一次请求里递过去,别指望它替你记着。
- 日期写进提示。 一行「今天是某年某月某日」就能修好所有相对时间计算,成本几乎为零。
- 要事实就先检索。 把真实原文取出来放进上下文,再让它基于原文回答——这把「回忆题」换成了「阅读理解题」,正确率会有质变。
- 实时数据走工具。 航班动态、工位占用、账户余额这一类每分钟都在变的内容,检索也跟不上,必须让它当场去查。
- 把版本钉死。 让它调用某个依赖时,把版本号写进提示,关键函数的签名也一并给出,别让它猜是哪一版。
- 冲突时以材料为准。 明确交代一句:给你的资料若与你的既有认知有出入,一律以资料为准。少了这句话,它会把新信息和旧记忆揉成一个两边都不对的版本。
路该走哪条,看的是这块知识的两个属性:体量,以及变化的频率。一页纸就写得完、几个月不动的内部口径,写进提示最省事;整本手册、每隔几周就有修订的文档,挂检索更划算;分钟级变动的东西,只有交给工具去现查。
再往上一层,还有一个界面上的动作:把信息的时间标出来。 答案来自模型记忆的,就说明它是截止到某个时间的认知;来自实时检索的,就把来源和取到的时间一并露出。用户看得见时间,误判的代价就小得多。
由此得出一条底线:某个场景的正确答案如果完全落在语料之外,那它就不该交给模型直接作答——先让系统把信息取出来,模型只负责加工。这条线划不清,做出来的功能必定是编造的重灾区。 而把外部知识在提问时递进去的标准做法,就是 RAG。
