1 概述
在AI应用开发过程中,模型推理异常、输出错乱、结果不稳定等Bug往往难以直接定位。传统日志排查方式只能捕获程序报错,无法识别模型语义层面的隐性问题。本文介绍一套AI Bug定位方案,通过采集输入输出样本、特征校验、异常样本聚类,快速区分是代码逻辑问题、数据问题还是模型本身的缺陷,实现AI问题根因快速定位。
2 问题分类
AI场景Bug主要分为三类:
- 代码层Bug:参数传递错误、张量维度异常、接口超时、预处理逻辑错误;程序会抛出异常,日志可捕获。
- 数据层Bug:输入数据脏数据、数据分布偏移、文本编码异常、图片失真;程序无报错,但模型输出不符合预期。
- 模型层Bug:模型幻觉、泛化能力不足、prompt失效、随机采样带来结果波动;程序正常运行,仅语义结果异常。
核心思路:先做基础校验过滤代码与数据问题,再对异常样本做批量评估,定位模型层面问题。
3 代码演示
<span>import</span> json
<span>from</span> typing <span>import</span> <span>List</span>, <span>Dict</span>
<span>class</span> <span>AIBugDetector</span>:
<span>def</span> <span>__init__</span>(<span>self</span>):
self.error_samples: <span>List</span>[<span>Dict</span>] = []
<span>def</span> <span>pre_check</span>(<span>self, prompt: <span>str</span></span>) -> <span>bool</span>:
<span>"""预处理校验,捕获数据与输入异常"""</span>
<span>if</span> <span>not</span> prompt <span>or</span> <span>len</span>(prompt.strip()) == <span>0</span>:
self.error_samples.append({<span>"type"</span>: <span>"data_error"</span>, <span>"msg"</span>: <span>"prompt为空"</span>})
<span>return</span> <span>False</span>
<span>if</span> <span>len</span>(prompt) > <span>4000</span>:
self.error_samples.append({<span>"type"</span>: <span>"data_error"</span>, <span>"msg"</span>: <span>"prompt长度超限"</span>})
<span>return</span> <span>False</span>
<span>return</span> <span>True</span>
<span>def</span> <span>model_infer</span>(<span>self, prompt: <span>str</span></span>) -> <span>str</span>:
<span>"""模拟AI模型推理接口"""</span>
<span># 模拟模型异常场景</span>
<span>if</span> <span>"崩溃"</span> <span>in</span> prompt:
<span>raise</span> RuntimeError(<span>"模型推理服务异常"</span>)
<span>if</span> <span>"幻觉"</span> <span>in</span> prompt:
<span>return</span> <span>"这是一段模型编造的虚假信息"</span>
<span>return</span> <span>"正常模型返回结果"</span>
<span>def</span> <span>run_detect</span>(<span>self, prompt: <span>str</span></span>):
<span>"""AI Bug定位主流程"""</span>
<span>try</span>:
<span>if</span> <span>not</span> self.pre_check(prompt):
<span>return</span> {<span>"status"</span>: <span>"fail"</span>, <span>"reason"</span>: <span>"输入数据异常"</span>}
resp = self.model_infer(prompt)
<span># 简单结果校验:检测幻觉特征词</span>
<span>if</span> <span>"虚假信息"</span> <span>in</span> resp:
self.error_samples.append({<span>"type"</span>: <span>"model_error"</span>, <span>"prompt"</span>: prompt, <span>"output"</span>: resp})
<span>return</span> {<span>"status"</span>: <span>"warn"</span>, <span>"reason"</span>: <span>"模型疑似幻觉Bug"</span>}
<span>return</span> {<span>"status"</span>: <span>"ok"</span>, <span>"result"</span>: resp}
<span>except</span> RuntimeError <span>as</span> e:
self.error_samples.append({<span>"type"</span>: <span>"code_error"</span>, <span>"msg"</span>: <span>str</span>(e), <span>"prompt"</span>: prompt})
<span>return</span> {<span>"status"</span>: <span>"error"</span>, <span>"reason"</span>: <span>f"代码/服务异常:<span>{<span>str</span>(e)}</span>"</span>}
<span>if</span> __name__ == <span>"__main__"</span>:
detector = AIBugDetector()
test_cases = [
<span>""</span>,
<span>"介绍一下AI定位技术"</span>,
<span>"模型会产生幻觉"</span>,
<span>"服务崩溃测试"</span>
]
<span>for</span> <span>case</span> <span>in</span> test_cases:
res = detector.run_detect(<span>case</span>)
<span>print</span>(<span>f"输入:<span>{<span>case</span>}</span> 检测结果:<span>{json.dumps(res, ensure_ascii=<span>False</span>)}</span>"</span>)
<span>print</span>(<span>"\n收集到的异常样本:"</span>)
<span>for</span> item <span>in</span> detector.error_samples:
<span>print</span>(json.dumps(item, ensure_ascii=<span>False</span>))
4 代码说明
pre_check:前置输入校验,拦截空输入、超长文本等脏数据,识别数据层Bug。model_infer:模拟大模型推理接口,构造模型幻觉与服务崩溃场景。run_detect:Bug定位主入口,捕获代码异常、识别模型输出异常,自动归类Bug类型并保存异常样本。- 异常样本池:收集所有失败案例,后续可批量复盘,复现问题。
5 定位流程
- 执行前置校验,判断输入合法性;校验失败,判定为数据Bug。
- 调用模型推理,捕获程序抛出异常,判定为代码/服务Bug。
- 推理成功后校验输出内容,识别幻觉、逻辑错误,判定为模型Bug。
- 汇总异常样本,复现问题,进一步开展根因分析。
6 优化方向
- 增加相似度校验,识别输出结果漂移;
- 接入向量库,对异常样本聚类,快速发现同类问题;
- 增加自动标记工具,对样本打标签,方便后续模型微调;
- 对接监控系统,实时告警AI异常请求。
海量精选技术文档和实战案例持续更新,敬请关注【风骏时光少年】
一套实用的AI问题分层排查思路,适合模型应用开发者快速区分代码、数据与模型缺陷,落地时可结合样本池与监控告警。