用 Claude Code 构建自定义 Skill,让 AI 自主解析 vtestreport、筛除 4.2 万条误判、精准定位真实通信故障
不写一行应用代码,仅通过一个 Markdown 文件 + 自然语言对话,将资深测试工程师的复核经验"教会"给 AI,实现从报告解析到故障定位的全流程自动化。
从搭建到交付,7 个步骤构成完整的 AI 复核闭环。下面先看全貌,再逐个展开。
CAN_Com 测试完成后会生成一份 vtestreport 报告,包含所有测试用例的 Pass/Fail/Warning 判定。传统方式下,测试工程师需要逐条人工复核这份报告——但现实是残酷的。
CAN 总线仲裁机制导致周期性报文频繁出现微小的时序波动。单次测试产生 42,003 条 Warning,其中 99% 以上是仲裁导致的周期超限误判。真实故障混在海量噪音中,人工逐条复核几乎不可能完成——既耗时又容易遗漏。
Vector 官方的 ReportViewerCli 导出 XML 时存在严重的信息丢失:每个 testcase 只保留第一条 Fail(官方文档明确写了 "first fail in the test case"),实际验证 68 条 step Fail 只导出 4 条汇总。更致命的是,42,003 条 Warning 完全丢失,仲裁分析所需的 LastID 信息全部缺失。用 XML 做复核分析,基础数据就是残缺的。
判断一条 Fail 到底是真实故障还是测试误判,需要依赖一系列经验规则:0xBC 报文延时是 Tx 优先级导致的、负偏差是上一帧仲裁的补偿波动、LastID 小于故障 ID 说明是仲裁导致的……这些规则完全依赖资深工程师的经验积累,新人需要数月才能掌握,且执行时仍有出错风险。
有些故障不体现在 Fail 或 Warning 中,而是藏在 testcase 末尾的 errorhook_cnt 值里。只要这个值不为零,就说明底层调度存在系统性异常,所有周期类测试结果的可信度都存疑。但人工复核时,这个数据往往被忽略。
整个过程不写一行应用代码,仅通过一个 Markdown 文件定义规则、通过自然语言对话训练 AI。以下是每一步的详细做法和设计考量。
使用 Claude Code 的 /commands 自定义命令架构,在 commands 目录下创建 CanComReview.md 文件,这就是整个 AI 复核系统的"大脑"。
为什么不直接用对话?因为 Skill 架构让复核逻辑持久化、可复用、可版本管理。每次输入 /CanComReview,AI 都会加载同一套规则,确保每次复核标准一致。整个文件只有 312 行 Markdown,却定义了一套完整的测试报告分析方法论。
操作极其简单:下载好 vtestreport 文件后,打开 Claude Code 终端,输入 /CanComReview。AI 立即加载 Skill 定义,自动在 C:\Users\ZYJ\Downloads\ 目录下查找最新的 *.vtestreport 文件(按修改时间倒序取最新一份)。
如果文件缺失或不可读,AI 会明确列出缺失项并等待补充——不会猜测或跳过。这保证了每次复核的输入完整性。
这是整个方案的技术核心。绕过 Vector ReportViewerCli 导出 XML 的信息丢失问题,直接调用 Vector.ReportViewer.DataApi 这个 .NET DLL,通过 pythonnet 桥接 Python 和 .NET 运行时,实现对 vtestreport 的全量无损解析。
具体实现:AI 自动检查 DLL 是否存在(位于 NuGet 包解压路径),检查 pythonnet 是否安装,然后用递归遍历算法提取所有 TestReport → TestGroup → TestCase → Step 层级的 Fail、Warning 和 errorhook 数据。每条数据都保留了完整的路径上下文和 verdict 信息。
将资深测试工程师的复核经验总结为一套结构化的规则库,直接复制粘贴给 Claude Code,让它自行将这些规则更新到 CanComReview.md 中。AI 不仅理解规则文本,还能在实际复核中正确应用优先级排序和交叉判定。
规则按优先级从高到低排列:强制检出(errorhook ≠ 0、非周期类 Fail)→ 可忽略误判(仲裁规则、0xBC 规则、负偏差规则、Δt 规则)→ 需仲裁项(LastID 不足判定的周期超限)。同时定义了 HTML 报告的 UI 标准——深色渐变头部、数据卡片、胶囊标签、斑马纹表格,确保输出专业统一。
AI 将分析结果自动输出为专业级 HTML 复核报告,保存到桌面,浏览器直接打开即可查看。报告结构严格遵循 Skill 中定义的模板:
顶部概览区(6 个数据卡片:Fail 总数、Warning 总数、筛除误判、真实故障、待仲裁、errorhook 异常)→ 真实故障区(errorhook 异常置顶红色标注 + 按严重等级排序的 Bug 卡片)→ 已筛除误判区(按规则分类汇总)→ 待仲裁区(按偏差量级标注优先级 + BLF 索取指引)→ 行动建议区(高优先级处理建议 + 次要优化建议)。
报告生成后,AI 会立即在对话中向用户输出一份 BLF 索取清单,而不是被动等待用户追问。清单按偏差量级标注优先级:偏差 >5000 次的标记为「高优先级,大概率真实故障」;偏差 <20 次的提示「可能在容差范围内,建议先核对 DBC 周期定义」。
AI 会精确告知需要的时间段(从 vtestreport 中 testcase 的 starttime~endtime 推算),并说明 BLF 的命名格式(CAN_Com_YYYY-MM-DD_HH-MM-SS_L###.blf)和放置路径(Downloads 目录)。用户将文件放入后,AI 用 python-can 的 BLFReader 解析,逐帧检查故障区间内是否存在仲裁报文,完成最终判定。
每次分析完成后,必须执行两件事:
第一,让 AI 总结新经验并更新 Skill——本次复核中发现了哪些新模式?哪些规则需要调整?哪些边界场景需要补充?AI 自动将这些经验写入 CanComReview.md,版本号递增(V1.0 → V1.4.1),下次调用时自动生效。
第二,人工确认 AI 的仲裁结论——本次 AI 提出的所有待审批项,逐一确认是否认可。确认过的判断下次不再重复提出,形成"信任积累"。这确保了 AI 的判断标准与工程师的实际认知持续对齐。
以下是搭建和使用过程中的真实界面截图,点击可放大查看。
在 Claude Code 的 commands 目录下创建 CanComReview.md。这张截图展示了 Skill 定义文件的位置和结构——一个 Markdown 文件即完成了整个 AI 复核系统的规则定义,包含前置校验、核心判定规则、执行流程和输出模板。
输入 /CanComReview 后,AI 自动执行全流程:查找最新 vtestreport → 调用 DataApi 解析 → 递归遍历提取 Fail/Warning/errorhook → 按 4 条规则逐一筛除误判 → 聚合分析 → 输出复核结论。整个过程几分钟内完成,不需要人工干预。
这张截图展示了项目背景与数据分析的上下文。核心思路是:先根据自己的日常报告分析经验总结出一个经验库(哪些是误判模式、哪些是真实故障特征),然后直接复制发送给 Claude Code,让它自行更新 Skill 定义。AI 理解这些经验后,在后续复核中自动应用。
V1.4.1 版本包含 1 条强制检出规则 + 4 条误判判定规则 + 1 条输出标准,覆盖 99% 以上的测试场景。规则按优先级从高到低执行,同一项命中多条规则时按最高优先级判定。
以 2026-03-22 的一份真实 CAN_Com 测试报告为例,展示 AI 复核从 42,003 条噪音中精准提取真实故障的全过程。
全部 4 个 Payload 测试用例的 errorhook_cnt_c0 均非零(值分别为 20、340、20、376)。底层调度存在系统性异常,所有周期类测试结果的可信度存疑。这是人工复核最容易遗漏的高危故障——它不体现在 Fail 或 Warning 中,只藏在 testcase 末尾的一个计数器里。
0x2fe 在 CAN4 上始终未被接收,导致 4 项 Fail。AI 根据规则判定:这是非周期类报文缺失,不属于仲裁波动范畴,直接判定为真实故障。排查方向:确认 ECU 发送配置、检查 CAN4 通道连通性、核对 DBC 映射、在线抓包验证。
0xbc(规则 2)筛除 38,228 条 Warning + 8 条 Fail——这是 Tx 优先级高于 Rx 导致的已知误判模式。负偏差(规则 3)筛除 2 条 Fail——上一帧仲裁延时的补偿波动。最终从 42,003 条 Warning 和 67 条 Fail 中,精准提取出 4 条真实故障(同属 0x2fe 缺失这一个根因)。
对 LastID 信息不足以判定的 14 个 CAN ID(共 53 Fail + 3,771 Warning),AI 按偏差量级标注优先级:6 个高优先级(偏差 >5000,大概率真实故障)、2 个极小偏差(偏差 <20,可能在容差范围内)。AI 主动列出 BLF 索取清单,精确到时间段和文件命名格式。
| 维度 | 人工复核 | AI 复核 |
|---|---|---|
| 处理 42,003 条 Warning | 需 3-5 个工作日逐条判读 | 几分钟内全量聚合归类 |
| 误判筛除准确率 | 依赖个人经验,易遗漏规则 | 按优先级逐条匹配 4 条规则,0 遗漏 |
| errorhook 检测 | 容易忽略 testcase 末尾数据 | 遍历所有 testcase,强制检出 |
| 报告一致性 | 不同工程师复核结果可能不同 | 同一套规则,每次标准一致 |
| 经验传承 | 新人需数月跟师傅学习 | 读 Skill 文件即可获得专家级能力 |
这个系统不是一次性搭建就结束的。每次复核都是一次"训练",让 AI 的判断越来越精准、越来越贴合实际工程需求。
每次复核结束后,AI 会自动总结本次分析中发现的新模式:哪些 CAN ID 有特殊的仲裁阈值?哪些误判模式之前没有覆盖到?哪些边界场景需要补充规则?这些发现不会被丢弃,而是写入 Skill 文件,成为下一次复核的知识储备。
新经验直接写入 CanComReview.md,下次调用 /CanComReview 时自动加载最新版本。从 V1.0 到 V1.4.1,规则库经历了 4 次大版本迭代,覆盖的测试场景从基础的周期类误判扩展到了 errorhook 检测、BLF 仲裁、零 Warning 有 Fail 的特殊处理等复杂场景。
每次 AI 提出的仲裁结论和待审批项,需要工程师逐一确认是否认可。确认过的判断会在 Skill 中标注,下次不再重复提出相同的人工审批要求。这形成了一种"信任积累"——AI 越来越了解工程师的判定标准,交互成本越来越低。
同一套 Skill 规则可以应用于不同项目的 CAN_Com 测试报告。核心的误判判定规则(仲裁、0xBC、负偏差、Δt)是通用的,适配新车型时只需更新 DBC 数据库文件即可。这意味着一个工程师积累的复核经验,可以在团队内横向推广。
这个案例展示了 AI 在嵌入式测试领域的落地可能性——不需要大模型微调、不需要搭建平台,只需要一个 Markdown 文件和正确的使用方式。
整个系统仅靠一个 Markdown 文件(312 行规则定义)+ 自然语言交互搭建,不需要写任何应用代码。测试工程师不需要学习 Python 或 Web 开发,即可独立完成 AI 复核系统的搭建和维护。
将资深工程师的隐性经验(仲裁规则、误判模式、严重等级判定标准)转化为 AI 可执行的显性规则。新人不再需要数月跟师傅学习,读 Skill 文件即可获得专家级复核能力,且执行标准完全一致。
人工复核 42,003 条 Warning 需要 3-5 个工作日 → AI 在几分钟内完成全量聚合归类、规则匹配、故障定位。同时完成 XML 导出做不到的全量 Warning 分析和 errorhook 系统性故障检测,效率和质量同时提升。
每次复核后自动总结经验、更新规则库,形成"越用越准"的正反馈循环。从 V1.0 到 V1.4.1,规则已覆盖 99%+ 的测试场景。人工审批确认机制确保 AI 的判断标准与工程师的实际认知持续对齐。