
那是一次内部演示。
我们正在测试一个面向律师的AI法律助手,用真实的合同条款来问它问题。产品经理坐在旁边,信心满满。
我输入了一个问题:"根据《民法典》第584条,违约金的计算方式是什么?"
AI立刻给出了一段措辞严谨、逻辑清晰的回答,还精确引用了"第584条规定:当事人可以约定一方违约时应当根据违约情况向对方支付一定数额的违约金,也可以约定因违约产生的损失赔偿额的计算方法……"
产品经理点点头:"这不挺好的吗?"
我打开《民法典》核对。
第584条的实际内容是关于损失赔偿的范围,不是违约金计算。AI把两个条款的内容混淆了,张冠李戴,但措辞如此专业、语气如此确定,以至于如果不去核对原文,几乎不可能发现这是错的。
这就是AI幻觉最危险的地方,不在于它说错了,而在于它说错的方式,和它说对的方式,看起来一模一样。
我在那个会议室里意识到一件事:传统的测试方法,对这种错误是盲目的。没有任何断言能捕捉到它。它通过了格式检查、通过了响应时间性能指标测试、通过了接口可用性测试——它在所有传统测试维度上基本都是对的,但它告诉用户的,是一个错误的法律条款,这也是最致命的错误。
那一刻,我知道自己需要系统性地学会一件事:如何测试AI幻觉。
"幻觉"这个词,在AI领域被用得太宽泛了。测试人员如果只是模糊地说"我要测幻觉",就像说"我要测bug"一样——范围太大,无从下手。
要有效地测试幻觉,首先需要把它拆成具体的类型:
第1类:事实性幻觉(Factual Hallucination)
AI捏造了不存在的事实,或者错误地陈述了存在的事实。
这是最常见、也最容易理解的幻觉类型。比如引子里那个例子,把《民法典》第584条的内容张冠李戴;或者说某个历史事件发生在错误的年份;或者声称某个不存在的研究结论"已被多项研究证实"。
事实性幻觉的特征:内容错误,但语气确定。模型不会说"我不确定",它会直接给出一个听起来有理有据的错误答案。
第2类:忠实性幻觉(Faithfulness Hallucination)
AI的回答和它被提供的上下文信息不一致——不是和外部世界不一致,而是和自己手里的材料不一致。
这在RAG(检索增强生成)应用里尤为常见。你给AI提供了一份合同文本,让它总结关键条款,它总结出来的内容,可能并不完全来自那份合同,而是混入了它训练时学到的"通用合同惯例"。
这类幻觉更隐蔽,因为它的答案看起来合理,和外部世界也不矛盾,但就是和你提供的那份具体文档对不上。
第3类:推理性幻觉(Reasoning Hallucination)
AI的推理过程出现了跳跃或谬误,导致从正确的前提得出了错误的结论。
这类幻觉最难识别,因为结论可能听起来是合理的,但推理链条里藏着一步悄悄跳过去的逻辑错误。比如,给它一道数学题,它会给出一个合理的解题思路,最后算出一个错误的答案,但每一步的叙述都看起来严谨。
第4类:自我矛盾幻觉(Self-Contradiction Hallucination)
AI在同一次对话的不同轮次,或者对同一问题的不同表述方式,给出了相互矛盾的回答。
你在第一轮问"这个产品的退货期限是多少天",它回答"30天";第三轮你问"如果我三周前购买,现在还能退货吗",它回答"可以,还在退货期内"——但三周是21天,已经超过了它自己说的30天。
这类幻觉在多轮对话场景下最容易发生,而多轮对话恰恰是AI助手最核心的使用场景。
理解了幻觉的四种面孔,下一个问题来了:怎么测?
这是测试AI幻觉最大的困难所在——你没有办法用传统的断言来捕捉幻觉。
传统断言是字符串层面的判断:assert response == expected。但幻觉是语义层面的错误,同一个事实可以用无数种方式正确表达,也可以用无数种方式错误表达,字符串匹配对此完全无效。
你也没有办法简单地"穷举测试"。语言模型的输入空间是无限的,每一种输入的措辞方式、每一种追问的角度,都可能产生不同的输出。你覆盖了100个问题,发现幻觉的概率,不是已测问题的覆盖率,而是未测问题里幻觉潜伏的概率。
这意味着,测试AI幻觉需要一套和传统测试完全不同的方法论:
不是"验证答案是否等于预期",而是"验证答案是否与真相对齐"。
不是"跑完所有用例就结束",而是"建立持续的幻觉检测机制"。
不是"测试通过就没问题",而是"建立幻觉率的基线,持续监测偏离"。
策略1:测事实性幻觉——构建"真相锚点"测试集
测试事实性幻觉,核心方法是构建有明确真相锚点的测试集。
每一个测试用例,都需要一个"ground truth"——一个可以被权威来源验证的正确答案。测试的本质,是把AI的输出和这个ground truth做语义层面的比对,而不是字符串比对。
这个比对,需要依赖LLM-as-Judge:用一个独立的语言模型作为评估者,给它明确的评估标准(准确性、完整性、无捏造),让它判断被测AI的输出是否和ground truth一致。
测试集的设计需要特别关注三类场景:
知识边界场景:主动测试AI知识截止日期附近的事实,以及它可能不熟悉的专业领域知识。这类场景最容易激发事实性幻觉——AI不知道正确答案,但不会说"我不知道",会选择"合理编造"。
相似混淆场景:刻意设计名称相近、内容相似的实体对,测试AI能否正确区分。比如两个条款编号相近的法律条文、两个名字相似的历史人物、两个功能相近的API接口。
权威引用场景:要求AI引用具体的出处(书名、条款编号、研究报告),然后逐一核验这些引用是否真实存在、内容是否准确。引用的具体性,往往是幻觉的高发区。
策略2:测忠实性幻觉——上下文对齐验证
测试忠实性幻觉,核心是验证AI的输出是否忠实于它被提供的上下文。
这在RAG场景里尤为重要。测试方法:
给AI提供一段明确的参考文档,然后问与文档内容相关的问题,再用独立的评估器(或人工)逐条核验:AI的每一个陈述,能不能在提供的文档里找到明确的依据?
需要特别测试的场景:
一个有效的测试工具是Faithfulness Score——量化AI输出中,有多少比例的陈述能在参考文档中找到明确依据,比例越低,忠实性幻觉风险越高。
策略3:测推理性幻觉——过程导向的链式验证
推理性幻觉最难测,因为结论可能恰好碰对,但推理过程是错的;也可能推理过程看似严谨,但藏着一步隐蔽的逻辑跳跃。
测试推理性幻觉,不能只看最终答案,必须审查推理过程本身。
具体方法:
要求AI使用思维链(Chain of Thought)输出,把每一步推理都显式地写出来。然后对每一步推理做独立的验证:这一步的前提是否成立?这一步的逻辑跳跃是否有效?
设计"陷阱题"——给AI提供一个包含错误前提的场景,看它是否会识别错误前提并拒绝推导,还是接受错误前提并给出一个"逻辑上一致但前提错误"的答案。
使用"步骤置换测试":把同一道推理题,按不同的步骤顺序重新表述,看AI是否给出一致的推理路径和结论。真正理解的推理,不依赖于呈现顺序;幻觉性的推理,往往对顺序非常敏感。
策略4:测自我矛盾幻觉——多轮对话一致性测试
自我矛盾幻觉的测试框架,核心是在同一会话上下文里,从不同角度、不同表述方式,问同一个事实性问题,验证AI的答案是否保持一致。
具体的测试设计:
直接/间接问法的一致性:直接问"退货期限是多少天",和间接问"我三周前买的,能退货吗",AI的隐含答案应该一致。
正问/反问的一致性:问"A比B大吗"和"B比A小吗",答案的蕴含关系应该互洽。
跨轮次的时间一致性:在第1轮给出一个陈述,在第5轮、第10轮,换个方式触及同一事实,看AI是否保持一致。
这类测试需要建立对话树测试结构——从同一个起点出发,沿不同的追问路径延伸,最终在叶节点汇聚相同的事实问题,比对答案的一致性。这个结构,比单轮问答测试要复杂得多,但它测到的是AI在真实使用场景下的真实行为。
做完四类幻觉的测试策略设计,还有一件更重要的事:建立幻觉测试的基础设施,让幻觉测试成为持续的、可量化的过程,而不是一次性的检查。
这需要三个基础设施组件:
幻觉基线(Hallucination Baseline):在系统上线前,用标准测试集测量幻觉率,建立各类幻觉的基线数值。基线是后续所有对比的参照——模型更新了,幻觉率有没有变化?Prompt调整了,哪类幻觉被改善了,哪类被引入了?
生产环境采样评估:从生产流量里按比例采样真实的用户问答,持续送入Judge评估流水线,监控生产环境的幻觉率。测试环境的幻觉率和生产环境的幻觉率,往往有显著差异——因为真实用户的问法,总是超出测试工程师的想象。
幻觉案例知识库:每一个被发现的幻觉案例,都应该被结构化地记录——幻觉类型、触发场景、问题模式、修复方式。这个知识库,是测试策略持续迭代的原材料,也是团队共同理解"这个AI在哪里会出问题"的集体记忆。
让我用一个完整的案例,把上面的方法论变得可触摸。
这是一个面向医疗行业的AI问答助手,主要功能是回答医护人员关于药物剂量、药物相互作用、临床指南的问题。这类场景里,幻觉的代价是极高的——一个错误的药物剂量建议,可能直接威胁患者安全。
第一步:幻觉风险地图
在构建任何测试用例之前,这个团队先做了一件事:绘制幻觉风险地图,识别哪类问题最可能触发幻觉,以及幻觉在不同类型问题下的影响严重程度。
高风险区域识别出三类:
这张地图,决定了测试资源的分配:70%的测试用例集中在这三类高风险区域。
第二步:构建分层测试集
针对高风险区域,团队构建了三层测试集:
第1层:黄金标准集(Golden Set)由临床医学专家手工标注,覆盖200个高频、高风险问题,每个问题都有经过权威来源(药典、临床指南、FDA说明书)验证的标准答案。这个集合是幻觉基线测量的核心,也是模型每次更新后必须回归的标准。
第2层:边界探测集(Boundary Probing Set)专门设计用来激发幻觉的"陷阱问题":
第3层:对话一致性集(Consistency Set)设计多轮对话测试树:从"这个药物的成人剂量是多少"出发,分别沿着"那老年患者呢"、"那肾功能不全的患者呢"、"那如果我今天已经服用了一半剂量"等路径延伸,最终在不同路径的末端汇聚到同一个事实问题,验证答案是否保持一致。
第三步:Judge评估流水线
测试集跑起来之后,评估本身是关键。这个团队设计了一个三层Judge:
第1层(LLM Judge):用GPT-4作为初筛评估器,对AI输出进行准确性、忠实性、完整性的初步打分,把明显的幻觉案例和边界案例分类。
第2层(专业Judge):临床药师每周对LLM Judge标注的"边界案例"进行人工复核,作为对LLM Judge的校准——确保LLM Judge的判断标准和领域专家的判断标准保持对齐。
第3层(统计监控):汇总每类问题的幻觉率,建立时序数据,监控随模型更新的幻觉率变化趋势。
测试发现了什么?
第一轮测试,系统整体幻觉率17.3%——这个数字在通用问答里或许可以接受,在医疗场景里是不可接受的。
细化分析后,发现了几个关键模式:
药物剂量类问题的幻觉率高达34.7%,且大部分幻觉是"数量级正确但精确值错误"——比如把"每日25mg"说成"每日20mg"。这类错误最危险,因为它们不是明显离谱的错误,而是细微但关键的偏差。
2020年后更新的临床指南,幻觉率显著高于早期指南——符合预期,模型知识截止日期的影响在这里清晰显现。
当问题里包含三种以上药物的联合用药时,推理性幻觉率从4.1%上升到22.8%——推理的复杂度和幻觉率之间有明确的正相关关系。
这些发现,直接驱动了3个产品决策:
一是针对药物剂量类问题,强制添加免责声明并附上权威来源链接,把最终核实责任明确回传给医护人员。
二是对2020年后的临床指南,增加知识库的RAG覆盖,而不依赖模型的训练知识。
三是对三种以上药物联合用药的问题,降级处理——给出参考思路,但明确告知用户这类复杂场景需要由临床药师人工审核。
这三个决策,没有一个是"把幻觉消灭掉"——因为在现阶段,幻觉无法被消灭。而是在充分理解幻觉分布的基础上,设计合理的产品机制来管理风险。
这,才是幻觉测试真正的价值所在。
回到那个会议室,回到那段关于《民法典》第584条的错误引用。
事后我想了很久,为什么那段错误的回答那么难以识别。
不是因为它措辞不专业,相反,措辞极其专业。不是因为逻辑不通顺,相反,逻辑严密自洽。不是因为语气不确定,相反,语气笃定,没有任何保留。
它难以识别,恰恰是因为它不知道自己不知道。
传统软件的bug,是系统在"知道规则"的情况下违反了规则。AI的幻觉,是系统在"以为自己知道"的情况下,用确定的语气表达了不确定的内容。
这是一种全新的、测试领域从未见过的失效模式。它需要全新的测试思维,需要从"验证答案"转向"验证知识边界",从"断言结果"转向"评估可信度",从"发现bug"转向"量化不确定性"。
这个转变,对测试工程师而言,不只是学一套新工具的问题,而是重建一种面对"概率性正确"系统时的测试直觉。
这种直觉,很难靠阅读文档获得,只能靠真实地去测、去发现、去被那一个个自信的错误答案触动、去在一次次的case分析里慢慢形成。
AI幻觉测试,是这个行业里最年轻的一门手艺。
它没有几十年的实践积累,没有被广泛接受的标准答案,甚至连完整的方法论都还在被这个行业一起摸索。
但正因为如此,现在进入这个领域的人,有机会成为定义这门手艺的人——而不只是学习它的人。
这个机会,正在等那些愿意认真对待"AI说得那么自信,我却无法反驳"这种不适感的测试人。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。