把一句问题原封不动地再发一次,却得到两种说法,是许多人使用聊天模型时最不安的时刻。第一次它也许说一项政策「适用于所有员工」,第二次却补上了地区、日期或例外条件;第一次给出三条理由,第二次换了资料、重点甚至结论。两段文字都写得通顺,反而更难判断该相信哪一段。人们容易把这种差异理解为模型前后矛盾,或把两次相同的答复理解为已经得到确认。两种反应都过于简单。
更贴近实际的理解是:模型通常不是从一个储存好的答案库中取出唯一条目。它会在当前条件下逐步生成文本;若生成方式允许取样,早期的一个选择就可能带出后面的另一条表达路径。同时,用户眼中相同的一句提问,未必对应相同的实际输入:旧对话、附件、启用的工具、指令层级和时间点都可能改变条件。若两次提问相隔一段时间,产品所用的模型版本或公开配置也可能已不同。
因此,真正该问的不是「模型为什么总不一致」,而是这一次差异发生在哪一层。只是换一种说法、重排例子,往往是生成多样性的正常结果;关键事实、适用范围、引用依据或行动建议互相冲突,则是需要回到外部材料核验的警报。相反,几次回答措辞相似,也只能说明它们在某些条件下表现相近,不能证明结论已经被事实确认。
这一区分有实际后果。让模型为文案、标题或方案提供候选时,差异可能值得保留;让它参与健康、法律、财务、安全、就业等会影响现实决定的问题时,差异应被当成测试稳定性和追查依据的入口。要这样使用它,先要把「同一个问题」拆开:生成过程、解码设置、上下文和产品状态,分别会制造什么样的不同。
1. 模型逐词元生成,取样时路径可能分叉
把聊天模型想成「会查资料的答案盒子」,很容易造成误判。即使它回答的是常见问题,输出也不是先选定一整段正确句子,再把那段话原样取出。生成时,系统依据已经给出的输入和已经生成的片段,为下一个词元形成一组候选及其相对可能性;选出一个后,新选出的词元又成为下一步的条件。这里的词元是生成过程中的单位,读者不必把它机械地等同于一个汉字、一个英文单词或一句完整判断。重要的是,回答是一连串局部选择累积而成的序列。
公开的 Transformers 文档把两种常见策略分得很清楚:贪心解码在每一步选取最可能的下一个词元;多项式取样则按照词汇表的概率分布选择,具有非零概率的候选都有可能被抽到。该文档还说明,取样可用于减少重复、产生更有创意和更多样的文本。它描述的是一种公开实现的生成机制,并不告诉我们某个具体聊天产品此刻是否采用取样、采用何种参数,更不替它担保答案正确。[1]
这能解释一种常见现象:两次答案的开头只差几个字,后面却越走越远。例如,一次先写「建议先核对适用地区」,另一次先写「需要先确认发布日期」。这两个开头都会把后续生成带向不同的例子、段落顺序和限定语。后文差异被放大,并不自动表示模型在某个隐藏的事实问题上改了主意;它可能只是从不同的写作入口展开。同理,一次回答较短、一次较详细,也可能来自早期的组织方式不同,而不是一段较长的答案必然经过了更多事实核验。
「概率」也不等于无规则地胡写。它指的是在给定当前文本条件下,对下一个单位作选择的方式;这种选择和外部世界中某项事实是否为真,是两回事。模型可以很稳定地生成一个错误说法,也可以用不同措辞表达同一条已经核实的事实。因此,判断两次输出时,先不要只看相似度。可以把差异粗分为三层:措辞、语序、比喻和可替换例子不同;问题的前提、时间范围或适用对象不同;可查事实、来源、数字或建议行动不同。第一层通常不值得上升为「改口」,后两层才需要进一步检查。
还要避免把贪心解码误作「固定答案」的同义词。即便某个系统在某一步偏向选择最高概率候选,读者仍不能据此断定两次请求的输入、模型版本和服务条件相同;这些变量会在后文分别讨论。反过来,知道某次输出可能带有取样,也不能直接推出它不可信。生成路径可以分叉,事实判断却仍可能相同;问题不在于两段话是否逐字一致,而在于它们分叉后改变了什么,以及那些改变是否影响读者的行动。
2. 温度与截断策略调节答案的可控多样性
人们常用一句「温度高,所以更随机」解释所有不同答案。这句话抓住了一部分现象,却把几个不同的控制项混成了一个神秘旋钮。在公开的 Transformers 配置中,temperature 用来调整下一个词元的概率;top-k 保留最高概率的固定数量候选;top-p 保留累计概率达到阈值的最小高概率候选集合;是否进行取样又由独立的选项区分。它们都作用于生成时的候选分布或候选集合,但不是对事实正确性的刻度盘。[2]
可以把温度理解为影响分布集中程度的一类调节:在同一套实现中,较集中的选择通常更容易反复落在少数候选上,较分散的选择则让更多候选有机会出现。top-k 和 top-p 处理的则是「哪些候选仍留在桌面上」。这种区分并不要求普通用户背参数,更不支持给所有产品套用一个「最佳温度」。很多聊天界面根本不展示这些控制项;即使展示了,不同模型和产品的命名、默认值与实际行为也未必相同。读者能得出的稳妥结论只是:解码设置可能改变文字多样性,不能单独解释所有分歧。
这也是为什么低多样性不应被包装成真相开关。开放式写作、标题改写、访谈提纲、方案发散等任务,目标本来就不是从多个候选中找出唯一一句话,而是得到可比较的表达或思路。核取样研究讨论过最大化式解码在开放式长文本中可能出现平淡、失连贯或重复,并提出从动态的高概率「核」中取样,以在其设定下取得质量与多样性的平衡。这个结论说明确定性不是生成质量的唯一目标;它并没有说明高风险事实问答应追求更多随机性。[3]
在某些受控推理任务中,多条路径甚至可以成为方法的一部分。自一致性研究的做法不是随意问几次后看哪段文字顺眼,而是取样多条推理路径,再按明确规则聚合答案;论文在若干算术和常识基准上报告了相对基线的提升。它支持的有限结论是:多样性在特定任务、特定聚合方式下可能有用。它不支持把普通聊天界面里的五次回答当作五位独立专家,更不支持把「多数说同一个答案」当成事实来源。[4]
所以,面对创作或发散任务,较好的做法是保留几份候选,然后由人以受众、事实约束、语气和目标为标准筛选;差异本身是材料。面对报税规则、药物用法、合同义务或安全操作,较好的问题不是「怎样把温度调低」,而是「答案引用了什么原始依据、适用于何时何地、我能否独立核对」。把设置调得更保守,可能使语言更集中,却不能替读者完成来源审查,也不能消除输入、上下文和产品变化带来的差别。
3. 对话状态、指令层级与工具输出改变实际输入
同一句可见文字并不必然是同一次实际请求。最直观的变量是对话历史:在延续会话中,模型可能需要同时处理前面谈过的任务目标、人物、地区、格式、纠正意见和已经生成的内容。用户以为自己只是再次问「这个方案可行吗」,系统接收到的条件却包含前文对预算、截止日期或风险偏好的描述。新开会话则可能没有这些条件。哪一种更好,取决于目的:连续任务需要保留背景;要诊断同一问题为何分歧,才需要主动缩小背景差异。
公开 API 的会话状态说明可以帮助理解这一点。OpenAI 的文档写明,会话可保存状态,会话项目能够包含消息、工具调用、工具输出及其他数据;用先前响应继续时,后续响应可以共享上下文。文档还提醒,上下文窗口覆盖输入、输出,以及部分模型的推理词元。它证明的是一个公开 API 如何传递条件,而不是证明某个消费级聊天界面必然保存了什么、又在何处截断了什么。[5]
除了历史,输入还有层级。OpenAI 的会话 API 参考列出 user、assistant、system、developer 等消息角色,说明 developer 或 system 指令的优先级高于 user,并包含 function_call_output 这类工具输出结构。这个事实足以说明,用户看见的一句提问可以只是完整输入结构的一部分。它不允许我们倒推出某个产品的未公开系统指令,更不允许把每一次意外回答都归因于「后台偷偷改了提示词」。在没有公开证据时,最多只能说:如果产品加入高优先级规则、工具定义或其他上下文,那么用户只复制可见一句话,控制的变量仍然不完整。[6]
附件和工具把这个区别变得更具体。用户上传的一份合同、表格或会议纪要,可能让回答围绕其中的文字组织;开启联网、检索或其他工具时,工具在不同时间返回的网页、文件片段或数据也可能不同。此时,两次回答引用不同链接,未必是纯粹的语言取样在作怪,可能是输入材料或即时检索结果已经变了。反过来,若两次工具结果相同,仍不能因此证明结论正确,只能把一个潜在变量暂时控制住。
这给重复测试带来一个朴素但常被忽略的原则:先说清楚自己想比较什么。若要比较同一可见问题在尽量相同条件下是否稳定,应使用独立新会话,移除未记录的附件,固定语言、要求的输出格式和可见功能开关,并保存时间。若要研究历史是否影响回答,就应只改变历史这一项,把其他条件记录下来。把模型、工具、附件、会话和问题文字同时换掉,再比较两段答案,得到的只是两个不同实验条件下的结果,无法可靠地把差异归给其中任何一个因素。
对普通用户而言,这并不意味着必须把每次聊天都变成实验室操作。它只是改变一个习惯:当第二次回答多出例外、换了地域或引用,先问「这次带进来的材料与上次是否相同」,而不是立刻选择更自信、篇幅更长的一版。对于需要留痕的工作,保存提示文本、附件版本、是否使用工具和对话位置,往往比反复润色提问更能解释后来为何出现不同答案。
4. 模型版本和服务配置会改变同一提示的行为
即使把问题文字、会话和可见设置都尽量固定,时间仍是一个变量。产品名看起来没有变,不等于背后的模型快照、训练后的行为边界或服务配置永远不变。OpenAI 的 API 参考明确提示,不同模型快照之间的提示行为可能改变,输出本身也具有可变性;若需要更一致的提示行为和输出,文档建议使用固定的模型版本并进行评估。这是有关该 API 的公开兼容性说明,不能外推成所有服务都以相同方式命名或更新。[7]
有些技术用户会试图用 seed 一类控制项复现一次请求。OpenAI 的归档示例说明,在其当时的 Chat Completions 和 Completions 范围内,固定 seed、请求参数和 system_fingerprint 后,输出大多会一致,但仍不作确定性保证;其中 system_fingerprint 用来识别可能影响确定性的模型权重、基础设施和服务器配置变化。这里有两个不能省略的限定:页面本身是归档材料,当前支持范围可能已经不同;而且能够复现一次输出,和输出已经正确,仍是完全不同的问题。[8]
模型生命周期也不是只存在于理论中。Anthropic 的平台文档说明,随着新模型发布,旧模型会定期退役,并建议依赖这些模型的应用在迁移至替代模型前做充分测试。这个例子只能证明版本替换与迁移测试是实际产品运营中的公开变量,不能说明某次聊天请求经由哪条内部路径处理。它的价值在于提醒读者:跨越数日、数周或一次更新后再比较回答,应先把它视作可复现实验条件改变的信号,而不是试图从成文答案反推提供商未披露的决定。[9]
记录方式应随使用场景而变。API 使用者若有权限和可见字段,可以记录模型快照、参数、请求时间、请求 ID,以及可用的系统标识;这些记录有助于复查和排错。一般聊天用户通常拿不到全部技术信息,仍可记下界面显示的模型名、日期与时区、是否启用联网或文件功能、可见的版本提示和完整回答。记录不必假装精确到无法观察的内部细节;它的作用是让后来的人分辨「模型换了说法」和「测试条件换了」,并知道哪些问题无法仅凭用户界面回答。
5. 重要决策的可信使用依赖稳定性测试、来源核验和版本记录
重复提问最有价值的地方,不是举行一场答案投票,而是暴露一个答案在什么条件下会改变。对于不影响现实行动的写作任务,这个发现可以帮助挑选更合适的版本;对于会影响健康、法律、财务、安全、就业或其他重要决定的问题,它应该触发更严格的核验。NIST 的生成式 AI 风险管理资料建议以已知事实基准和多种评估方法检查输出的准确性、质量、可靠性和真实性,并建议部署、记录事实核查技术,特别是在信息来自多个或未知来源时。这是一份面向组织和 AI 参与方的自愿框架,不会替个人作出医疗、法律或投资判断;但它支持一个朴素原则:不能只比较回答的文风或多数意见,还要比较可核查事实和原始依据。[10]
可以采用一套本文提出的「5×2 重复提示记录法」作初步诊断。它不是研究结论,也不承诺测出真实准确率;它只是把模糊的「再问一次」变成可回看的比较。先选一个会影响实际判断、但事后能够查到原始权威资料的问题。把地区、适用对象、截止日期、希望的输出格式和「请列出原始来源」等要求写进同一段提示文本。问题越具体,越能避免模型各自替你补出不同前提;但具体提示仍不能保证它给出的资料真实或完整。
第一组做五次彼此独立的新会话。每一次逐字复制同一提示;若界面允许选择模型、语言、回答长度、联网或其他工具,应固定并记录这些可见条件,也记录附件是否为空。把这套提示、模型选择、语言、附件状态、工具开关和输出要求记为共同基线;五次都在发出提示前恢复到这份基线,不继承上一轮的回答或临时调整。保存完整回答、日期时间和其中可访问的来源链接。独立新会话的目的不是假装消灭所有不可见变量,而是尽量不让上一轮回答成为下一轮的背景。五次不是一个神奇样本量,只是让读者不至于把一次偶然的流畅表达误当作稳定模式。
第二组同样做五次彼此独立的复现,并且每一次都先回到第一组已经记录的共同基线。为了只检验一个可见变量,可以选择「固定背景材料」这一项:建立五个新的空白会话,分别复制相同的提示、模型选择、语言、工具开关和输出要求,再为每个会话附上同一版本、内容完全相同的一份文件。相对于第一组,唯一主动改变的是这份文件;第二组内部五次的文件和其余条件则必须一致。不能在一条不断累积历史的会话里连续追加五次,因为前一次回答会成为后一次的上下文,使改变不再只有一个变量。组内还应确认文件内容、名称和版本标记不变;若一次上传失败、工具状态改变或界面自动加入新信息,应舍弃那次记录,从共同基线重新开始,而不能把它接在已产生回答的会话后面。
比较时,不要把五段文字并排后凭感觉判定。给每一份回答标记四项:最终结论是什么;依赖哪些关键事实、数字和日期;引用了哪些原始来源;建议读者采取什么行动、保留什么条件或寻求什么协助。若有资料,直接打开原始法规、监管说明、产品文件、研究原文或机构公告核对,而不是只比较模型给出的摘要和链接标题。对 API 使用者而言,如果服务提供可用的控制项,还可以固定模型快照、参数和 seed,并保存 system_fingerprint;这些做法可提高复查的条件一致性,却不能替代正确性评估。[8]
这种记录会让「正常差异」和「需要追查的差异」显得更清楚。正常候选包括不同的措辞、例子、排列顺序和可替换的写作方案,而可核查事实、适用范围、来源和行动结论保持一致。需要追查的情况包括前提被悄悄改写、地域或时间范围不同、关键数字不一致、引用从原始材料换成转述材料,或一版省略了另一版的限制条件。先定位这种变化较可能与取样、会话、工具结果还是版本有关,再回到原始资料核验;不要让模型自己用第三次回答裁决前两次的冲突。
警报则更明确:同一高影响问题中,模型对法律义务、医学处置、资金转移、安全操作、核心事实或来源真实性给出相互冲突的建议。这时不该挑选语气最果断的一版,也不该继续多问直到出现喜欢的答案。应暂停把回答当作行动依据,转向适当的独立权威渠道,例如监管机构或原始文件,并在需要时咨询具备相应资格的专业人士。模型可以帮助整理问题、列出待核实的项目或找到需要阅读的材料;它不能因为重复了几次,就获得替代外部责任和专业判断的资格。
同样需要防止走向另一端:五次一致可能只是同一错误模式的重复,五次不一致也可能只是开放式表达的正常多样性。稳定性测试能暴露不稳定的范围,却不能量化真实世界的准确率;版本记录能帮助复现过程,却不能替代来源核验。它们的意义在于把「我感觉它变了」转化为可以检查的条件、可追溯的依据和可说明的限制。
回到最初的问题,同一个问题得到不同答案并不天然表示模型故障,也不天然表示其中一段是正确答案。分界线不在两段文字是否逐字相同,而在关键结论能否在可比条件下稳定出现,所依据的事实能否追溯并由外部来源核验,以及当它会改变人的行动时,使用者是否留下了足够的版本和条件记录。把回答当作待核验的草案、线索或候选方案,才是面对差异时更可靠的使用方式。