jsdnaasd/rag-trace-auditor
GitHub: jsdnaasd/rag-trace-auditor
一款轻量级 Python CLI 工具,用于审计 RAG 和 Agent 的 trace,检测回答的证据支持度、引用漂移以及检索内容中的 prompt injection 标记。
Stars: 2 | Forks: 0
# RAG Trace 审计员
RAG Trace Auditor 是一个小型 Python CLI,用于在运行后审查检索增强生成(RAG)和 Agent 的 trace。它会读取 JSONL trace,将每个回答句子与检索到的 chunk 进行比较,标记指向缺失 chunk 的引用,并报告在检索文本中发现的 prompt injection 标记。
RAG Trace Auditor 是一个小型 Python 命令行工具,用于在 RAG 或 Agent 运行结束后检查 trace。它会读取 JSONL,比较回答句子和检索片段,发现不存在的引用,并提示检索内容里的 prompt injection 风险。
## 已实现的功能
- 带有明确校验错误的 JSONL trace 加载器。
- 使用 token overlap 和引用提示的确定性句子到 chunk 支持度评分。
- 针对 `[policy-2026]` 等括号引用的引用漂移检查。
- 检索 chunk 中的 prompt injection 标记检测。
- 输出 JSON、Markdown 和独立 HTML 报告。
- 用于 CI 或预发布检查的 `--fail-under` 门槛。
- 针对无支持声明、缺失引用和 injection 标记的单元测试。
中文说明:
- 支持读取 JSONL trace,并在格式错误时给出明确错误。
- 使用可复现的 token overlap 方法评估回答句子是否被检索片段支持。
- 检查类似 `[policy-2026]` 的引用是否真的存在于 retrieved chunks。
- 检查检索片段中常见的 prompt injection 字样。
- 可输出 JSON、Markdown 和独立 HTML 报告。
- 提供 `--fail-under`,方便在 CI 中设置质量门槛。
- 包含覆盖核心逻辑的单元测试。
## 架构
本项目刻意保持简单:
- `rag_trace_auditor.analyzer` 加载 trace 记录,对回答句子和检索 chunk 进行分词,评估支持度,并汇总 trace 级别的指标。
- `rag_trace_auditor.render` 将结构化的审计结果转换为 Markdown 或独立 HTML 报告。
- `rag_trace_auditor.cli` 提供命令行入口和 CI 阈值行为。
- `examples/traces.jsonl` 包含两个示例 trace:一个包含无支持的声明,另一个包含检索到的 injection 标记。
- `docs/` 包含 GitHub Pages 演示文稿和生成的示例报告。
中文说明:
- `analyzer` 负责读取 trace、分词、句子支持度评分和汇总指标。
- `render` 负责把结构化结果渲染成 Markdown 或 HTML。
- `cli` 负责命令行参数和质量门槛退出码。
- `examples/traces.jsonl` 提供带有问题的示例数据。
- `docs/` 用作 GitHub Pages 展示和示例报告。
## 如何运行
使用 Python 3.10 或更高版本。
```
cd /Users/Zhuanz1/Documents/rag-trace-auditor
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
rag-trace-auditor examples/traces.jsonl \
--json-out reports/audit.json \
--markdown-out reports/audit.md \
--html-out reports/audit.html
```
你也可以在不安装的情况下运行:
```
PYTHONPATH=src python -m rag_trace_auditor.cli examples/traces.jsonl
```
预期的 trace 格式:
```
{"id":"trace-1","question":"...","answer":"Answer sentence [chunk-a].","retrieved":[{"id":"chunk-a","text":"...","source":"https://example.com/doc"}]}
```
中文说明:
项目只依赖 Python 标准库。安装为 editable package 后可以直接使用 `rag-trace-auditor` 命令;也可以用 `PYTHONPATH=src` 直接运行模块。
## 验证 / 测试
运行单元测试:
```
PYTHONPATH=src python -m unittest discover -s tests
```
生成示例报告:
```
rag-trace-auditor examples/traces.jsonl \
--json-out docs/sample-audit.json \
--markdown-out docs/sample-audit.md \
--html-out docs/sample-report.html
```
使用 CI 式阈值:
```
rag-trace-auditor examples/traces.jsonl --fail-under 0.50
```
中文说明:
`pytest` 会验证核心判断逻辑。示例报告会写入 `docs/`,可以直接用于 GitHub Pages。`--fail-under` 会在平均分低于阈值时返回非零退出码,适合接入 CI。
## 已知限制
- 支持度评分基于词法而非语义。它会漏掉没有共享足够词汇的改写句子。
- 它不会调用 LLM judge,也不验证检索到的 chunk 本身是否真实。
- 引用解析目前侧重于诸如 `[chunk-id]` 之类的括号引用。
- injection 检测使用已知的字符串模式,无法捕获所有对抗性措辞。
- HTML 报告是本地静态文件,而不是托管的观测后端。
中文说明:
- 当前支持度评分是词面匹配,不是语义匹配。
- 工具不会调用 LLM judge,也不会判断检索片段本身是否真实。
- 引用解析主要支持 `[chunk-id]` 这种格式。
- prompt injection 检测是规则型的,无法覆盖所有变体。
- HTML 报告是静态文件,不是完整的线上观测系统。
## 路线图
- 添加可选的、基于 embedding 的语义支持度评分。
- 为常见的 LangChain 和 LlamaIndex trace 导出添加适配器。
- 添加 GitHub Action 示例,将审计摘要评论到 pull request 上。
- 添加可配置的项目专属 injection 模式和引用格式。
中文说明:
- 增加可选的 embedding 语义支持度评分。
- 增加对 LangChain 和 LlamaIndex trace 导出的适配。
- 增加 GitHub Action 示例,把审计摘要评论到 PR。
- 支持项目自定义的 injection 规则和引用格式。
标签:DLL 劫持, RAG, 人工智能, 代码审查, 大语言模型, 文档结构分析, 用户模式Hook绕过, 聊天机器人, 逆向工具