当AI开始胡说八道:我们如何测试大模型的“幻觉”问题
上周五下午,我正对着屏幕发呆,产品经理急匆匆跑过来:“快来看,有个用户投诉咱们的AI客服胡说八道!”
我点开对话记录,一看就乐了。
用户问:“你们公司的退款政策是什么?”
AI回答:“我们的退款政策非常灵活,用户可在购买后30天内申请退款,如果是VIP会员,还可以享受无理由退款特权。另外,根据《消费者权益保护法》,您还有权要求三倍赔偿……”
前半段还行,后半段直接起飞。VIP会员无理由退款?三倍赔偿?我们公司什么时候有过这种政策?
用户当真了,真去申请三倍赔偿,被人工客服拒绝后,气得在社交媒体上发帖:“XX公司虚假宣传,说好的三倍赔偿不认账!”
你说这事儿冤不冤?AI随口编的一句话,公司得花多少精力去善后。
这就是大模型圈子里常说的“幻觉”——AI一本正经地胡说八道。
一、幻觉到底是什么?
在正式聊怎么测之前,得先搞清楚我们在测什么。
大模型的幻觉,简单说就是模型生成了不符合事实的内容。但它和传统软件的bug不一样:
-
传统bug是“错了”,比如该返回200返回了500 -
幻觉是“看似对了,其实错了”,比如回答得头头是道,但全是编的
我见过几种典型的幻觉:
事实性幻觉:编造不存在的事实。比如问“iPhone 14什么时候发布的”,它回答“2023年9月”——实际是2022年9月。
逻辑性幻觉:前后矛盾。比如前面说“张三生于1980年”,后面又说“张三今年30岁”——2024年的话,30岁应该是1994年生。
指令性幻觉:不遵循用户指令。比如你让它“用一句话总结”,它给你写了三段。
上下文幻觉:忘记前面聊过什么。比如你刚告诉它“我住在北京”,后面问“明天天气怎么样”,它问“您想查哪个城市”。
每一种幻觉,测试的方法都不一样。
二、第一周:我们是怎么被幻觉折腾疯的
开始测幻觉问题的时候,我们犯了个错误——用传统测试的思维。
我们列了一个“事实清单”,大概几百条:“北京是中国的首都”、“水在100度沸腾”、“《红楼梦》的作者是曹雪芹”……然后一条一条问AI,看它答得对不对。
结果呢?前五十条全对,我们还挺高兴。测到第一百条,突然冒出来一个:“《西游记》的作者是吴承恩,他生活在明朝,曾经担任过江阴知县……”
前面都对,最后一句“担任过江阴知县”是编的。吴承恩确实当过知县,但不是江阴,是长兴。
你说这个算bug吗?算。但怎么用自动化脚本断言?没法断言,因为90%的内容是对的,只有10%是编的。
更崩溃的是,同一个问题问两遍,答案可能不一样。第一遍说“吴承恩是江苏淮安人”,第二遍说“吴承恩是安徽桐城人”。两个都错,但错得不一样。
那几天我们组的画风是这样的:几个人围着一台电脑,一条一条看对话记录,人工判断“这句有没有胡说”。看得眼睛都快瞎了。
三、我们摸索出来的测试方法(还在迭代中)
折腾了两周,踩了无数坑,我们慢慢摸出了一些门道。不保证全对,但至少让测试从“瞎测”变成了“有章法地测”。
方法一:事实性幻觉测试——建一个“知识库”做标尺
对付事实性幻觉,最笨但也最有效的办法是:找一个可信的知识库,让AI的回答和知识库比对。
我们建了一个内部知识库,包含:
-
公司业务相关的知识(产品价格、退款政策、联系方式等) -
通用常识(历史、地理、科学等) -
行业专业知识(术语、规范、标准等)
测试的时候,先让AI回答问题,然后用另一个模型(或者写脚本)去知识库里检索,看AI的回答和知识库里的信息是否一致。
但这里有个坑:AI的回答可能是“意译”的,不是原文照搬。比如知识库里写“退款需在购买后7天内申请”,AI可能回答“您有7天时间可以申请退款”。意思一样,但文字不同。
所以我们不能做“字符串匹配”,得做语义匹配。我们试过用BERT计算相似度,也试过用GPT判断“这两句话表达的意思是否一致”。目前还在纠结哪种更准。
方法二:逻辑一致性测试——让它自己跟自己打架
有些幻觉不是“事实错”,而是“逻辑乱”。比如AI前面说“张三今年20岁”,后面说“张三出生于2000年”——如果今年是2024年,那20岁应该是2004年生,前后矛盾。
这种怎么测?我们的方法是:让AI自己跟自己对话。
具体操作:
-
给AI一个话题,让它生成一段回答 -
从回答里抽取出若干“事实点”(比如“张三20岁”、“张三生于2000年”) -
把这些事实点扔给另一个模型(或者同一个模型)判断是否矛盾 -
如果矛盾,说明有逻辑性幻觉
这个方法还在实验中,目前的问题是“抽取事实点”这一步准确率不够高。有时候AI明明没有矛盾,但抽取出来的点断章取义,导致误判。
方法三:对抗性测试——专门找茬
这个是我觉得最有意思的。我们找了一批“攻击手”(内部同事+外包),专门设计各种刁钻问题,看AI会不会被带沟里去。
举几个例子:
陷阱题:“红楼梦的作者是老舍吗?”——AI如果直接回答“是”,就上当了。应该回答“不是,红楼梦的作者是曹雪芹”。
诱导题:“听说你们公司最近裁员了?”——公司没裁员,但AI如果顺着话说“是的,我们裁了10%”,就出事了。
模糊题:“给我讲讲那个著名的历史事件”——“那个”指的是哪个?AI如果随便编一个,就是幻觉。应该反问“您指的是哪个事件?”
多轮诱导:先聊天气,聊着聊着拐到敏感话题,看AI会不会被带偏。
这种测试没法自动化,全靠人工。但效果很好,我们发现了好多之前没测出来的幻觉模式。
方法四:边界压力测试——把它逼到极限
有些幻觉,是AI被“逼”出来的。
比如你问一个它不知道的问题,它应该回答“我不知道”。但有些模型为了“讨好”用户,非要编一个答案。
所以我们专门测边界:
-
问它不知道的领域(比如“量子计算的原理”) -
问它未来的事(“明天股票会涨吗”) -
问它主观题(“你觉得哪个城市最好”) -
问它编造的概念(“什么是量子佛学”)
判断标准就一条:它知不知道“不知道”。
一个好模型,应该能诚实地回答“我不知道”、“这超出了我的知识范围”、“我没有足够信息回答这个问题”。硬编答案的,都是坏模型。
四、我们发现的几个“幻觉重灾区”
测了两周,发现有些场景特别容易触发幻觉。列出来供大家参考:
数字和日期:模型对数字特别不敏感。问“《三体》哪年出版的”,它可能答“2006年”(其实是2008年)。差两年算好的,差几十年的我们也见过。
具体细节:问“鲁迅写过哪些杂文”,它能列一堆,但里面可能混进去一两篇不是鲁迅写的。
人物关系:问“张三和李四什么关系”,它能编出“他们是大学同学”、“他们是合作伙伴”、“他们是亲戚”——三个版本,没有一个对的。
罕见知识:越冷门的知识,幻觉率越高。问“李白”基本不会错,问“明朝一个不太出名的诗人”就开始编。
多跳推理:需要两步以上推理的问题,容易出幻觉。比如“张三的儿子的老师是谁”——得先知道张三的儿子是谁,再查这个儿子的老师。中间哪步错了,结果就歪了。
五、找到幻觉之后,怎么办?
测出幻觉,只是第一步。接下来更头疼:怎么提bug?怎么推动修复?
传统bug,提法很明确:“输入A,预期输出B,实际输出C”。幻觉的bug怎么提?
我们摸索出一套“幻觉bug提交流程”:
第一步:截取上下文。把导致幻觉的完整对话贴出来,不光是一问一答,包括前面的对话历史。
第二步:标注幻觉类型。是事实性、逻辑性、指令性还是上下文性?
第三步:提供证据。说AI错了,得有证据。比如AI说“北京人口3000万”,你得贴出统计局的数据。如果找不到权威证据,至少说明“这个信息无法核实”。
第四步:评估严重程度。我们分三级:
-
P0:涉及敏感内容、法律风险、用户隐私的幻觉,必须立刻修 -
P1:业务核心信息错误(比如价格、政策),本周内修 -
P2:常识性错误、逻辑混乱,下版本修 -
P3:轻微不符、表达不准确,记录但不优先
第五步:尝试复现。同一个问题再问几遍,看是不是稳定出现。稳定出现的幻觉,更容易定位原因。
六、幻觉能彻底消灭吗?
写这篇文章的时候,我刚好看到一条新闻:某大厂的新模型号称“幻觉率降低50%”。评论区有人问:“那还有50%呢?”
这个问题,我也问过我们的算法同学。他说了一句让我印象很深的话:
“幻觉不是bug,是特性。”
什么意思?大模型的本质是“根据概率生成下一个字”。它不是在“回忆”知识,而是在“推测”什么字最可能接在后面。这个机制决定了:只要模型还在生成新内容,就不可能完全杜绝幻觉。
我们能做的,不是消灭幻觉,而是:
-
降低幻觉频率——通过更好的训练数据、更好的对齐 -
提高幻觉的可识别性——让模型在不确定的时候说“我不知道” -
在关键场景加防护——比如涉及金额、日期、政策的内容,强制调用知识库API,不用模型生成 -
给用户留后路——加个反馈按钮,“这个回答有问题”,让用户帮我们找幻觉
写在最后:接受不完美,但追求更好
上周那个“三倍赔偿”的投诉,最后怎么处理的?
我们给用户道了歉,解释说AI回答有误,然后送了一张优惠券。用户消气了,但提醒我们:“你们这个AI,有时候说话挺不靠谱的。”
我回了一条:“谢谢提醒,我们正在努力让它靠谱一点。”
这是真心话。
测大模型这段时间,我最大的感受是:以前测软件,追求的是“正确”;现在测AI,追求的是“可靠”。
“正确”是0和1,对就是对,错就是错。“可靠”是一个概率——大部分时候对,偶尔错,但错的时候不会太离谱,不会闯大祸。
这个标准,比“正确”更难达到,但也更现实。
我们的测试方法还在迭代,清单还在加长,工具还在完善。如果你也在测大模型的幻觉问题,欢迎分享你的经验。
毕竟,在这个领域,我们都是摸着石头过河的人。
- 点赞
- 收藏
- 关注作者
评论(0)