模型用"擅自假设"填补缺失的细节:4 个原因 + 对症修复

让 AI 写季度总结、它把没给的续约日期、联系人、营收数字全编上——模型把"完整"解读为"不留空"。本文讲怎么让"我没有这条信息"成为一类合法输出。

你让它做一个客户账户的季度活动总结。你给了登录日期和工单数。模型回了一篇齐整总结,里面有”Q3 的续约日期”、“该公司的主联系人”、“营收影响约 4.2 万美元”。这些你都没给。听起来都对,全是编的。模型把”写一份季度总结”解读成”产出一份看上去完整的季度总结”,而按训练分布的”完整”=要有续约日期和联系人,于是它填上。

本文讲为什么模型默认填空,以及怎么让”我没有这条信息”成为一类合法的输出状态。

常见原因

1. Prompt 要”完整”、“全面”、“comprehensive”

这些词的意思就是”不留空”。模型按字面执行,把空填上。

如何判断:你的动词或形容词暗示完整性。

2. Schema 有必填字段但无缺失数据路径

如果 schema 是 { "renewal_date": string } 没有 null 选项,模型只能往里塞字符串,真假不重要。

如何判断:schema 没有显式 null / unknown 处理。

3. 没”未知怎么办”的规则

你没告诉模型不知道时该怎么办。默认行为:产出一个听着合理的东西。

如何判断:prompt 里没有 if unknown: 规则。

4. 常识填空

非常常见的模式(员工名、日期、地址),模型从训练时”这类记录应该长什么样”的先验里填。不是随机——是统计先验。

如何判断:编出来的细节合理且符合常见模式(续约填”Q3”、联系人填”张伟”)。

5. 输出格式鼓励完整

特别是表格:空格看着不对,模型就填。bullet 也是——半个 bullet 列表读起来不完整。

如何判断:格式是表、结构化列表或 schema 驱动。

动手前先确认

  • 标出输出里你从未提供的细节。
  • 保存被编造的输出做对比。
  • 决定政策:缺失数据应该是 UNKNOWNnull、空,还是直接报错?
  • 检查 schema 里必填字段是否有缺失数据路径。
  • 决定工作流真的需要这些数据,还是只标缺失就够了。

需要收集的信息

  • 原始输入数据(你真给了什么)。
  • 模型输出。
  • 具体被编造的细节,标注出来。
  • Schema(如果有)+ 必填字段。
  • 模型 + temperature。

最短修复路径

Step 1:显式”未知规则”

缺失数据规则:
- 输入里没提供的必填项,输出 "UNKNOWN"。
- 不要推断。不要估算。
- 没有数字证据时不许用 "大约"、"差不多"、"估计"。
- 超过 3 个字段会是 UNKNOWN 时,停下来反问缺什么。

这一块单独就能解决 70% 的填空。

Step 2:Schema 显式 null 处理

Schema:
{
  "renewal_date": "<ISO 日期 OR null>",
  "primary_contact": "<姓名 OR null>",
  "revenue_impact_usd": "<数字 OR null>",
  "data_gaps": ["<被设 null 的字段名和原因>"]
}

null 选项 + data_gaps 数组让”缺失”成为一类合法输出。

Step 3:让模型先列假设再答

Step 1:列出产生完整答案需要的所有假设。编号。
Step 2:每条标注:输入是否支持(YES)还是会是编造(NO)。
Step 3:只用 YES 假设产生答案。NO 假设的字段写 UNKNOWN。

把隐式编造翻成显式可审计步骤。

Step 4:few-shot 示例里包含 UNKNOWN

让模型看见”我不知道”的合法形态:

示例 1:
输入:只有登录日期
输出:
{
  "renewal_date": null,
  "primary_contact": null,
  "revenue_impact_usd": null,
  "data_gaps": ["renewal_date(输入未提供)", "primary_contact(输入未提供)", "revenue_impact_usd(输入未提供)"]
}

现在为以下输入产出:<真实输入>

Step 5:禁用填充词

禁用短语(输入无证据时不许用):
- "大约"、"差不多"、"估计"、"可能"、"约"
- "按行业惯例"
- "典型"、"平均"、"标准"

这些短语是填空的语言指纹。禁用后模型要么给证据要么说 UNKNOWN。

Step 6:让模型自我核对

末尾加:

产出后,逐条列出非 UNKNOWN 的论断,并标注支持它的输入原文行。
找不到支持原文的论断必须改回 UNKNOWN。

核对步骤兜底。

怎么确认已经修好

  • 抽 5 个输出:每个具体论断在输入里有支持原文行。
  • 输入部分缺时 data_gaps 非空。
  • 该出现 “UNKNOWN” 的地方都有 UNKNOWN。
  • 填充词出现次数 0。
  • 同事审输出时找不到”等等这是哪来的”的细节。

如果还是没修好

  1. 严格事实性可能需要 temperature 0——降一下。
  2. 切到结构化输出模式(JSON schema、tool use)——schema 强制能挡掉编造字段。
  3. 加独立验证步骤:prompt 1 产出、prompt 2 逐条对照输入。
  4. 高风险工作用检索(RAG)让模型有显式来源;要求每条论断附引文。

预防建议

  • 每个 prompt 默认规则:“不知道就输出 UNKNOWN。不要推断。”
  • Schema 里标必填 vs 选填;必填缺失要显式 UNKNOWN。
  • 事实性重要的 prompt 全面禁用填充词。
  • 每月审一次生产输出里的”被编的具体”。
  • 重复工作流把验证步骤嵌进流水线。
  • “完整性”和”正确性”分开看——有时不完整的输出才是对的输出。

相关阅读

标签: #排查 #Prompt #Prompt 质量 #幻觉