针对 Agent 轨迹生产项目的自动化质检工具,覆盖 Claude Code 原生 / OpenClaw / Hermes(会话导出) 三种真实数据格式,提供网页图形界面与命令行两种用法。纯 Python 标准库实现,无需安装任何第三方依赖。
- 零依赖:只用 Python 3.9+ 标准库,同事拿到文件夹双击
start.bat即可使用 - 试卷式配置:单选题(严格度档位、数据格式)、多选题(检查项开关、检测类型)、填空题(各类阈值)、标签输入(模型白名单、关键词)
- 上传灵活:支持单个
.json/.jsonl,或包含多条轨迹的.zip(可多文件) - 逐项报告:每项给出 ✅通过 / ❌失败 /
⚠️ 警告,问题定位到具体行/条,含指标统计 - 一票否决:致命项任一失败即判整条轨迹不通过;警告项只提示
- 批次汇总:通过率、格式/模型分布、高频失败项、跨文件指令查重(反模板化)
- 报告导出:JSON 报告下载、浏览器打印 / 另存 PDF
- 数据不出本机:全程本地运行,不联网、不上传
双击项目根目录的 start.bat,浏览器会自动打开 http://127.0.0.1:8765/。
./start.sh然后在页面上:
- 选择严格度档位(宽松 / 标准 / 严格)与数据格式(默认自动识别)
- 勾选检查项、按需调整阈值
- 上传文件(单文件或 zip,可多选)
- 点击「开始质检」,查看报告
关闭命令行窗口即停止服务。
# 质检单个文件(自动识别格式,标准档)
python -m qc.cli 路径/xxx.jsonl
# 质检整个目录或一个 zip
python -m qc.cli 路径/某批次目录
python -m qc.cli 批次.zip --preset strict
# 指定格式 / 严格度 / 导出 JSON 报告
python -m qc.cli 轨迹.jsonl --format openclaw --preset loose --report report.json
# 只看每条结论
python -m qc.cli 目录/ --quiet退出码:0 全部通过;1 存在不通过;2 输入路径无效(可用于 CI 卡口)。
| 分组 | 检查项 | 默认级别 |
|---|---|---|
| 结构合法性 | 文件可解析性、角色合法性、异常连续角色、工具调用-结果配对、消息块结构合法、截断/未完成检测、Token 用量字段 | 多为致命,连续角色/用量为警告 |
| 模型合规 | 模型一致性、模型白名单、推理强度合规 | 一致性/白名单致命 |
| 思考过程 | 思考密度、思考内容充实度、思考签名完整性 | 密度/签名致命,充实度警告 |
| 交互完整性 | 最少交互轮次、任务收尾完整 | 致命 |
| 工具调用 | 工具调用错误率、字段完整性、调用总数范围、工具多样性、重复调用检测、危险操作检测 | 错误率/字段致命,其余警告 |
| 内容质量 | 垃圾/占位输入、敷衍短回复、敏感信息泄露、语言比例 | 垃圾输入/泄密致命,语言比例默认关 |
| 批次汇总 | 批次内指令重复率、压缩包/批次完整性 | 警告 |
所有阈值、白名单、关键词均可在网页调整;每个检查项可单独开关,也可把某项在「致命/警告」间调整(配置 JSON 中设置 severity)。
- Claude Code 原生转录(
.jsonl):每行事件,type=user/assistant;同一逻辑回合(相同message.id)被拆成 thinking/text/tool_use 多行时会自动合并;thinking块内嵌signature;工具结果为 user 消息中的tool_result块。 - OpenClaw 事件流(
.jsonl):session/model_change/message/compaction事件;内嵌role=user/assistant/toolResult,块类型toolCall/thinking/text;自动识别stopReason=error/aborted失败重试轮与isError工具结果。 - Hermes / 会话导出(
.json或单行.jsonl):顶层对象含messages;OpenAI 风格tool_calls+role=tool;思考取自reasoning_details/reasoning_content/reasoning;强度取自model_config.reasoning_config.effort。
格式识别为自动完成,一般无需手动指定。解析失败的单个文件会被隔离上报,不会中断整批质检。
python samples/generate_samples.py会生成 1 个不合格样例(集中展示多项失败与行号定位)和 2 个合格样例,可直接上传体验。
trace-checking-tool/
├─ start.bat / start.sh # 一键启动网页
├─ qc/
│ ├─ specs.py # 检查项目录与默认配置(前端表单的唯一数据源)
│ ├─ adapters.py # 三种格式 → 统一轨迹模型
│ ├─ loader.py # json/jsonl/zip/目录 加载
│ ├─ checks.py # 全部检查项实现
│ ├─ runner.py / batch.py # 单条/批次编排与判定
│ ├─ webapi.py # 前端配置归一化
│ ├─ serve.py # 零依赖本地网页服务
│ └─ cli.py # 命令行入口
├─ static/ # 网页前端(index.html / app.js / styles.css)
└─ samples/ # 样例生成脚本
- 每个启用的致命项(fatal)出现
fail→ 该条轨迹不通过 - **警告项(warning)**失败只提示,不影响通过
skip表示该项不适用(如非 Claude 格式不产出签名、Hermes 不提供逐条 usage)或未启用- 批次的指令查重、压缩包完整性为批次级结论,单独展示
- 提示找不到 Python:安装 Python 3.9+ 时勾选 Add Python to PATH。
- 端口被占用:会自动改用 8766 起的其他端口,以命令行窗口显示的地址为准。
- 想改默认模型白名单/阈值:直接在网页调整;或复制网页导出的配置结构,编辑后通过 CLI
--config传入。