大可的 AI Builder 手记
跟随系统
颜色主题
长沙小桌实战
大可 Dako
大可 Dako大可 DakoAI Builder · Agent 实践者用 AI 做真正能用的产品。专注探索 Agent 工程化落地、Vibe Coding 实践与商业化交付。
内容平台即将上线,敬请期待
知识来自语料,而语料有个收集截止时间01语料收齐网页、书与论文、代码、对话,收集到某一天为止02权重冻结之后还有训练、评估和测试,发布时知识又旧一截03按旧模式外推截止之后的事没见过,照同类事情的规律推一个04最新由你补会过时的信息写进提示、挂检索或交给工具✓ 凡是「最新」,答案必须由你提供
它不是「知道得不准」,是那一刻之后的世界一次都没见过。但它照样会推一个听起来很合理的答案。

知识截止日期

语料决定它偏向谁、缺哪一块,而语料收集停在某一天。凡是会过时的信息,都得由你在这一次请求里补进去。

这一章回答一个问题:它交回来的话,哪些能信。答案的根子在一处——它的能力不是凭空来的,是语料的形状。而语料有两个天生的缺口:它只装过被公开写下来的东西,而且收集到某一天就停了。所以它的答案里,总有整块的世界从来没出现过。

读完你能回答:

  • 为什么你们内部的业务口径,它答得理直气壮却全不对?
  • 同一个问题,为什么换个语种问、换个技术栈问,深浅会不一样?
  • 「最新版本」「目前价格」这类问题,它为什么答得格外不准?

没进过语料的东西,在它眼里就不存在

你们公司的内部文档、内部的口径和定义、没有公开的行业数据、客户名单、上周刚改过的流程——这些东西在公开语料里一个字都没有。这跟「它知道得不全」不能算同一件事:它是压根没有见过。

真正的麻烦就在这里:「完全没见过」和「见得很少」在它身上的反应是一样的,都是照样给你一个答案。 你问它一个只有你们内部才用的字段是什么意思,它会顺着字段名的字面意思猜一个,语气跟它回答真正掌握的问题时一模一样。编造最密集的地方就在这里——它不是不肯说不知道,是它没有这个状态。

语料里有什么,它哪一块就强

各家怎么配比不对外公开,但大结构是清楚的:网页占最大一块,书和论文一块,代码一块,对话和问答一块。此外还有一轮人工标注的偏好数据,那一轮不装事实,装的是姿态。

  • 网页给的是广度。 百科、论坛、新闻、博客、商品页都算在内,所以它什么话题都能接上几句;代价是网上那些错的、过时的、带营销腔的内容也一起吃了进去。它口中所谓的「业界最佳实践」,不少时候只是被重复写得最多的那一种说法。commoncrawl
  • 书和论文给的是长程推理。 前后连贯几千字、层层递进的论证,只有长文本里才有。但受版权限制,这部分实际拿到的量比外界以为的少,它因此在通俗话题上远比在专业深水区靠得住。pile
  • 代码给的是结构感。 语法严格、对错能被机器直接判定的文本,用来训练的价值格外高。它之所以能一次给出程序就能解析的结构化输出,很大程度上要归功于代码语料。
  • 对话给的是人话。 自然的口语、问答之间的节奏,都是从这一块学来的。

有一轮数据不装知识,只装姿态

偏好数据那一轮解决的是另一个问题:什么样的回答更受人喜欢——语气、篇幅、什么时候先给结论。它塑造的是姿态,跟知道多少事实没有关系。所以同一套知识,可以长出一个说话直接的产品,也可以长出一个总在绕圈子的产品。

副作用里有一样值得单独说:它会顺着你说。这个倾向和语料里装了多少事实没有关系,纯粹是训练奖励的产物——凡是顺着提问者预设给出来的回答,在标注里拿到的分数都更高。产品里用带着预设的问法去征询它的意见,收获的往往是一份确认,而不是一次判断。这类诱因具体怎么起作用、怎么绕开,编造那一篇单独讲。

写得多的那一类,它答得熟

语料不是对世界做均匀采样,采的是「这件事有多少人写到过网上」。写的人多,它就熟;写的人少,它就生。这种偏差是系统性的,落到具体场景里至少有这么几层:

  • 语言这一层。 同一个问题换成英文问、再换成中文问,能问出的深度不一样;语种越小,差距越明显。
  • 技术栈这一层。 社区里被讨论最多的那套写法,它张口就来;你们自己封装的第二层,它只能靠名字猜。
  • 内容层次这一层。 写给大众看的解释遍地都是,行业内部真正的做法很少被写下来,于是它给的答案听着都对,落到项目里处处不合。
  • 叙事方向这一层。 成功案例和正面宣传随处可见,失败复盘和负面细节少得多,所以它对风险的估计天然偏乐观。

做产品的人要格外留心最后一条:你让它评估一个方案,它给出的评价,往往等于这个方案在网上被宣传出来的样子,而不是它在真实项目里跑起来的样子。语料在语言和领域上的分布,直接决定了它在哪类任务上表现得好。stanford-ai-index

应对的办法很朴素:把「用哪一套」的决定权收回自己手里。 别问它「该用什么方案」,方案由你来定、交给它去执行,把它的活限制在你给定的约束之内。按既定路线执行是它擅长的,替你选路线不是。

过了那一天,它按旧模式往下推

语料收集到某一天就停了,之后还有训练、评估和内部测试,才轮到发布。所以你手上的模型,知识比今天旧一大截,往往比它自己的发布日还要旧几个月。 各家会在模型文档里给出这个日期的量级,可以查,但别把它当成精确刻度。claude-models

比日期本身更要紧的是:这条线在现实里并不干净。 不同来源的新旧程度差得很远——一份标准文档可能好几年没修订过,一条评测榜单每周都在动;而越靠近截止日,网上的讨论越少,语料密度越低,它反倒比更早的时期还陌生。所以准确的说法不是「某月某日之前它全知道」,而是越新的事它越不可靠。还有一条常被忽略:你问它自己的知识截止到什么时候,这个回答同样是生成出来的,要准数得去查官方文档。

过了这条线的事,它的反应方式是固定的:没有记忆,但见过大量同类事情的规律,于是照规律往下推。下面四种情形最容易被它骗过去:

  1. 变化快、格式又固定的内容。 型号、批号、标准号、行政区划代码——格式把答案框得很死,填一个不存在的值毫无难度,而且看不出破绽。
  2. 相对时间。 「这个季度还剩几天」「距离那个节点还有多久」——它不知道今天几号,起点错了,后面每一步都跟着错。
  3. 「最新」「目前」这类措辞。 提示词里一出现这些词,你先得确认一件事:它知道现在是什么时候吗?
  4. 榜单和基准分数。 它给的是语料里那一版数字,谁排在前面、差距有多大,早就不一样了,它却讲得像刚看过。

凡是「最新」都要你喂

办法不在模型那一侧,而在你这一侧:凡是会过时的信息,都得由你在这一次请求里递过去,别指望它替你记着。

  • 日期写进提示。 一行「今天是某年某月某日」就能修好所有相对时间计算,成本几乎为零。
  • 要事实就先检索。 把真实原文取出来放进上下文,再让它基于原文回答——这把「回忆题」换成了「阅读理解题」,正确率会有质变。
  • 实时数据走工具。 航班动态、工位占用、账户余额这一类每分钟都在变的内容,检索也跟不上,必须让它当场去查。
  • 把版本钉死。 让它调用某个依赖时,把版本号写进提示,关键函数的签名也一并给出,别让它猜是哪一版。
  • 冲突时以材料为准。 明确交代一句:给你的资料若与你的既有认知有出入,一律以资料为准。少了这句话,它会把新信息和旧记忆揉成一个两边都不对的版本。

路该走哪条,看的是这块知识的两个属性:体量,以及变化的频率。一页纸就写得完、几个月不动的内部口径,写进提示最省事;整本手册、每隔几周就有修订的文档,挂检索更划算;分钟级变动的东西,只有交给工具去现查。

再往上一层,还有一个界面上的动作:把信息的时间标出来。 答案来自模型记忆的,就说明它是截止到某个时间的认知;来自实时检索的,就把来源和取到的时间一并露出。用户看得见时间,误判的代价就小得多。

由此得出一条底线:某个场景的正确答案如果完全落在语料之外,那它就不该交给模型直接作答——先让系统把信息取出来,模型只负责加工。这条线划不清,做出来的功能必定是编造的重灾区。 而把外部知识在提问时递进去的标准做法,就是 RAG。

参考资料

  1. Common Crawl — Open Repository of Web Crawl Data
  2. The Pile: An 800GB Dataset of Diverse Text for Language Modeling — arXiv
  3. AI Index Report — Stanford HAI
  4. Models overview — Anthropic