# 同一句问题，为什么答案时好时坏：随机性、上下文，以及你能管的几件事

把“答案时好时坏”拆成两件事：生成时的随机分岔，和模型真正读到的整段上下文

> 大模型原理 · 使用技巧 · 约 7 分钟 · 09 月 28 日

## 本篇要点

1. 同一句问题得到不同答案，混着两件不同的事：生成过程本身带随机性，以及模型这次读到的是整段上下文而不是你那一句话。
2. 模型挑下一个词时，若几个候选可能性接近，挑中哪个就带偶然性；一旦在这里分岔，后面的整段话会沿不同方向写下去，所以差异不只体现在措辞，也可能体现在结论上。
3. 把随机性调到最低并不能保证逐字一致：一次实验里，同一提示词重复 1000 次出现了 80 种写法，前 102 个词完全相同，从第 103 个词开始分岔；另一项研究里，五个经 API 调用的模型在八个任务上各跑十次，正确答案比例波动最高达 15 个百分点。
4. 这个随机性参数普通人一般改不到，而且波动的一部分发生在服务端，用户无从控制。因此重问一遍得到不同答案，既不代表上次撒谎，也不代表这次才对。
5. 上下文指模型这次生成时能看到的全部文字，包含你这句话、之前的整段对话、应用预设的指令、你贴进去的材料，以及联网搜索返回的片段。
6. 上文里留下的错误说法会继续参与生成，追加纠正并不能把它擦掉；同样的问题，只给相关片段比塞进整段冗长历史更容易答对，关键信息埋在长文中间最容易被忽略。
7. 上下文窗口是一次能容纳的文字上限，超出部分会被截断或压缩；窗口变大只意味着放得下，不意味着用得更好。
8. 普通能控制的做法：一个话题开一段新对话、把材料放进去、一次问一件事并把关键信息放在问题附近、不满意时改原话而不是追加、不把“重问一遍答案一样”当核实。

---

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

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

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

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

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

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

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

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

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

一个能看清这个过程的具体例子。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]。

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

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

## 术语表

- 上下文：模型这一次生成时能看到的全部文字，不只是你刚打的那一句，还包括之前的对话、应用预设的指令和你贴进去的材料。
- 上下文窗口：上下文一次能容纳的文字上限，超出的部分会被截断或自动压缩。
- 生成的随机性：当几个候选词的可能性咬得很紧时，每次挑中哪个带偶然性，因此同样的输入也可能得到不同答案。

## 来源

1. [Thinking Machines Lab: Defeating Nondeterminism in LLM Inference — 1000 次采样得到 80 种写法、前 102 个词相同的实验](https://thinkingmachines.ai/blog/defeating-nondeterminism-in-llm-inference/)
2. [Non-Determinism of “Deterministic” LLM Settings — 最确定设置下 API 模型重复运行的准确率波动](https://arxiv.org/html/2408.04667v5)
3. [Chroma: Context Rot — 输入越长，模型对上下文的利用越不可靠](https://research.trychroma.com/context-rot)
4. [Lost in the Middle: How Language Models Use Long Contexts — 关键信息位于开头或结尾时表现最好](https://arxiv.org/abs/2307.03172)
5. [IBM: What is a context window? — 上下文窗口的定义与占用来源](https://www.ibm.com/think/topics/context-window)

---

原文：https://pangzhengboyin.com/articles/why-same-prompt-gets-different-answers-12fde62a

> **庞征博引** · 想学的，慢慢都会
>
> 庞征博引是把想学的东西写成连载的 AI 学习工具。说出想学什么，它会先了解你的基础，再把主题写成一篇篇 5–10 分钟能读完的文章；边读边问，接下来学什么跟着你走。这篇就是这样写出来的。
>
> 开始你自己的连载 → https://pangzhengboyin.com
