大模型幻觉案例怎么分类与复现?开发者兜底设计思路

安全与风控

给开发者一套幻觉案例的分类、最小复现与兜底设计方法,把偶发错误变成可版本管理的测试用例。

模型偶尔编一个不存在的字段、引用一段没有的文档、报一个查无此人的结论,你截图给同事看,对方说「我这边试不出来」。问题不在模型,在你没有把这次幻觉固定成可重跑的最小案例。这篇给一套分类骨架、复现步骤和上线前的兜底设计清单,让你从「遇到了但说不清」走到「能定位、能测、能拦」。

模型偶尔编一个不存在的字段、引用一段没有的文档、报一个查无此人的结论,你截图给同事看,对方回一句「我这边试不出来」。问题往往不在模型本身,而在于你没把这次幻觉固定成一个可重跑的最小案例。截图会过期,聊天记录会沉底,只有被压缩成用例、能一键重跑的东西才算资产。

下面这套流程分成三件事:先给幻觉分类,避免所有错都叫「胡说」;再把一次翻车压成最小复现;最后在调用链路上布置四层兜底,让同类问题在下次上线前被拦下来。每一步都给你能直接照抄的动作。

先把幻觉分成四类,别都叫「胡说」

分类的价值在于决定后面怎么测、怎么拦。同样是「答错了」,编造事实和格式多包一层,修法完全不同:前者要补证据来源,后者加个结构校验就够。拿不准属于哪类时,先把同类问题跑十次,看错误是稳定出现还是概率出现,这一步直接决定你是改提示词还是加校验层。

幻觉类型典型表现优先验证方式
事实性编造人名、数字、条款凭空生成拿原文或权威数据逐条回查
引用性编造假链接、假文献、假出处链接实测可打开、出处能对上号
格式性偏离字段缺失、多包一层、类型不符走 schema 校验或 strict 模式
逻辑性自洽错误推理步骤没错,前提凭空来把前提抽出来单独核对

再来一层按触发位置分:知识盲区型、指令冲突型、长上下文稀释型、工具返回被误读型。同一句错话,来源不同,兜底手段也完全不同。盲区型要求模型承认不知道;冲突型要清理提示词里的矛盾指令;稀释型要减少无关上下文;工具误读型要先检查返回值本身是不是脏的。

  • 先判来源类型,再判触发位置,两轴交叉基本能定位到该动哪一层
  • 同一问题固定参数跑十次,稳定复现才是可自动化的用例
  • 只出现一次的错误也别丢,降级成待观察样本,攒够再提

最小复现:把一次翻车压缩成三样东西

复现不了的原因,九成是输入不完整。你只留下「问题那句话」,但真正触发幻觉的可能是系统消息里的一句约束、检索塞进去的一段噪声、或者当时偏高的随机性参数。固定输入的意思是把原文、完整提示词、系统消息和采样参数一起存下来,缺一项都可能白跑。

环境同样要固定。记下模型标识、接口来源、上下文长度;多模型路由下要写清这次落在哪个源,否则下次路由到另一个源,行为差异会被你误判成「修好了」。模型口径和来源对应关系可以到 /models 核对当时的写法,别凭记忆。

  1. 存输入原文 + 完整提示词 + 系统消息 + 采样参数,一个文件里放全,缺项就补到能复现为止
  2. 存环境模型标识、接口来源、上下文长度,多源路由写清落到哪个源,到 /models 对齐口径
  3. 写判定写一句机器可判的失败条件,比如「出现原文没有的年份」「JSON 缺 required 字段」
  4. 跑回归用例攒到十几条就是一小套回归集,改提示词、换模型前先跑一遍再提交

兜底设计:四层拦截,从便宜到贵

兜底要按成本从低到高排,最便宜的放在最前面。进料阶段过滤一次,比出口阶段让模型重写一次便宜;代码能核对的硬字段,永远别交给模型自己保证。四层都上不是标准答案,按风险等级挑着用。

第一层 进料
检索结果走来源白名单,答不出就要求它说「资料里没有」,事前拦截最省钱
第二层 约束
结构化输出用严格模式加必填字段,格式错直接判失败重试,不靠肉眼挑
第三层 校验
金额、日期、编号、链接这类硬字段一律走代码核对,模型只负责组织语言
第四层 出口
高风险结论加人工确认或置信提示,失败样本回流到用例集

什么情况下不适用这套?创意文案、头脑风暴、开放式摘要这类场景,本来就不存在唯一正确答案,套上层层校验反而会压掉可用输出。判断标准很简单:这个任务的输出有没有客观对错。有,就上兜底;没有,最多做抽样人工抽检。

  • 硬字段(金额、日期、编号、链接)必须代码核对,不做例外
  • 结构化返回一律开严格模式,缺字段直接判失败
  • 高风险结论加人工确认,低风险展示类只记日志
  • 创意类任务不套硬校验,防止把可用输出拦死

上线后的观察与止损

上线不是终点。失败率要按任务类型分开统计,别把所有调用混成一个数字——混合之后某一类任务明显掉下去,你根本看不见。日志里要留住输入摘要、模型标识和失败判定结果,出事时才能分清是提示词改了、模型换了,还是上下文变脏了。

换模型或换来源之后,把回归集重跑一遍,结果差异大再决定要不要回退,不要凭单次体验做决策。延迟、错误率、质量趋势这类基线,可以到 /price-watch 和 /tools/speed-test 这类站内页面对照当时的记录,自己记一份本地表格也行,关键是别靠印象。

观察项怎么记什么信号才值得行动
失败率按任务类型分别统计某一类持续偏高,而不是单次波动
来源变化日志记模型标识与接口源换源后回归集通过率明显变化
硬字段错误代码核对结果打点出现可复现的字段错误而非偶发
延迟与错误率到 /tools/speed-test 对照记录连续多天偏离基线,而非单点抖动
下一步把你的历史翻车截图挑三条,按上面的分类和四步复现压成用例,再对着 /tools/speed-test 建第一版基线;攒够一小组用例之后,你就有资格判断该改提示词还是加校验层,而不是每次拍脑袋。

常见问题

幻觉能彻底消除吗?

不能。能做的只有把不可控概率压到可接受范围,并让出错时能被发现和拦住。所以重点不是「让它不胡说」,而是「胡说了你能第一时间知道」,这需要判定条件和校验层,而不是更强的提示词。

为什么同事复现不出来,我这边却能稳定出现?

多半是输入或环境不一致:少存了系统消息、温度不同、走的接口源不同,或者上下文长度差很多。把完整提示词、参数、模型标识和接口来源一起存下来,再让对方原样跑一遍,通常就能对齐。

兜底校验会不会把关太严,把能用的回答也拦掉?

会,尤其是开放写作和创意类任务。建议按任务分档:涉及金额、法条、编号、对外发布的走严格校验;内部草稿、头脑风暴只做轻量提示。上线前先跑一批正常样本,看误拦率再定松紧。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。