大模型输出不稳定,同一个问题每次答案不同,怎么办?

第 1239 题 约 2 分钟读完

本文目录
  1. 面试怎么回答
  2. 不稳定的来源
  3. 让结果更稳定的方法
  4. 评估稳定性

面试怎么回答

不稳定来自采样随机性、温度为 0 时 GPU 计算的微小数值差异、检索顺序和历史等上下文不同、模型版本变化,以及问题本身有歧义。我会减少生成自由度:确定性任务温度设 0 或很低,用结构化输出限定格式和取值,提示词写清规则口径,有歧义先澄清。更关键的是让结果不依赖模型生成:数字来自 SQL 或指标接口由程序填入,同样的意图解析成同样的参数,计算交给代码。再固定上下文:检索排序稳定、锁定模型版本、记录完整输入可复现;相同问题、数据版本和权限的请求走缓存。最后把重复运行的一致率作为评测指标,对不一致的问题分析原因。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

业务方抱怨:「同一个问题问了三次,得到三个不同的数字。」对于数据类、决策类的场景,不稳定比偶尔答错更让人失去信任。面试官问这题,想看你能不能区分不稳定的来源,并从系统设计上让结果可复现。

不稳定的来源

  1. 采样随机性:温度大于 0 时,每次生成会从概率分布中采样,结果不同;
  2. 温度为 0 也不完全确定:GPU 的并行计算和批处理方式会带来微小的数值差异,在某些位置可能导致选择不同的 Token,之后的内容随之改变;
  3. 上下文不同:检索结果的顺序不同、对话历史不同、时间等动态信息不同;
  4. 模型版本变化:提供方更新了模型;
  5. 任务本身有歧义:问题有多种合理理解,模型每次选了不同的理解。

让结果更稳定的方法

减少生成的自由度

  • 对确定性要求高的任务,温度设为 0 或很低;
  • 使用结构化输出,限定输出的格式和取值范围;
  • 提示词明确规则和口径,减少模型「自由发挥」的空间;
  • 消除歧义:问题模糊时先澄清,而不是每次随机选一种理解。

让关键结果不依赖模型生成

  • 数字来自查询:数据类的回答,数字必须来自 SQL 或指标接口的结果,由程序填入,模型只负责组织语言;
  • 同样的查询意图解析成同样的参数,参数相同查询结果就相同;
  • 计算交给代码,而不是让模型心算。

固定上下文

  • 检索结果排序稳定(相同分数时按固定规则排序);
  • 固定模型版本,而不是用「最新版本」的别名;
  • 记录每次调用的完整输入,方便复现。

缓存

  • 相同问题、相同数据版本、相同权限的请求,可以直接返回缓存的结果,保证一致。缓存的 key 要包含这些维度。

评估稳定性

  • 同一组问题重复运行多次,统计结果一致的比例,作为一项评测指标;
  • 对不一致的问题分析原因:是歧义、检索不稳定,还是模型本身。