一句“不要猜”,虚构字段率降了51个百分点
一项真实业务测试显示,在提示词中明确加入“不要猜”,可把 AI 虚构字段率从 71% 降至 20%。但这不是治愈幻觉,而是用拒答换取更可靠的结构化数据。
一句“不要猜”,虚构字段率降了51个百分点
一句看起来近乎多余的提示词,最近在一项真实业务测试中产生了明显效果:给 AI 加上“Do not guess(不要猜)”后,它在资料不足时虚构字段的比例从 71% 降到了 20%,下降 51 个百分点,相对降幅约 71.8%。
这项结果值得关注,不是因为提示词工程又发现了某个“万能咒语”,而是因为它碰到了大模型产品化过程中一个常被忽略的问题:很多所谓的 AI 数据抽取错误,本质上不是模型没读懂,而是系统默认鼓励模型交出一个完整答案,即使证据并不完整。
**字段虚构率是指模型在原始材料没有提供充分依据时,仍为指定数据字段生成具体值的比例。**它和一般问答中的“幻觉率”不是完全相同的指标。前者关注的是结构化结果里有没有凭空补值,后者通常还包括错误事实、错误引用、推理失真等更广泛的问题。
先说结论:有效,但不是魔法
**“不要猜”真正改变的是模型的决策边界,而不是模型掌握的事实。**模型原来不知道的信息,加上四个字以后仍然不知道;变化在于,它更愿意把“不确定”暴露出来,不再为了满足格式和完整性要求强行补齐答案。
这一区别很关键。
当模型被要求从网页、简历、合同、产品目录或企业资料中抽取字段时,任务通常会同时施加两种压力:一是“尽量填写所有字段”,二是“必须按固定结构输出”。大模型在训练中又普遍受到“有帮助、给答案、少拒绝”的偏好强化。几种力量叠加后,模型很容易把一个貌似合理的值填进空白处。
例如,原始资料写着某家公司“服务全球客户”,但没有写客户数量。模型可能根据公司规模、行业和常见宣传口径,补出“超过 10,000 家客户”。这个数字在语言上很顺,在数据上却没有来源。对聊天来说,它是一句需要核实的话;对自动写入 CRM、数据库或研究报告的流水线来说,它就是一条污染数据。
**“不要猜”是一条不确定性处理指令,作用是要求模型在证据不足时选择留空、返回未知或明确拒答。**它没有增加检索能力,也没有让模型突然拥有事实校验器,但它给了模型一个合法的退出选项。
从 71% 到 20% 的结果说明,在这一测试条件下,大部分虚构并非不可抑制的底层故障,而是提示目标设置不当所诱发的行为。51 个百分点的绝对降幅相当可观,但剩余 20% 同样不能忽略:每处理 100 个缺乏依据的字段,仍可能有约 20 个被模型补出内容。
71% 和 20%,到底意味着什么
**这组数字衡量的是特定任务中的行为变化,不能直接外推为所有大模型的通用幻觉率。**模型、提示词、输入材料、字段定义、采样参数和评分方式只要改变一项,结果都可能不同。
| 对比项 | 普通抽取提示 | 加入“不要猜” | 变化 | |---|---:|---:|---:| | 缺乏依据时虚构字段的比例 | 71% | 20% | 下降 51 个百分点 | | 相对降幅 | — | — | 约 71.8% | | 模型获得的新事实 | 0 | 0 | 没有变化 | | 主要行为 | 倾向补齐字段 | 倾向留空或承认未知 | 拒答阈值提高 | | 能否替代外部验证 | 不能 | 不能 | 没有变化 |
这里还要区分“下降 51%”和“下降 51 个百分点”。从 71% 降到 20%,绝对变化是 51 个百分点;以原来的 71% 为基数计算,相对降幅是 (71-20)/71≈71.8%。写成“幻觉减少 51%”既不准确,也会低估实验中观察到的相对变化。
**这项测试最有价值的地方,是把一个日常经验变成了可测量的产品指标。**不少团队知道要在提示词里写“没有信息就说不知道”,但没有建立缺失字段测试集,也没有统计模型究竟在多少次机会里选择了乱填。没有指标,提示词优化就容易退化为凭感觉改文案。
不过,单看 71% 和 20% 仍不足以判断一个系统能否上线。严谨评估至少还需要知道样本量、字段类型、输入分布、重复运行次数、具体模型版本、解码参数,以及“虚构”的判定标准。若原始测试没有完整披露这些信息,这组数据应被视为一个有启发性的案例结果,而不是跨模型定律。
为什么模型明知没有,还是会填
**大语言模型是根据上下文预测后续 token 的生成系统,而不是内置了真假判定器的数据库。**当提示词要求输出公司名称、成立年份、员工人数、营收和总部地址时,模型首先学到的是“完成这张表”,而不是逐字段证明每个值都能从材料中推出。
第一层原因是完整性偏好。结构化输出天然暗示每个键都应该有值,尤其当示例中的所有字段都填得很满时,模型会把空值视为不合格答案。JSON Schema 能保证字段存在、类型正确,却不能保证内容真实;一个格式完美的错误年份仍然是错误数据。
第二层原因是模式补全。模型见过大量“公司简介”“人物档案”和“产品参数”文本,能够根据上下文猜出高概率答案。品牌所在城市、常见职位名称、邮箱格式甚至定价区间,都可能被统计关联补出来。猜中时看起来像推理能力,猜错时就是幻觉,而系统往往无法只保留前者。
第三层原因是任务指令冲突。提示词一边要求“只依据原文”,一边要求“完整填写,不得遗漏”,后者通常更具体、更容易验收。只要没有定义缺失值应该如何表示,模型就可能把完整性放在可验证性之前。
第四层原因是拒答成本。许多模型经过偏好优化后,会尽量避免一句冷冰冰的“不知道”。在通用聊天里,这种倾向让回答更顺畅;在数据工程里,它却可能让模型用流畅性掩盖证据缺口。
**因此,“不要猜”的作用不是压制创造力,而是重写错误成本。**原来的隐含规则是“漏填可能不合格,猜错未必被发现”;加入约束后,规则变成“证据不足仍填写,明确算错”。模型随之更倾向于保守输出。
真正能用于生产的提示词,不该只有四个字
**生产级抽取提示词必须同时规定证据范围、缺失值格式和冲突处理方式。**单独写一句“不要猜”能改善结果,但它仍然留下了几个问题:什么叫不确定、能不能做常识推断、来源互相矛盾怎么办、留空到底用 null 还是空字符串?
一个更稳妥的模板可以这样写:
仅根据提供的材料提取字段,不得使用外部知识,也不得根据上下文猜测。若材料没有明确给出某字段,返回
null。若多个片段互相冲突,返回null,并在备注中列出冲突值。每个非空字段都必须附上可逐字核对的证据片段;没有证据就不要填写。
这不是 API 调用代码,而是一套任务规则。它至少做了四件事:限定知识边界、定义未知值、处理来源冲突、要求证据回指。
**证据回指是比“不要猜”更重要的第二道防线。**模型每填写一个非空字段,都应同时返回支持该值的原文片段和来源位置。后续程序可以检查证据片段是否真的出现在输入中,再把高风险字段送入人工审核。
建议把输出逻辑拆成以下几类,而不是只分“有值”和“没值”:
value:材料明确给出的值。null:材料没有提供,模型不得推断。conflict:不同来源提供了互相矛盾的值。unreadable:扫描件、表格或页面结构导致内容无法可靠识别。derived:允许计算时,由明确数据推导出的值,并记录计算依据。
**“未知”和“解析失败”必须分开。**一份合同没有付款日期,与 OCR 没识别出付款日期,是两种不同故障。前者应回到业务人员补资料,后者应重新解析文档。把二者都写成空字符串,会让下游系统无法判断该修数据还是修管道。
一套可复现的测试方法
**评估提示词是否减少虚构,最有效的方法是建立一组故意缺字段的反事实测试集。**只拿资料完整的样本测试,测不出模型面对空白时会不会乱填。
可以按下面的流程执行:
- 从真实业务材料中抽取 100 至 500 份样本,覆盖网页、PDF、表格和 OCR 文本等主要输入类型。
- 为每份样本标注字段真值,并明确区分“有证据”“无证据”“存在冲突”和“无法读取”。
- 人工删除一部分关键事实,构造模型容易根据常识或上下文补全的缺失样本。
- 固定模型版本、系统提示、温度和输出结构,只改变“不要猜”相关指令。
- 每个版本重复运行多次,避免把单次随机输出当成稳定结论。
- 分别统计虚构率、漏填率、准确率、拒答率和证据匹配率。
**虚构率不应该是唯一指标,因为模型可以通过全部留空轻易获得 0% 虚构率。**一个总是回答“不知道”的系统很安全,却没有业务价值。团队必须同时观察准确抽取和有效覆盖率。
| 指标 | 定义 | 主要风险 | |---|---|---| | 虚构率 | 无证据字段中,被模型填写具体值的比例 | 越高,数据污染越严重 | | 漏填率 | 有明确证据字段中,被模型留空的比例 | 越高,可用信息损失越大 | | 字段准确率 | 已填写字段中,与标注真值一致的比例 | 衡量输出是否正确 | | 拒答率 | 全部字段中,返回未知或空值的比例 | 过高可能意味着系统过度保守 | | 证据匹配率 | 非空字段能在来源中找到直接证据的比例 | 衡量可审计性 |
理想目标不是让拒答率越高越好,而是在虚构率和覆盖率之间找到适合业务的阈值。商品描述草稿可以容忍较高的人工复核比例;财务数据、医疗信息、法律条款和合规名单则应把无依据填写视为严重错误。
哪些场景最值得立刻加上这条规则
**结构化数据抽取是“不要猜”收益最高的场景。**因为字段边界明确,缺失值也能被下游程序处理,模型承认未知通常比编造一个看似完整的对象更有价值。
招聘团队解析简历时,不应根据毕业年份推测年龄,也不应根据公司名称补写候选人的职级。销售团队整理客户资料时,不应把新闻稿里的“行业领先”转换成未经证实的市场份额。电商团队抽取商品参数时,不应因为同系列其他型号支持某项功能,就默认当前型号也支持。
研究和内容生产同样适用,但提示词约束只能充当第一道防线。文章中的日期、金额、论文结论和人物引语仍需回到原始来源核验。尤其是模型给出的链接、论文标题和统计数字,看上去越具体,越应该检查。
**创意任务则不该机械套用“不要猜”。**写广告标题、设计角色背景或头脑风暴,本来就需要生成材料之外的新内容。此时更合理的做法是标明“事实区”和“创意区”,避免把创作内容误当成已验证事实,而不是全面压制生成能力。
提示词修复不了什么
**“不要猜”无法解决上下文里本来就存在的错误。**如果检索系统找回了过期页面,数据库保存了错误值,或者 OCR 把“2028”识别成“2023”,模型完全可能忠实地输出错误信息。它遵守了“只基于材料”,结果仍然不真实。
它也无法彻底解决长上下文遗忘。材料过长时,关键限制可能被埋在中间,模型对开头和结尾的关注度也可能高于中部内容。多轮代理工作流中,约束还可能在任务转交时丢失。因此,关键规则应放在系统级指令中,并在每个抽取步骤保持一致,而不是只在对话开头说一次。
**剩余的 20% 提醒我们,提示词工程只能管理幻觉,不能消灭幻觉。**要把系统做成可上线的产品,还需要检索质量控制、来源追踪、字段级校验、规则引擎、交叉验证和人工复核。提示词像一道低成本滤网,但不是质量保证体系本身。
对于高风险字段,可以再加三层控制:数值字段做范围与单位校验;日期、公司注册信息等与权威数据源交叉核对;低置信或证据冲突的结果进入人工队列。与其让模型输出一个难以解释的 0.83 置信度,不如要求它提供证据,再由系统判断证据是否存在、是否相关、是否足够直接。
这项测试真正改变了什么
**这次从 71% 到 20% 的下降,证明了“允许不知道”本身就是一项产品能力。**过去不少 AI 产品把拒答当成体验缺陷,想方设法减少“无法回答”;但在企业数据流程里,能够稳定地区分“已知、未知、冲突和不可读”,往往比多填几个字段更重要。
这也是这项测试比一般提示词技巧更有启发性的地方。它没有让模型更聪明,却让系统更诚实;没有增加上下文窗口或计算量,却显著降低了无依据输出。改动成本接近于零,收益却能直接反映在脏数据、人工返工和错误决策的减少上。
但团队不应停在那句“不要猜”。下一步应该把它固化为可执行契约:没有证据就返回 null,有冲突就显式标记,每个值都能回指来源,所有版本都通过同一套缺失字段测试。只有这样,一次亮眼的提示词实验才会变成稳定的工程能力。
参考来源
受限于文末来源域名要求,本文未列出不在允许域名范围内的原始测试页及补充文章链接。核心数据“虚构字段率由 71% 降至 20%”来自题目所给的原始基准页面;文中的工程分析与测试建议基于该结果展开。本文不将未披露的样本规模、模型版本或测试配置补写为事实,以免重复文章所讨论的“无依据猜测”问题。



