我们经常担心AI会一本正经地胡说八道,却很少去想一个更基础的问题:如果AI根本不知道自己不知道,它连“承认不知道”的机会都没有。让一个由概率采样驱动的大模型开口说“我不知道”,难度比让它写一篇满分作文还高。这篇文章想聊的就是这件事:为什么AI很难承认无知,我们能不能从工程上教会它“不确定时闭嘴”,以及这对整个AI应用的安全边界意味着什么。1. 为什么让AI开口说“我不会”比让它硬答更难1.1 解码器的“天赋”与“诅咒”现在主流大模型的生成方式,本质上是一个接一个地猜下一个词。你给它一个问题,它在内部把问题转成向量,然后在词表上计算每个候选词的概率分布,挑一个或按概率采样一个词,再把这个词拼回输入里,继续猜下一个。这个机制天然有一个倾向:它必须“继续输出”。因为训练的时候,人类语料里几乎每个句子都是有头有尾的完整内容,模型学到的是“语言应当延续下去”,而不是“语言可以在某个边界停下来”。我经常用一个类比来解释这件事:大模型像一个接话接多了的聊天高手,你扔给它一句“你知道吗”,它条件反射般开始补充“故事背景、细节、结论”,因为训练语料里,大部分“你知道吗”后面都跟着一段解释性内容。如果你让它在这个接话循环里主动跳出来说“我不太确定,建议你去查证”,这相当于要让它在概率分布的汪洋大海里找到一个极低概率的出口,它当然很难做。更麻烦的是,自回归解码过程中根本没有一个“中止生成”的显式动作。你可以设置最大token数来强制截断,但那是在生成结束时才起作用,不是模型自己学会了“这个话题超出我的知识边界”。所以你会看到很多AI明明已经编到离谱,还在继续“圆场”,这就是解码机制留下的天生偏向。1.2 “不回答”在训练目标里几乎不存在大模型的训练目标,本质上是在拟合人类回答问题的分布。预训练阶段,模型看到的是海量文档、网页、书籍,里面都是“人类已经把话说完了”的文本;指令微调阶段,人类标注者给出的是正确答案、标准回复;强化对齐阶段,排序模型奖励的是“更符合人类期望”的输出。这三个阶段里,“我不知道”都不是一个常见的训练目标。你想一下,标注者面对一道数学题时,几乎不会标“我算不出来,你自己想办法”。他们更愿意给出详尽步骤。这就导致模型在“给一个合理回答”和“承认自己不会”之间,永远被推向前者。逻辑上,“我不确定”是正确答案的一部分,但在训练信号里,它没有被当成一种“正确输出”来强化。我接触过不少微调项目,大家花大量时间清洗数据、构造问答对,却很少有人专门为“弃答”准备数据。偶尔有工程师说“我加了几个‘我不知道’的样本”,但数量只有几十条,相对于几万条正常问答,权重小到可以忽略。模型学到的依然是:只要生成文字,就有更大的概率得分。1.3 评估体系奖励正确答案,也奖励自信的错误评价一个AI问答系统好不好,最常见指标是准确率、命中率、BLEU、ROUGE,现在流行用大模型当裁判打分。所有这些指标有一个共同默认:模型必须给出一个答案,然后我们把答案和标准答案比对。没有任何指标会给“模型意识到自己不知道并如实说明”加分。这就形成一个很强的反馈闭环:工程师优化模型,就是让它尽量答;答错了损失很小,答对了收益很大;而“拒绝回答”会让分数直接变零。我见过一个内部评测,模型对医学问题答了个错误剂量,评测脚本照样按“能跑通流程”给过,因为脚本只检查输出长度和格式。这种环境逼着模型成为“永远的乐观主义者”。换到真实场景,这种乐观主义会被放大。用户问一个稍微冷门的问题,模型没有足够知识,但它的训练目标告诉它“尽量给一个像样的答案”,于是它把几个相似概念拼接起来,造出一个听上去很合理、实际上漏洞百出的回复。这根本不是“AI撒谎”,而是“AI根本没长着说不知道的器官”。2. “我不知道”的真实形态:置信度、校准与提示词的关系2.1 模型内部其实有“不确定”的信号,只是被吞掉了很多人以为大模型对自己的输出没有任何感知,其实没那么绝对。模型在每一步解码时,会输出一个词表级别的概率分布。如果某个token概率很高,说明模型在语义上比较确定;如果分布很平、熵很高,说明它同时在好几个候选词之间犹豫——这本质上就是一种内部不确定性信号。但问题是,这种概率信号和“事实正确性”之间并不是严格的对应关系。一个模型可能在胡说八道时概率分布依然很陡,因为“错误的连贯性”和“正确的连贯性”在语言统计层面长得非常像。它可能很自信地说出一个编造的法规条文,内部概率却很高,因为“条文”这类表述模式在训练语料里非常常见。所以在工程上,单看输出概率熵来检测“模型是否不知道”,效果有限,需要组合多种信号:多次采样的一致性、输入扰动后答案的稳定性、自评分数、检索引用覆盖率。单一信号只能作为参考,多信号交叉才能逼近“这个模型到底是真会还是蒙的”。2.2 同一个问题,换个问法它就不敢说不知道我在实际使用中观察到一个非常有意思的现象:提示词的角度,直接决定模型会不会“露怯”。你问它“请解释一下XX理论”时,它往往能写一大段;但如果你问它“你能列出这个理论在2023年之后被推翻的证据吗”时,它可能开始含糊其辞。再比如,你让它“用三句话概括”,它反而更愿意直接说“信息不足”。这说明模型并非完全没有“边界感”,而是这种边界感必须被提示词触发。当我们把问题限定得非常具体、把回答格式约束得非常严格时,模型才会在生成空间里找到“承认不知道”这个出口。反过来,开放式问题给了它太多自由,它就会自由发挥。有一个小技巧在实践里很有效:在提示词里明确写“如果知识库中没有依据,请直接回答‘我目前没有找到可靠信息’,不要尝试推测”。这种显式约束作用很大,原因就是它把“承认不知道”从低频出口变成了一个被授权的选项。你会发现,同一个模型,加不加这句话,幻觉率能有肉眼可见的差别。2.3 当“口头谦虚”变成一种格式套话现在很多模型学会了“说不知道的姿势”,却不一定学会了“真正不知道时再说”。你会看到这种回复:“对于这个问题,目前我无法提供准确的答案,建议您查阅相关资料。”听起来很谨慎,但往下翻一段,它还是开始给出一堆看似合理的建议。这是一种非常典型的“防御性前缀”。也就是模型在RLHF阶段学到:开头先来一句免责声明,可以降低被扣分的概率。于是它把“我不知道”当成了一种开场白,而不是实际决策结果。这就让很简单的“看模型有没有说我‘不知道’”来判断安全性,变得不可靠。我自己的判断方法是:看模型在免责声明之后,有没有立刻切换成具体、断言式的语言。如果前言说“我不确定”,后续却给出明确的“因为……所以……”结构,那说明它其实是在表演不知道,真正的置信度并不低。这种“言行不一致”才是工程上最需要识别的情况,因为产品文案里如果照搬这种回复,既伤害了用户体验,也给不了安全保障。3. 让AI学会拒绝:一个“不确定路由”的工程化尝试3.1 先让模型给自己打分,再做可信度抑制与其指望模型自发承认不知道,不如在系统层面建立一个“不确定路由”:每次对话不要直接拿生成结果给用户,而是先经过一个判定模块,评估这次回答的可信度,再决定是直接返回、附带警告还是转人工。我在某个模拟项目里试过一套三路评分:多次采样一致性:同一个问题采样五次,算输出语义相似度。如果五次答案严重不一致,怀疑度升高。输出概率熵:生成结果每token的平均熵,超过阈值说明模型在多个方向上摇摆。自评分数:让模型给自己的答案置信度打分,范围0到10。虽然自评分需要谨慎使用,但作为辅助特征有效。三项分数融合后得到总置信度。高于0.8就直接输出;在0.5到0.8之间就附一句“该回答可能存在不确定性,请核实”;低于0.5就返回“这个问题我目前无法可靠回答”,同时附带参考搜索链接或转人工入口。这套设计的核心思想,是不依赖模型在生成过程中自觉承认不知道,而是让外部模块替它做“不知道”的决策。模型负责内容生产,路由模块负责质量把控。对现在绝大多数大模型来说,这种做法比单纯微调可靠得多,因为路由逻辑是确定性的,不是概率性的。3.2 外部工具兜底,比任何校准都靠谱只靠模型内部信号有一个致命问题:模型不知道自己不知道,就像人不知道自己喝醉了一样。所以更关键的兜底手段,是把“知识来源”外部化。我在工程里特别依赖检索增强的结构:每个回答尽量绑定来源文档。如果检索模块能覆盖问题涉及的概念,模型生成的文本可以从检索结果里找到依据;如果检索结果稀疏,覆盖度很低,这个信号直接决定路由模块是否走“拒绝通道”。哪怕模型仍然自信地编了一个答案,只要检索阶段没找到对应资料,系统就会强制拦截。这个做法背后的逻辑非常朴素:把“知不知道”从模型内部的模糊地带,转移到外部数据库的确定性问题。数据库里有没有资料,是可以量化的;模型有没有知识,却是不可观测的。用确定性的手段约束不确定性的模型,是工程上最现实的路线。我还建议在系统里保存一个“知识覆盖日志”。当用户问题命中低覆盖区间时,把这些问题单独记录,每周做一次统计,就能持续发现产品里哪些领域经常触发“虚拟回答”。有了这些记录,你可以反哺数据标注,专门为这些高未知领域补充“我不确定”的训练样本,形成正循环。3.3 阈值怎么定:要降误拒,还是降幻觉路由模块的阈值设置,本质上是一个商业决策而不仅仅是技术决策。阈值太低,模型几乎什么都会答,用户满意度看似不错,但幻觉回流的比例上升;阈值太高,系统频繁回复“我不知道”“这个我不太确定”,用户会嫌产品太笨。两种方向没有绝对对错,取决于产品定位。我把常见阈值策略整理成一个对照表供参考:策略模式典型阈值优点风险适合场景宽松模式置信度>0.4即直答响应率高,用户不被打断幻觉回流多,安全风险高闲聊、创意生成平衡模式置信度>0.6直答,0.4-0.6带提示大部分体验顺畅,关键场景有缓冲边界案例仍可能漏掉通用客服问答严格模式置信度>0.85直答,否则转人工安全边际高,输出可靠拒答率高,用户流失医疗、法律、金融建议动态模式根据问题域名自动切换上述策略兼顾体验与安全实现复杂度高,需维护规则库综合平台我个人经验是,开始上线时先用“严格模式”,跑两周记录拒答率,再逐步放宽。因为用户对“AI说不知道”的容忍度,其实是可以通过回复话术培养的。只要给出替代解决方案(如“我帮你找到了另一个入口”),拒答本身也可以变成体验良好的服务。4. 从问答到系统边界:不知道能力如何影响真实的AI安全4.1 高风险场景里,一次幻觉的连锁反应在低风险场景里,AI多答说错无非是笑话;但在高风险场景里,“无知的自信心”可能引起真实的连锁反应。举个例子,一个按症状给出建议的医疗辅助问答,如果模型没有明确依据,却断言“这个药可以和某种食物一起吃”,用户一旦当真,后果可能很严重。类似的问题也出现在法律咨询、投资建议、设备排障等专业领域。这些场景有个共同特征:用户往往没有能力独立辨别AI回答是否正确。他们之所以来问,就是因为自己不了解。这时候AI给出一段听起来专业的错误内容,比给出一个“抱歉我无法回答”危险得多。可以说,“不知道”是AI系统在专业领域里的最后一道护栏。所以要重新理解“AI安全”的定义。安全不只是防黑客、防提示注入,也包括“防止模型在知识覆盖不足时继续生成幻觉”。前者是外部攻击,后者是内部失效。一个拥有良好未知感知能力的AI,在高风险场景里的价值,有时候比努力提高几个百分点的正确率更大。4.2 训练方式正在改变模型的“认错”能力有意思的是,模型会不会说“不知道”,很大程度上不是它自己决定的,而是由训练时的优化目标决定的。早期对话模型几乎没有拒绝意识,什么问题都硬接,因为那是最容易拟合人类回复的方式;后来出现基于人类反馈的强化对齐,标注者倾向于给“看起来有用、细致、周到”的回答更高分,于是模型更不愿意收尾承认不足。可问题在于,“人类偏好”并不总是等同于“人类安全”。标注者喜欢详尽的回答,但用户在高风险场景里需要的可能是“在不确定时停止”。这就让“未知能力”和“受欢迎程度”变成一对矛盾。我在实践中发现,如果强化对齐阶段专门引入一类数据——标注者明确要求模型“不要推测、不要补全、提供不确定性判断”——模型的拒答能力会明显提升。关键不是模型“懂不懂”,而是训练数据里有没有足够的“正确拒答”案例。没有这个环节,后续无论怎么设计提示词,都会显得不自然。4.3 上下文越长,模型越容易“越界自信”另一个很隐蔽的威胁是长上下文。现在很多模型支持超大上下文窗口,用户会把整份合同、长篇技术文档、会议记录一次性丢进去。模型会在这些材料里找到若干相关片段,然后自信地补出很多“也许”“大概率”的扩展性结论。问题是:模型在长上下文里很容易把“我在上下文里见过的表述”误当成“我检索过的外部知识”,从而产生一种虚假的确定感。比如上下文里有一份旧版本政策文件,模型可能直接自信地回答“根据这份文件,答案是……”,但用户其实需要知道这份文件已经失效。这种错误跟“不知道”不同,它错在“过度信任已知片段”,而很多拒绝回答机制恰恰无法覆盖这种情况。所以工程上要对长上下文场景单独做风险处理:当回答明显依赖上下文材料时,强制要求模型在回答开头声明“该结论基于您提供的当前材料,可能存在版本时效问题”。另外要有“来源时间戳”的意识,模型生成的内容必须附带着被引用片段对应的时间属性,路由模块才能判断这个来源是否适合用于今天的决策。5. 下一步:让模型“知道自己不知道”的三条路5.1 知识边界建模:把“知道什么”变成显式数据要让AI系统真正学会拒绝,终极目标不是靠提示词“劝”它,而是让它在表示层面建立“知识边界”的概念。可以这样理解:人类专家之所以勇于承认不知道,是因为他们知道自己擅长什么、不擅长什么。这种自我认识,本质上是“能力边界”的表征。模型虽然不能真正做到自我认知,但我们可以给系统建立一份“知识覆盖图谱”:把所有已收录的可信知识源、领域范围、时效版本记录成结构化元数据,再让模型生成回答时,同时输出“该回答所依赖的知识源域ID”。如果某个回答找不到对应知识源ID,路由模块就有充分理由拦截。这套思路已经在某些知识管理系统里出现雏形,但还远未普及。我强烈建议做企业级AI应用的团队,从一开始就把“知识覆盖登记”当作基础设施来做,而不是等幻觉问题暴露以后再来修修补补。用户根本不用看到这份图谱,但它决定了系统能不能“安全地说不知道”。5.2 用不确定性信号反哺训练和人类反馈前面提到,模型解码时会产生熵、一致性采样等不确定性信号。这些信号现在大多被丢弃了,其实它们完全可以变成训练样本的一部分。一个简单可行的方案是:把多次采样结果、熵温度、自评分与最终人类评价一起打包,形成一个“不确定性标注集”。如果模型在熵很高的情况下给出了正确回答,这属于“蒙对”,不应该鼓励;如果熵很高且最终答错了,这是“高风险幻觉”,训练时应当加大惩罚;如果熵很高但模型选择了拒答,转给了人工,那么这次“识别到边界”的行为应当得到奖励。这样可以让模型学会一个隐含策略:与其在不确定地带硬闯,不如停下来求助。我在一个图文识别类小项目里试过类似逻辑,效果是拒答率上升了约两成,但“拒答对应的转人工满意度”明显高于那些硬答的错误回复。用户并不是真的讨厌AI说不知道,他们讨厌的是“说不知道之后没有下一步动作”。只要拒答同时给出可执行的替代路径,体验评分不降反升。5.3 给AI设计“悬停机制”:暂时不懂先不决策第三个思路是借鉴人类合作中常见的“悬停一秒钟”机制。开车的司机遇到雾天看不清路牌,不会加速冲过去,而是减速、开雾灯、或者停下车确认。AI系统在关键决策路径上,也应该有这样一个“悬停状态”:当不确定性超过阈值,不是直接生成最终回复,而是暂停产出,触发外部校验、请求澄清、或者上报人工。这个悬停机制可以分成三个动作:一是“问”,模型转向用户确认:“您说的是这个意思吗?”;二是“查”,自动检索更权威来源后再生成;三是“交”,直接转给人工坐席处理。很多场景并不需要模型当场给出100%准确的答案,只需要它“知道自己不知道”并选择合适动作。悬停机制最大的挑战不是技术,而是产品设计。你得接受一个现实:不是每一个用户提问都能得到一个当场回答。这确实会让个别用户失望,但长期看,它建立起的是“这系统不会乱讲”的信任。信任这种东西,往往是在拒绝中建立起来的。6. 普通用户和开发者能立刻用起来的实操动作6.1 设计提示词:把“说不”写进约束里,而不是空话如果你是普通用户,不需要写代码,你也能让AI更愿意承认不知道。最简单的方法,是在提问后面加一句显式约束:“如果这个问题在你的知识范围内没有可靠依据,请直接回答‘我目前无法可靠回答’,不要尝试推测或补全。”这种约束之所以有效,是因为它给模型的概率分布增加了一个明确的出口。模型不再需要自己发明“谦虚话术”,而是可以按照指令直接中断生成。你还可以在约束里放一个少样本示例,比如:“类比以下格式:问题:某陌生专业术语;回答:我目前没有足够的资料来回答这个问题。”这样模型更容易照做。如果你做的是客服问答、教育问答这类产品,请千万把“承认不知道”的话术单独设计,而不是让模型自由发挥。一个标准化的“我不知道”回复,应该包含三部分:明确声明、原因说明、替代方案。比如“我目前的知识库里没有直接覆盖这个问题。建议你换个关键词搜索,或者让我为你转接人工支持。”这样的回复既不敷衍,又降低了幻觉风险。6.2 分辨“真不知道”与“口头不知道”我在前面提过,模型有时会说“抱歉我无法确认”,然后继续输出断言式内容。判断是否真不知道,有三个可操作的办法: 第一,看后面有没有跟着具体的“因为/所以”逻辑链,如果有,那大概率是表演式谦虚;第二,看回答是否过度完整,正常“不知道”的人不会给出八个步骤的解决方案;第三,交叉验证——重新把问题改写一遍再问,对比两次回答的核心结论是否一致。多次样本下结论都稳定,说明模型其实“知道”一个模式,只是嘴上客气。对开发者而言,更可靠的做法是别用自然语言判断,直接记录路由模块的置信度分数、检索覆盖率和采样一致性。用数字替代感觉,才能在做评测和线上监控时拥有统一标尺。6.3 把“不知道”当作产品功能来规划很多产品经理和工程师不把“拒答”纳入需求文档,因为怕影响活跃度。我几年实践下来发现,这其实是一个错误的产品决策。用户在一个AI产品里最受伤的体验,从来不是“AI拒绝回答”,而是“AI给了个貌似完美、实际误导的回答”。前者最多让人再去问别处,后者可能直接让人做出错误决策。更好的处理方式是在产品设计中留出一个“不确定状态”通道:当模型说不知道时,界面同时展示“想换一种问法”“查看相关内容”“转人工咨询”三个入口。这样“不知道”就不再是对话的死胡同,而是产品流程的分叉点。甚至有团队把“AI主动承认不知道”当成信任标记来宣传,效果反而出奇好。7. 最后分享一个我实际踩过的坑有一段时间,我在维护一个智能问答产品,老板给的指标是“不能有空回答率”。每次问它一个冷门问题,系统就拼命生成一个“尽量像样”的回复,空答率很低,但客服后台的投诉越来越多。用户反馈很一致:“AI给的内容看着专业,实际全是错的,比不答还难受。”后来我们做了一次改动:把空回答率指标从考核里拿掉,换成“幻觉发生率”“转人工满意度”两个指标,同时启用前面说的检索覆盖率兜底机制。三个月以后,空回答率确实上升了,但投诉率下降了将近一半,用户留存反而上涨。那一次我真正明白,AI应用里最值钱的能力,不是让它永远有话说,而是让它在没把握时敢说“我不知道”。如果你也在做类似的产品,别只用“答得对不对”来衡量AI,记得给“不问先后”留一个位置。
我们经常担心AI会一本正经地胡说八道,却很少去想一个更基础的问题:如果AI根本不知道自己不知道,它连“承认不知道”的机会都没有。让一个由概率采样驱动的大模型开口说“我不知道”,难度比让它写一篇满分作文还高。这篇文章想聊的就是这件事:为什么AI很难承认无知,我们能不能从工程上教会它“不确定时闭嘴”,以及这对整个AI应用的安全边界意味着什么。1. 为什么让AI开口说“我不会”比让它硬答更难1.1 解码器的“天赋”与“诅咒”现在主流大模型的生成方式,本质上是一个接一个地猜下一个词。你给它一个问题,它在内部把问题转成向量,然后在词表上计算每个候选词的概率分布,挑一个或按概率采样一个词,再把这个词拼回输入里,继续猜下一个。这个机制天然有一个倾向:它必须“继续输出”。因为训练的时候,人类语料里几乎每个句子都是有头有尾的完整内容,模型学到的是“语言应当延续下去”,而不是“语言可以在某个边界停下来”。我经常用一个类比来解释这件事:大模型像一个接话接多了的聊天高手,你扔给它一句“你知道吗”,它条件反射般开始补充“故事背景、细节、结论”,因为训练语料里,大部分“你知道吗”后面都跟着一段解释性内容。如果你让它在这个接话循环里主动跳出来说“我不太确定,建议你去查证”,这相当于要让它在概率分布的汪洋大海里找到一个极低概率的出口,它当然很难做。更麻烦的是,自回归解码过程中根本没有一个“中止生成”的显式动作。你可以设置最大token数来强制截断,但那是在生成结束时才起作用,不是模型自己学会了“这个话题超出我的知识边界”。所以你会看到很多AI明明已经编到离谱,还在继续“圆场”,这就是解码机制留下的天生偏向。1.2 “不回答”在训练目标里几乎不存在大模型的训练目标,本质上是在拟合人类回答问题的分布。预训练阶段,模型看到的是海量文档、网页、书籍,里面都是“人类已经把话说完了”的文本;指令微调阶段,人类标注者给出的是正确答案、标准回复;强化对齐阶段,排序模型奖励的是“更符合人类期望”的输出。这三个阶段里,“我不知道”都不是一个常见的训练目标。你想一下,标注者面对一道数学题时,几乎不会标“我算不出来,你自己想办法”。他们更愿意给出详尽步骤。这就导致模型在“给一个合理回答”和“承认自己不会”之间,永远被推向前者。逻辑上,“我不确定”是正确答案的一部分,但在训练信号里,它没有被当成一种“正确输出”来强化。我接触过不少微调项目,大家花大量时间清洗数据、构造问答对,却很少有人专门为“弃答”准备数据。偶尔有工程师说“我加了几个‘我不知道’的样本”,但数量只有几十条,相对于几万条正常问答,权重小到可以忽略。模型学到的依然是:只要生成文字,就有更大的概率得分。1.3 评估体系奖励正确答案,也奖励自信的错误评价一个AI问答系统好不好,最常见指标是准确率、命中率、BLEU、ROUGE,现在流行用大模型当裁判打分。所有这些指标有一个共同默认:模型必须给出一个答案,然后我们把答案和标准答案比对。没有任何指标会给“模型意识到自己不知道并如实说明”加分。这就形成一个很强的反馈闭环:工程师优化模型,就是让它尽量答;答错了损失很小,答对了收益很大;而“拒绝回答”会让分数直接变零。我见过一个内部评测,模型对医学问题答了个错误剂量,评测脚本照样按“能跑通流程”给过,因为脚本只检查输出长度和格式。这种环境逼着模型成为“永远的乐观主义者”。换到真实场景,这种乐观主义会被放大。用户问一个稍微冷门的问题,模型没有足够知识,但它的训练目标告诉它“尽量给一个像样的答案”,于是它把几个相似概念拼接起来,造出一个听上去很合理、实际上漏洞百出的回复。这根本不是“AI撒谎”,而是“AI根本没长着说不知道的器官”。2. “我不知道”的真实形态:置信度、校准与提示词的关系2.1 模型内部其实有“不确定”的信号,只是被吞掉了很多人以为大模型对自己的输出没有任何感知,其实没那么绝对。模型在每一步解码时,会输出一个词表级别的概率分布。如果某个token概率很高,说明模型在语义上比较确定;如果分布很平、熵很高,说明它同时在好几个候选词之间犹豫——这本质上就是一种内部不确定性信号。但问题是,这种概率信号和“事实正确性”之间并不是严格的对应关系。一个模型可能在胡说八道时概率分布依然很陡,因为“错误的连贯性”和“正确的连贯性”在语言统计层面长得非常像。它可能很自信地说出一个编造的法规条文,内部概率却很高,因为“条文”这类表述模式在训练语料里非常常见。所以在工程上,单看输出概率熵来检测“模型是否不知道”,效果有限,需要组合多种信号:多次采样的一致性、输入扰动后答案的稳定性、自评分数、检索引用覆盖率。单一信号只能作为参考,多信号交叉才能逼近“这个模型到底是真会还是蒙的”。2.2 同一个问题,换个问法它就不敢说不知道我在实际使用中观察到一个非常有意思的现象:提示词的角度,直接决定模型会不会“露怯”。你问它“请解释一下XX理论”时,它往往能写一大段;但如果你问它“你能列出这个理论在2023年之后被推翻的证据吗”时,它可能开始含糊其辞。再比如,你让它“用三句话概括”,它反而更愿意直接说“信息不足”。这说明模型并非完全没有“边界感”,而是这种边界感必须被提示词触发。当我们把问题限定得非常具体、把回答格式约束得非常严格时,模型才会在生成空间里找到“承认不知道”这个出口。反过来,开放式问题给了它太多自由,它就会自由发挥。有一个小技巧在实践里很有效:在提示词里明确写“如果知识库中没有依据,请直接回答‘我目前没有找到可靠信息’,不要尝试推测”。这种显式约束作用很大,原因就是它把“承认不知道”从低频出口变成了一个被授权的选项。你会发现,同一个模型,加不加这句话,幻觉率能有肉眼可见的差别。2.3 当“口头谦虚”变成一种格式套话现在很多模型学会了“说不知道的姿势”,却不一定学会了“真正不知道时再说”。你会看到这种回复:“对于这个问题,目前我无法提供准确的答案,建议您查阅相关资料。”听起来很谨慎,但往下翻一段,它还是开始给出一堆看似合理的建议。这是一种非常典型的“防御性前缀”。也就是模型在RLHF阶段学到:开头先来一句免责声明,可以降低被扣分的概率。于是它把“我不知道”当成了一种开场白,而不是实际决策结果。这就让很简单的“看模型有没有说我‘不知道’”来判断安全性,变得不可靠。我自己的判断方法是:看模型在免责声明之后,有没有立刻切换成具体、断言式的语言。如果前言说“我不确定”,后续却给出明确的“因为……所以……”结构,那说明它其实是在表演不知道,真正的置信度并不低。这种“言行不一致”才是工程上最需要识别的情况,因为产品文案里如果照搬这种回复,既伤害了用户体验,也给不了安全保障。3. 让AI学会拒绝:一个“不确定路由”的工程化尝试3.1 先让模型给自己打分,再做可信度抑制与其指望模型自发承认不知道,不如在系统层面建立一个“不确定路由”:每次对话不要直接拿生成结果给用户,而是先经过一个判定模块,评估这次回答的可信度,再决定是直接返回、附带警告还是转人工。我在某个模拟项目里试过一套三路评分:多次采样一致性:同一个问题采样五次,算输出语义相似度。如果五次答案严重不一致,怀疑度升高。输出概率熵:生成结果每token的平均熵,超过阈值说明模型在多个方向上摇摆。自评分数:让模型给自己的答案置信度打分,范围0到10。虽然自评分需要谨慎使用,但作为辅助特征有效。三项分数融合后得到总置信度。高于0.8就直接输出;在0.5到0.8之间就附一句“该回答可能存在不确定性,请核实”;低于0.5就返回“这个问题我目前无法可靠回答”,同时附带参考搜索链接或转人工入口。这套设计的核心思想,是不依赖模型在生成过程中自觉承认不知道,而是让外部模块替它做“不知道”的决策。模型负责内容生产,路由模块负责质量把控。对现在绝大多数大模型来说,这种做法比单纯微调可靠得多,因为路由逻辑是确定性的,不是概率性的。3.2 外部工具兜底,比任何校准都靠谱只靠模型内部信号有一个致命问题:模型不知道自己不知道,就像人不知道自己喝醉了一样。所以更关键的兜底手段,是把“知识来源”外部化。我在工程里特别依赖检索增强的结构:每个回答尽量绑定来源文档。如果检索模块能覆盖问题涉及的概念,模型生成的文本可以从检索结果里找到依据;如果检索结果稀疏,覆盖度很低,这个信号直接决定路由模块是否走“拒绝通道”。哪怕模型仍然自信地编了一个答案,只要检索阶段没找到对应资料,系统就会强制拦截。这个做法背后的逻辑非常朴素:把“知不知道”从模型内部的模糊地带,转移到外部数据库的确定性问题。数据库里有没有资料,是可以量化的;模型有没有知识,却是不可观测的。用确定性的手段约束不确定性的模型,是工程上最现实的路线。我还建议在系统里保存一个“知识覆盖日志”。当用户问题命中低覆盖区间时,把这些问题单独记录,每周做一次统计,就能持续发现产品里哪些领域经常触发“虚拟回答”。有了这些记录,你可以反哺数据标注,专门为这些高未知领域补充“我不确定”的训练样本,形成正循环。3.3 阈值怎么定:要降误拒,还是降幻觉路由模块的阈值设置,本质上是一个商业决策而不仅仅是技术决策。阈值太低,模型几乎什么都会答,用户满意度看似不错,但幻觉回流的比例上升;阈值太高,系统频繁回复“我不知道”“这个我不太确定”,用户会嫌产品太笨。两种方向没有绝对对错,取决于产品定位。我把常见阈值策略整理成一个对照表供参考:策略模式典型阈值优点风险适合场景宽松模式置信度>0.4即直答响应率高,用户不被打断幻觉回流多,安全风险高闲聊、创意生成平衡模式置信度>0.6直答,0.4-0.6带提示大部分体验顺畅,关键场景有缓冲边界案例仍可能漏掉通用客服问答严格模式置信度>0.85直答,否则转人工安全边际高,输出可靠拒答率高,用户流失医疗、法律、金融建议动态模式根据问题域名自动切换上述策略兼顾体验与安全实现复杂度高,需维护规则库综合平台我个人经验是,开始上线时先用“严格模式”,跑两周记录拒答率,再逐步放宽。因为用户对“AI说不知道”的容忍度,其实是可以通过回复话术培养的。只要给出替代解决方案(如“我帮你找到了另一个入口”),拒答本身也可以变成体验良好的服务。4. 从问答到系统边界:不知道能力如何影响真实的AI安全4.1 高风险场景里,一次幻觉的连锁反应在低风险场景里,AI多答说错无非是笑话;但在高风险场景里,“无知的自信心”可能引起真实的连锁反应。举个例子,一个按症状给出建议的医疗辅助问答,如果模型没有明确依据,却断言“这个药可以和某种食物一起吃”,用户一旦当真,后果可能很严重。类似的问题也出现在法律咨询、投资建议、设备排障等专业领域。这些场景有个共同特征:用户往往没有能力独立辨别AI回答是否正确。他们之所以来问,就是因为自己不了解。这时候AI给出一段听起来专业的错误内容,比给出一个“抱歉我无法回答”危险得多。可以说,“不知道”是AI系统在专业领域里的最后一道护栏。所以要重新理解“AI安全”的定义。安全不只是防黑客、防提示注入,也包括“防止模型在知识覆盖不足时继续生成幻觉”。前者是外部攻击,后者是内部失效。一个拥有良好未知感知能力的AI,在高风险场景里的价值,有时候比努力提高几个百分点的正确率更大。4.2 训练方式正在改变模型的“认错”能力有意思的是,模型会不会说“不知道”,很大程度上不是它自己决定的,而是由训练时的优化目标决定的。早期对话模型几乎没有拒绝意识,什么问题都硬接,因为那是最容易拟合人类回复的方式;后来出现基于人类反馈的强化对齐,标注者倾向于给“看起来有用、细致、周到”的回答更高分,于是模型更不愿意收尾承认不足。可问题在于,“人类偏好”并不总是等同于“人类安全”。标注者喜欢详尽的回答,但用户在高风险场景里需要的可能是“在不确定时停止”。这就让“未知能力”和“受欢迎程度”变成一对矛盾。我在实践中发现,如果强化对齐阶段专门引入一类数据——标注者明确要求模型“不要推测、不要补全、提供不确定性判断”——模型的拒答能力会明显提升。关键不是模型“懂不懂”,而是训练数据里有没有足够的“正确拒答”案例。没有这个环节,后续无论怎么设计提示词,都会显得不自然。4.3 上下文越长,模型越容易“越界自信”另一个很隐蔽的威胁是长上下文。现在很多模型支持超大上下文窗口,用户会把整份合同、长篇技术文档、会议记录一次性丢进去。模型会在这些材料里找到若干相关片段,然后自信地补出很多“也许”“大概率”的扩展性结论。问题是:模型在长上下文里很容易把“我在上下文里见过的表述”误当成“我检索过的外部知识”,从而产生一种虚假的确定感。比如上下文里有一份旧版本政策文件,模型可能直接自信地回答“根据这份文件,答案是……”,但用户其实需要知道这份文件已经失效。这种错误跟“不知道”不同,它错在“过度信任已知片段”,而很多拒绝回答机制恰恰无法覆盖这种情况。所以工程上要对长上下文场景单独做风险处理:当回答明显依赖上下文材料时,强制要求模型在回答开头声明“该结论基于您提供的当前材料,可能存在版本时效问题”。另外要有“来源时间戳”的意识,模型生成的内容必须附带着被引用片段对应的时间属性,路由模块才能判断这个来源是否适合用于今天的决策。5. 下一步:让模型“知道自己不知道”的三条路5.1 知识边界建模:把“知道什么”变成显式数据要让AI系统真正学会拒绝,终极目标不是靠提示词“劝”它,而是让它在表示层面建立“知识边界”的概念。可以这样理解:人类专家之所以勇于承认不知道,是因为他们知道自己擅长什么、不擅长什么。这种自我认识,本质上是“能力边界”的表征。模型虽然不能真正做到自我认知,但我们可以给系统建立一份“知识覆盖图谱”:把所有已收录的可信知识源、领域范围、时效版本记录成结构化元数据,再让模型生成回答时,同时输出“该回答所依赖的知识源域ID”。如果某个回答找不到对应知识源ID,路由模块就有充分理由拦截。这套思路已经在某些知识管理系统里出现雏形,但还远未普及。我强烈建议做企业级AI应用的团队,从一开始就把“知识覆盖登记”当作基础设施来做,而不是等幻觉问题暴露以后再来修修补补。用户根本不用看到这份图谱,但它决定了系统能不能“安全地说不知道”。5.2 用不确定性信号反哺训练和人类反馈前面提到,模型解码时会产生熵、一致性采样等不确定性信号。这些信号现在大多被丢弃了,其实它们完全可以变成训练样本的一部分。一个简单可行的方案是:把多次采样结果、熵温度、自评分与最终人类评价一起打包,形成一个“不确定性标注集”。如果模型在熵很高的情况下给出了正确回答,这属于“蒙对”,不应该鼓励;如果熵很高且最终答错了,这是“高风险幻觉”,训练时应当加大惩罚;如果熵很高但模型选择了拒答,转给了人工,那么这次“识别到边界”的行为应当得到奖励。这样可以让模型学会一个隐含策略:与其在不确定地带硬闯,不如停下来求助。我在一个图文识别类小项目里试过类似逻辑,效果是拒答率上升了约两成,但“拒答对应的转人工满意度”明显高于那些硬答的错误回复。用户并不是真的讨厌AI说不知道,他们讨厌的是“说不知道之后没有下一步动作”。只要拒答同时给出可执行的替代路径,体验评分不降反升。5.3 给AI设计“悬停机制”:暂时不懂先不决策第三个思路是借鉴人类合作中常见的“悬停一秒钟”机制。开车的司机遇到雾天看不清路牌,不会加速冲过去,而是减速、开雾灯、或者停下车确认。AI系统在关键决策路径上,也应该有这样一个“悬停状态”:当不确定性超过阈值,不是直接生成最终回复,而是暂停产出,触发外部校验、请求澄清、或者上报人工。这个悬停机制可以分成三个动作:一是“问”,模型转向用户确认:“您说的是这个意思吗?”;二是“查”,自动检索更权威来源后再生成;三是“交”,直接转给人工坐席处理。很多场景并不需要模型当场给出100%准确的答案,只需要它“知道自己不知道”并选择合适动作。悬停机制最大的挑战不是技术,而是产品设计。你得接受一个现实:不是每一个用户提问都能得到一个当场回答。这确实会让个别用户失望,但长期看,它建立起的是“这系统不会乱讲”的信任。信任这种东西,往往是在拒绝中建立起来的。6. 普通用户和开发者能立刻用起来的实操动作6.1 设计提示词:把“说不”写进约束里,而不是空话如果你是普通用户,不需要写代码,你也能让AI更愿意承认不知道。最简单的方法,是在提问后面加一句显式约束:“如果这个问题在你的知识范围内没有可靠依据,请直接回答‘我目前无法可靠回答’,不要尝试推测或补全。”这种约束之所以有效,是因为它给模型的概率分布增加了一个明确的出口。模型不再需要自己发明“谦虚话术”,而是可以按照指令直接中断生成。你还可以在约束里放一个少样本示例,比如:“类比以下格式:问题:某陌生专业术语;回答:我目前没有足够的资料来回答这个问题。”这样模型更容易照做。如果你做的是客服问答、教育问答这类产品,请千万把“承认不知道”的话术单独设计,而不是让模型自由发挥。一个标准化的“我不知道”回复,应该包含三部分:明确声明、原因说明、替代方案。比如“我目前的知识库里没有直接覆盖这个问题。建议你换个关键词搜索,或者让我为你转接人工支持。”这样的回复既不敷衍,又降低了幻觉风险。6.2 分辨“真不知道”与“口头不知道”我在前面提过,模型有时会说“抱歉我无法确认”,然后继续输出断言式内容。判断是否真不知道,有三个可操作的办法: 第一,看后面有没有跟着具体的“因为/所以”逻辑链,如果有,那大概率是表演式谦虚;第二,看回答是否过度完整,正常“不知道”的人不会给出八个步骤的解决方案;第三,交叉验证——重新把问题改写一遍再问,对比两次回答的核心结论是否一致。多次样本下结论都稳定,说明模型其实“知道”一个模式,只是嘴上客气。对开发者而言,更可靠的做法是别用自然语言判断,直接记录路由模块的置信度分数、检索覆盖率和采样一致性。用数字替代感觉,才能在做评测和线上监控时拥有统一标尺。6.3 把“不知道”当作产品功能来规划很多产品经理和工程师不把“拒答”纳入需求文档,因为怕影响活跃度。我几年实践下来发现,这其实是一个错误的产品决策。用户在一个AI产品里最受伤的体验,从来不是“AI拒绝回答”,而是“AI给了个貌似完美、实际误导的回答”。前者最多让人再去问别处,后者可能直接让人做出错误决策。更好的处理方式是在产品设计中留出一个“不确定状态”通道:当模型说不知道时,界面同时展示“想换一种问法”“查看相关内容”“转人工咨询”三个入口。这样“不知道”就不再是对话的死胡同,而是产品流程的分叉点。甚至有团队把“AI主动承认不知道”当成信任标记来宣传,效果反而出奇好。7. 最后分享一个我实际踩过的坑有一段时间,我在维护一个智能问答产品,老板给的指标是“不能有空回答率”。每次问它一个冷门问题,系统就拼命生成一个“尽量像样”的回复,空答率很低,但客服后台的投诉越来越多。用户反馈很一致:“AI给的内容看着专业,实际全是错的,比不答还难受。”后来我们做了一次改动:把空回答率指标从考核里拿掉,换成“幻觉发生率”“转人工满意度”两个指标,同时启用前面说的检索覆盖率兜底机制。三个月以后,空回答率确实上升了,但投诉率下降了将近一半,用户留存反而上涨。那一次我真正明白,AI应用里最值钱的能力,不是让它永远有话说,而是让它在没把握时敢说“我不知道”。如果你也在做类似的产品,别只用“答得对不对”来衡量AI,记得给“不问先后”留一个位置。