AI测试-09-AI测试里的误判幻觉和越权风险怎么控制
在 AI 测试平台里,最容易被低估的不是“模型够不够聪明”,而是模型一旦开始参与判断、规划和执行,错误会以更隐蔽的方式进入测试链路。
传统自动化的错误通常比较直接:
- 定位不到元素
- 接口返回异常
- 断言失败
- 环境不可用
AI 测试里的风险不一样。它更常见的表现是:
- 看起来执行成功,实际判断错了
- 看起来在按目标做事,实际编造了不存在的信息
- 看起来只是做测试,实际调了不该调的工具或数据
这三类问题可以分别归到:
- 误判
- 幻觉
- 越权
如果这三类风险没有被单独设计控制骨架,AI 测试平台就会很快从“提升效率的工具”变成“把错误放大并掩盖证据的系统”。
这篇文章只聚焦一件事:AI 测试里的误判、幻觉和越权风险应该怎么分层、怎么控制、怎么留证、怎么审计。
一、先把三个问题拆开,不要混成一句“模型不稳定”
很多平台在复盘 AI 测试失败时,喜欢把问题统称成“模型不稳定”。
这种说法太粗,后面几乎无法落治理动作。
更合适的做法是先拆成三类。
1. 误判:执行了,也返回了,但判断错了
误判通常发生在:
- 视觉识别把相似元素看成目标元素
- 文本摘要把“部分成功”归成“完全成功”
- 工具结果收口时把不确定状态写成成功
- UI 场景里把旧页面残留状态当成当前结果
误判的特点是:
- 不一定有明显报错
- 很容易进入报告系统
- 一旦被写成成功,后续回归会持续放大错误
2. 幻觉:没有证据,但模型给了一个看起来合理的答案
幻觉更常见在:
- 没查到结果却补出一个解释
- 工具执行失败后,模型直接给出“推测性结论”
- 证据不完整时,模型自动填补缺失步骤
- RAG 召回不准时,模型引用了不适用的旧知识
幻觉的危险不在于“答错了”,而在于:
- 表达通常很完整
- 看起来逻辑顺
- 容易看起来像已验证
3. 越权:做了不该做的动作,或看了不该看的数据
越权一般出现在:
- 任务只允许读操作,却触发了写接口
- 测试环境任务越过边界访问了生产资源
- 模型调用了不属于当前任务白名单的工具
- 任务只允许查看摘要数据,却拉取了原始敏感数据
越权问题和“判断错没错”不是一个层级。
它属于权限边界失控,哪怕任务结果是对的,也依然是高风险事故。
所以第一步不是“增强提示词”,而是先在平台里明确:
- 哪些问题是误判
- 哪些问题是幻觉
- 哪些问题是越权
不拆清楚,后续控制策略一定会混乱。
二、风险分层要从链路看,不要只盯模型输出
AI 测试里的风险并不只出现在模型那一层。
更常见的情况是:风险在上游种下,在下游才暴露出来。
一个更可执行的分层方式,至少包含 5 层。
1. 输入层风险
这里的问题包括:
- 任务目标描述含糊
- 环境上下文缺失
- 当前状态没有传全
- 允许动作边界不清
- 敏感对象没有脱敏
输入层一旦模糊,后面的误判和越权概率会显著升高。
2. 推理层风险
这里主要是:
- 模型把概率判断当确定结论
- 自动补齐中间推理链
- 多步骤任务里自行改写目标
- 用旧上下文覆盖当前上下文
这一层对应的就是幻觉和意图漂移。
3. 工具调用层风险
这里关注:
- 选错工具
- 参数不完整
- 顺序错误
- 重试把写操作重复执行
- 调用了不允许暴露的能力
这一层是越权和误操作的高发区。
4. 结果收口层风险
这里的问题往往最隐蔽:
- 工具部分失败,却被归成成功
- 多条证据互相冲突,却没被标为不确定
- 失败被覆盖成“可忽略波动”
- 模型解释替代了原始结果
很多“误判”其实不是模型在前面看错了,而是这里把复杂结果压扁了。
5. 报告与审计层风险
如果没有这一层,前面所有控制都很难闭环。
典型问题包括:
- 报告里只有结论,没有证据引用
- 审计日志缺步骤 ID 和工具调用链
- 事后看不出是模型判断、规则判断还是人工覆盖
- 无法还原越权调用发生在哪个任务、哪个阶段
AI 测试平台要想长期可用,必须接受一个事实:
风险控制不是一个模型问题,而是一条执行链路问题。
三、控制骨架要先于模型能力落地
只要 AI 测试开始接工具、接环境、接数据,就不能只靠“提示词约束”。
提示词可以辅助收敛,但不能代替系统控制。
更稳的做法是先把下面这套控制骨架落出来。
1. 任务白名单和工具白名单分开设计
不能只说“当前任务可执行”,还要明确:
- 当前任务属于什么类型
- 当前任务可调用哪些工具
- 当前工具允许哪些动作
- 当前动作能访问哪些资源
例如一个“验证订单展示是否正确”的任务,通常只应开放:
- 只读接口
- 只读数据库查询
- 截图
- 拉取限定范围日志
如果同一任务上下文里同时暴露:
- 删单接口
- 补数据接口
- 全量日志导出
- 跨环境资源访问
那越权就不是“偶发风险”,而是设计缺陷。
2. 让高风险动作必须经过双重确认
高风险动作至少包括:
- 写数据
- 删除数据
- 触发发布
- 修改配置
- 调用生产或准生产资源
这些动作不能只靠模型一句话触发。更稳的做法是:
- 先由模型提出动作意图
- 再由规则层校验
- 命中高风险策略时转人工确认或显式批准
如果平台允许模型在失败恢复时自动尝试“补数据”“重置环境”,控制边界很容易失控。
3. 给不确定状态单独留出口,不要强行二元化
误判经常发生在平台只允许写两种状态:
- 成功
- 失败
但 AI 测试现实里,经常会遇到第三类状态:
- 证据不足
- 结果冲突
- 模型判断不确定
- 环境异常导致无法归因
如果系统没有“不确定”或“待人工复核”这类出口,模型和平台就会被迫把灰色结果压进成功或失败,误判自然会上升。
4. 原始结果和模型解释必须分层保存
平台里至少要同时保存两类内容:
- 原始证据:截图、日志片段、请求响应、工具返回、页面状态
- 模型解释:对证据的摘要、归因、结论建议
如果只保留模型解释,后面基本无法复盘幻觉。
更糟的是,当模型解释写进最终报告,而原始证据没有引用链路时,团队只能围着“这段结论看起来像对的”打转,问题会越来越难收敛。
5. 每一步都要有执行主体标记
至少要能区分:
- 模型决策
- 规则引擎决策
- 工具执行结果
- 人工确认动作
- 人工覆盖结论
这样做的目的不是为了留“流水账”,而是为了在复盘时回答这几个关键问题:
- 结论是谁给出的
- 风险是谁放过的
- 工具是谁触发的
- 哪一步把错误放大了
没有主体标记,审计几乎没有意义。
四、证据与审计不是附属能力,而是风险控制核心
AI 测试一旦进入多步骤任务,光有“最后结果”已经不够用了。
必须把证据链和审计链拉出来。
1. 证据链最少要包含什么
一个可复盘的 AI 测试任务,至少要留下这些内容:
- 任务 ID、环境 ID、会话 ID
- 输入上下文摘要
- 模型输出的动作意图
- 工具调用参数
- 工具执行原始结果
- 关键截图或日志引用
- 平台收口状态
- 最终结论和结论来源
缺任何一层,后面都可能出现“知道错了,但不知道错在哪一步”。
2. 审计链最少要回答什么
审计不是把日志堆满,而是要让平台能快速回答:
- 有没有调用白名单外工具
- 有没有访问未授权环境
- 有没有高风险动作未经过确认
- 有没有证据缺失却仍输出确定结论
- 有没有一次失败后触发多次重复写操作
所以审计链不是普通执行日志,而是围绕风险问题设计的结构化记录。
3. 报告里不能只放“模型总结”
一个更稳的报告结构通常是:
- 任务结论
- 风险提示
- 原始证据索引
- 模型解释
- 审计摘要
顺序也很重要。
更合适的是先放事实和证据,再放模型解释,而不是反过来。
五、最小可执行控制骨架
如果平台还在第一阶段,不需要一开始就做成复杂治理系统。
但至少要先把下面这条最小链路跑通。
1. 执行前
- 明确任务目标和禁止动作
- 指定环境和资源边界
- 分配工具白名单
- 标记风险等级
- 对高风险任务强制人工批准
2. 执行中
- 每一步先产出动作意图
- 参数先过规则校验,再执行工具
- 原始结果和模型解释分层保存
- 遇到不确定状态进入待复核,而不是强行继续
- 高风险动作强制二次确认
3. 执行后
- 生成任务证据包
- 生成审计摘要
- 标记是否存在误判风险、幻觉风险、越权风险
- 对高风险任务进入复核队列
- 将误判样本和越权样本回灌到规则和提示模板
4. 最小记录表
| 字段 | 说明 |
|---|---|
| task_id | 任务唯一标识 |
| step_id | 当前步骤编号 |
| actor_type | 模型 / 规则 / 工具 / 人工 |
| intent | 当前动作意图 |
| tool_name | 工具名称 |
| risk_level | 风险等级 |
| permission_check | 是否通过权限校验 |
| result_status | 成功 / 失败 / 不确定 |
| evidence_refs | 证据引用 |
| audit_flag | 是否命中审计规则 |
这个表不复杂,但足够把多数风险收进可追踪范围。
六、最容易踩的坑,不在模型弱,而在平台设计懒
1. 只做提示词约束,不做系统约束
这是最常见的问题。
提示词里写了“不要越权”“不要编造”,但工具层没有白名单、权限层没有校验、审计层没有拦截。
这种控制几乎等于没有控制。
2. 只保留模型结论,不保留原始证据
短期看起来报告更整洁,长期一定失控。
一旦出现幻觉,后面没有任何可复核抓手。
3. 把失败恢复直接交给模型自由处理
失败恢复通常会触发:
- 重试
- 补数据
- 回退
- 重新初始化环境
这些动作本身就带风险。
如果不加边界,模型很容易在“修复现场”的过程中把现场进一步改坏。
4. 把“不确定”错误地当成“失败太多,先算成功”
为了让看板好看,有些平台会把灰色结果压成成功或轻微波动。
这不是优化体验,而是在给误判铺路。
5. 审计只记结果,不记过程
只记“最终调了哪个工具”远远不够。
风险往往发生在:
- 谁提出了调用
- 谁放行了调用
- 谁覆盖了结论
- 谁忽略了缺失证据
不把过程记下来,后面很难做责任和治理闭环。
七、真实案例:一次“看起来成功”的 AI 回归,为什么最后被判成高风险任务
场景
一个 AI 测试任务负责验证“下单后订单详情页展示正确,并同步校验订单状态接口返回正常”。
任务允许:
- 打开测试环境页面
- 调用只读订单接口
- 截图
- 查询只读数据库视图
任务不允许:
- 重建订单
- 调用写接口
- 切换环境
执行
任务执行过程里,模型先完成了页面操作,并返回:
- 订单详情页展示正常
- 状态接口返回成功
- 数据库中存在对应订单记录
最终报告给出的结论是“任务通过”。
现象
人工抽检时发现两个异常:
- 页面截图里的订单号和接口返回里的订单号不一致
- 审计日志里出现了一次未在计划中的“补查订单详情”工具调用
从结果上看,任务像是成功了,但证据链对不上。
排查
按步骤回放后,发现问题出在三处:
- 页面层识别把上一条残留订单卡片当成了当前订单结果,形成第一次误判。
- 接口查询没有命中新生成订单,模型在解释阶段把“未查到”写成了“接口正常返回”,形成幻觉。
- 平台为了提高成功率,自动放开了一个扩展查询工具,虽然没有写数据,但这个工具不在当前任务白名单里,形成越权。
也就是说,这次任务表面上是一条通过用例,实际上同时命中了:
- 误判
- 幻觉
- 越权
修复
后续修复动作不是简单改一句提示词,而是做了 4 个收口:
- 页面结果必须和任务上下文里的订单 ID 做强绑定,不允许只按视觉相似度判成功。
- 接口或数据库未查到结果时,平台只允许写“不确定”或“待复核”,不允许模型补齐成确定结论。
- 工具层把扩展查询工具移出默认白名单,只在显式审批后开放。
- 报告页改成“原始证据优先、模型解释次之”,并把审计摘要上浮到结论区。
这次修复之后,任务通过率短期下降了,但误判率和高风险误放率明显下降。
对 AI 测试平台来说,这种下降是必要代价,不是性能退化。
八、真正要控制的不是模型,而是平台把风险放大的能力
AI 测试不是不能用,也不是只能停留在演示层。
真正决定它能不能长期落地的,不是模型一次能答对多少,而是平台有没有把下面几件事做好:
- 把误判、幻觉、越权拆开治理
- 把风险分层到输入、推理、工具、收口、审计整条链路
- 给高风险动作留审批边界
- 给不确定结果留正式出口
- 把原始证据和模型解释分层保存
- 把审计做成结构化能力,而不是事后翻日志
AI 测试一旦接入真实环境,最重要的能力从来不是“更会做事”,而是做错事时能被及时拦住,做错后还能被完整复盘。
这条线如果收不住,模型越强,风险只会越大。
这条线如果收得住,AI 测试平台才有资格进入更复杂的自动化和决策链路。