上一篇讲清了一件事:这类模型写每个字的时候,只做一件事——看着已经出现的文字,给所有可能的“下一个词”估一个可能性,然后挑一个,接上去,再重复。

这一篇回答紧随其后的一个日常困惑:为什么同一句话,早上问和晚上问不一样?为什么同款模型,你用着很顺,别人用着总觉得很笨?这里其实混着两件完全不同的事,分开看之后,你会发现其中一大半的差别,是你可以动手改的。

先说清“不一样”有哪两种

第一种:你给的输入真的一个字都没变,但两次输出不同。这来自生成过程本身带的随机性。

第二种:你以为输入没变,其实变了——模型读到的根本不是你那句话,而是一整段上下文。同一句话在不同上下文里,等于两道不同的题。

质量差别大的情况,绝大多数属于第二种。所以先花一点篇幅说清第一种,再重点讲第二种。

第一种:它每一步都在几个候选之间挑一个

上一篇说过,它挑下一个词时依据的是“可能性大小”。这里补一个细节:可能性最高的那个候选,并不总是遥遥领先。

有时候,排第一和第二的候选咬得很紧。这时这次挑中哪个,就带上了偶然性。挑中的词接上去成为新的上文,又会改变下一步的候选分布,于是越往后差别越大。

一个能看清这个过程的具体例子。2025 年,Thinking Machines 团队用同一句提示词“Tell me about Richard Feynman”,在把随机性压到最低的设置下重复生成了 1000 次,出现了 80 种不同的写法。有意思的是,这 1000 次输出开头的 102 个词完全一致,全都写到“Feynman was born on May 11, 1918, in”;从第 103 个词开始分岔:大多数次接着写“Queens, New York”,少数几次写的是“New York City”1。

这个例子里,分岔点正好落在信息本身模糊的地方——一个人出生地的写法可以有多种。一旦在这里分岔,后面的整段话就顺着不同的方向写下去。所以“同一句话问两次,只是措辞不同”这个印象并不总成立:在几个候选一直咬得很紧的长回答里,它也可能给出不同的结论、不同的推荐、不同的排序。

还有一点值得知道,省得你白折腾:不要指望把它调成“最确定”就能得到逐字一样的答案。这个“随机性高低”的参数,普通人一般也改不到;而且即便在服务端把它调到最低,实测也很少完全一致。一项研究让五个经 API 调用的模型,在八个任务上把同样的输入各跑十次,正确答案的比例波动最高达到 15 个百分点2。

所以,重问一遍得到不同的答案,既不是它“刚才撒谎了”,也不代表“这次才是对的”。这条路本来就有岔口。想让结果更稳,通常的办法不是反复重问,而是换个更具体的问法、多给一点线索,让那些咬得很紧的候选分出高下。

第二种:它读到的根本不是你那句话

现在说更重要的那一半。

模型这一次生成时能看到的全部文字,叫 上下文。你打的那句话只是其中一小块。上下文通常还装着:

  • 之前整段对话,包括它自己说过的每一句话;
  • 应用方预先写好的指令(常叫系统提示),规定了它以什么身份说话、什么口吻、能不能联网。这部分你看不到;
  • 你上传或粘贴进去的文件、表格、聊天记录;
  • 如果开着联网搜索,搜回来的网页片段也会被塞进去。

于是“同一句话”其实很难真的相同。你在一个刚开的新窗口里干净地问一句,和别人在聊了三十轮、中间夹着一个附件和三段跑题寒暄之后问同一句,是两道完全不同的题。同一款模型装进不同 App 表现不一样,一部分原因也在那句你看不到的应用指令上。

上下文里的旧话,会一直被它当依据

为什么多聊几轮就会变笨?还是回到那个机制:它每挑一个词,都要从已有的全部文字里找线索。上文里存在什么,就可能被当成依据。

这有两个直接后果。

第一,你说错的话和它说错的话,都留在里面。它刚才编了一个错误的日期,你回一句“不对,是另一个”。这句纠正并没有把那句错话从上下文里擦掉,错误的那句仍然摆在那儿,继续参与后面的生成。这就是为什么“不断追加纠正”往往越纠正越乱。

第二,篇幅本身会稀释注意力。Chroma 在 2025 年做过一组对照实验:用同一个问题、同样的信息测一批主流模型,一种只把相关的那几段喂进去,另一种把整段冗长的对话历史全部喂进去——答案在两种输入里都完整存在。结果所有模型在“只给相关片段”时都明显更好3。信息在不在,是一回事;信息被多少无关内容包着,是另一回事。

位置也有讲究。斯坦福等机构的一项研究发现,关键信息放在开头或结尾时模型表现最好,埋在长文中间最容易被忽略,成绩甚至可能低于一篇文章都不给的情况4。

还有一个硬约束:上下文长度有上限,通常叫 上下文窗口。超出上限的内容会被截断,或者由应用自动压缩,被丢掉的部分你就等于没给过5。窗口大小可以理解成“这一次它能同时看到多少字”:它决定容量,不保证用得更好——上面两个实验说明,塞得越满,用得反而越不可靠。

你实际能动手的几个环节

把这些拼起来,日常能做的事其实很具体:

一个话题开一段新对话。 话题转了就新开一段,把真正需要的材料重新贴进去。这不是“重置”了它,而是换了一道上文更干净的题。

把材料放进去,而不是指望它从记忆里找。 这仍然是上一篇那条分界线:答案在你给的文字里,它就照着说;不在,它只能猜。上下文变长并不会让猜变成知道。

一次问一件事,关键信息放在问题附近。 别先铺一大段背景,再问一个跟开头呼应的细节。

不满意时改原来那句,而不是不断追加。 多数对话界面允许你编辑自己发过的消息。改它,等于把带偏它的那句话从上下文里拿掉;追加“不对”“再想想”,只会让它更长更糊。

别把“又问了一遍,答案一样”当成核实。 同一个模型两次可能错得一样;而按上面说的随机性,它两次不一样也很正常。真正核实要靠上下文之外的来源。这一步下一篇专门讲。

几条边界

这些都是规律,不是铁律。问题简单、上下文短的时候,两次回答的差别通常只是措辞不同,结论一致——有研究把答案从文字里解析出来再比对,稳定性就比逐字比对高得多2。而任务不同、模型不同,波动大小差别很大,不能从某一个例子推及全部2。

反过来,模型厂商把上下文窗口做得很大,也不等于问题解决了:容量变大只是让你放得下,怎么放、放多少,仍然要你自己决定。

一句话收束:同一句话得到不同质量的答案,一半来自生成时本来就存在的岔口,另一半来自你其实给它的是两段不同的上下文。前者你只能绕开,后者恰好大部分握在你手里。