同一个提示词发两遍拿到不同回答,先别急着判定工具出问题,也别急着怀疑自己少写了条件。可查的原因通常是三类:两次实际发出去的输入并不完全一致、会话里还残留着上一轮内容、生成过程本身带随机性。这三类的排查方式完全不同,混在一起就只能得到「不稳定」这种没法行动的结论。按下面顺序逐层排除,多数情况能定位到具体一层。
建议先做一次逐字比对:把两轮提问和仍然生效的历史消息都抄下来,确认输入是否真的一致;再分别在新会话和原会话各重发一次,看差异是否跟着上下文走;最后把差异分成事实、结构、措辞三类。事实和关键数字不一致,值得回到输入层补约束;只有措辞不同,通常可以直接收工,不必反复重发。
把两次请求的完整输入逐字抄下来比对
先解决「是不是同一个输入」这个前置问题。模型看到的内容不只是输入框里那一行字,通常还包括仍然生效的历史消息、系统提示或自定义指令、附件的解析结果,以及温度、top_p、最大输出长度这类参数。抄录范围建议覆盖下面几项。
- 本轮提问原文,含标点、空格、换行、中英文混排、末尾有没有多敲一次回车。
- 仍然生效的历史消息条数,以及最早那条是否被截断。
- 系统提示或自定义指令,两次之间是否动过。
- 参数:temperature、top_p、max_tokens、是否开启流式输出。
常见漏项集中在几处:第二次顺手补了一句「再简洁点」;标点被替换,中文冒号改成英文冒号、问号改成句号;条件顺序被调换,从「先给结论再举例」变成「举例后给结论」;从别处复制时带进了不可见字符或多余空行。这些差异在肉眼扫读时很容易被跳过。
建议用纯文本模板把两次请求并排记录,差异位置直接标出来:
【第 1 次】
本轮提问:(逐字粘贴)
历史消息条数:
系统提示 / 自定义指令:
参数:temperature= / top_p= / max_tokens=
【第 2 次】
本轮提问:(逐字粘贴)
历史消息条数:
系统提示 / 自定义指令:
参数:temperature= / top_p= / max_tokens=
比对结果:□ 完全一致 □ 有差异,差异位置:
如果并排后能直接看出差异,第二次输出不同就有了明确解释,不必继续往下猜。如果记录显示两次完全一致,再进入下一步查上下文。
检查会话里是否还挂着上一轮内容
输入一字不差、输出仍然不同,下一步查上下文残留。多数对话页面会把同一会话里的历史消息一并发送,历史越长,对当前回答的牵引越明显。同一句提问放在空会话里和放在聊了十轮的会话里,本来就是两个不同的输入。
对比步骤可以固定成三步:新开一个会话,只发这一句提问,把输出完整存下来;回到原会话,在原来的位置再发一次同一句提问,同样完整存下来;两次结果并排看,差异是集中在开头、结尾,还是整体跑偏。
判断历史消息是否被带进去,看页面这几个位置:会话上方的上下文提示或已用长度指示是否随消息增多而上涨;历史气泡显示为仍然参与对话,还是已被删除;会话里是否还挂着上一轮上传的文件或粘贴的长文本,附件内容有时会被持续引用;设置页里是否存在跨会话生效的记忆或自定义指令开关,这类开关通常独立于当前会话。
如果新会话的结果明显更贴近要求,而原会话持续跑偏,问题就在上下文,不在模型本身。此时建议新开会话重发,或把必要的背景压缩成一段明确说明再发,而不是在同一会话里反复追问。
看差异集中在事实、结构还是措辞
把两次输出并排后逐句标出差异点,再归入三类。分类的目的是决定还要不要再发一次,而不是给波动起个名字。
- 事实类:可核查的信息发生变化。判定标准是能被外部资料或你手上的数据验证。例子:同一个问题的年份从 2019 变成 2021;同一批数据的合计值两次不同。
- 结构类:信息没变,组织方式变了。判定标准是段落顺序、条目数量、层级、优先级发生变化。例子:第一次先给结论后列理由,第二次先铺理由再收结论;同一份清单从五条变成三条。
- 措辞类:意思等价,只是用词和句式不同。判定标准是替换同义词后语义不变。例子:「建议先确认输入」和「最好先核对一下输入内容」。
三类里事实类差异最值得处理,通常说明提示词缺少约束,模型在没有依据的位置做了填补。结构类差异可以通过规定输出格式收窄。措辞类差异基本属于正常范围,继续重发也很难收敛到完全一致,除非把措辞要求本身写成硬约束。
能控制的只有输入:把要求写成可核对的条件
把模糊期待改成可以逐条检查的条件。改写时用可量化的词替换程度副词,用明确的格式替换风格形容词。
原:写得好一点,专业一些
改:不超过 300 字;每段只讲一个观点;不堆形容词;不使用感叹句
原:帮我总结一下这段内容
改:输出 5 条要点,每条不超过 30 字;先列要点,再补一句总体判断
原:详细分析这个问题
改:分三部分输出:已知事实、不确定项、建议动作;不确定项须说明缺少哪些信息
原:尽量准确
改:涉及的年份、数量、名称须与给定材料一致;材料中没有的内容写「材料未提及」
原:按上面的格式再来一份
改:沿用上一轮的条目数量和层级,只替换内容
改写后做一次自检:把输出要求逐条对照回答,能直接打勾的是可核对条件,需要主观判断的说明还没写清。条件写得越具体,两次输出在事实和结构上越容易对齐。
定下自己的接受标准:哪种差异可以忽略
没有接受标准,重试就会一直继续,因为随便两段文字都能找出不同。开始使用前先定一条收工线,例如下列几种,任选一种固定下来即可。
- 事实与关键数字一致、结构骨架一致,措辞不同不再重发。
- 重发最多一次;第二次仍只在措辞上有差异,直接采用第一版并手工微调。
- 两次在事实层面就不一致时不再重试,回到输入层补约束,或要求标注「缺少依据」。
两点边界需要说明:采样带随机性是常态,temperature 等参数越高,措辞和结构层面的波动越明显;把参数调到更确定的区间可以让输出更接近,但通常也会让回答变得模板化,是否值得需要结合具体场景确认。真正需要稳定的是事实与结构,措辞层面的完全一致一般不是必要条件。