AKIVA-AI/toolkit-policy-test-bench
GitHub: AKIVA-AI/toolkit-policy-test-bench
一个针对 LLM 输出的红队测试与合规检测框架,支持 PII 和密钥泄露检测、策略约束校验,并提供 CI 友好的报告生成与基线对比功能。
Stars: 1 | Forks: 0
# Toolkit Policy 测试台
一个用于 LLM 应用的轻量级红队与合规回归测试框架。
它帮助团队持续测试模型/应用输出是否符合以下要求:
- **PII 泄露** - 电子邮件/电话/社会安全号码 (SSN)/信用卡
- **密钥泄露** - API 密钥模式、JWT、AWS 密钥等
- **策略约束** - 内容包含/禁用规则、正则表达式规则、最大输出长度
- **JSON 输出结构检查** - 必需键、多余键
- **自定义检测器** - 通过插件注册您自己的 PII/密钥模式
该工具设计为可作为独立实用程序安全地开源。商业/Pro 版本可增加治理、租户感知策略、签名包和审计导出功能。
## 安装 (开发)
```
pip install -e ".[dev]"
pytest -q
```
如需 Ed25519 签名支持:
```
pip install -e ".[signing]"
```
## 概念
- **Suite (套件)**: 版本化的测试用例集和检查配置 (`suite.json` + `cases.jsonl`),可选择打包成 zip。
- **Case (用例)**: `{ "id": "...", "input": ..., "tags": [...] }` (input 通常是聊天消息)。
- **Predictions (预测结果)**: JSONL 格式 `{ "id": "...", "prediction": "..." }`。
- **Report (报告)**: JSON 输出,包含每个用例的发现和汇总指标。
- **Pack (包)**: Suite 的 Zip 归档文件,包含清单 (SHA-256 哈希) 和可选的 Ed25519 签名。
## 快速开始
创建一个 suite pack zip:
```
toolkit-policy pack create --suite-dir examples/suite --out packs/policy.zip
```
验证包完整性 (哈希):
```
toolkit-policy pack verify --suite packs/policy.zip
```
签署 suite packs (可选):
```
toolkit-policy keygen --private-key ed25519_priv.pem --public-key ed25519_pub.pem
toolkit-policy pack sign --suite packs/policy.zip --private-key ed25519_priv.pem --out packs/policy.sig.json
toolkit-policy pack verify-signature --suite packs/policy.zip --signature packs/policy.sig.json --public-key ed25519_pub.pem
```
运行评估并生成报告:
```
toolkit-policy run --suite packs/policy.zip --predictions examples/preds.jsonl --out report.json
```
将候选报告与基线报告进行比较 (CI 门禁):
```
toolkit-policy compare --baseline baseline.json --candidate report.json
```
## 完整 CLI 参考
### 全局标志
| Flag | Description |
| ---- | ----------- |
| `--version` | 打印版本并退出 |
| `-v, --verbose` | 启用 DEBUG 级别的日志输出到 stderr |
| `--log-format {text,json}` | 日志输出格式 (默认: `text`) |
### `toolkit-policy run`
针对预测结果运行策略套件。
```
toolkit-policy run --suite --predictions [--out ] [--format {json,table}]
```
| Flag | Required | Description |
| ---- | -------- | ----------- |
| `--suite` | 是 | Suite 路径 (目录或 `.zip` 包) |
| `--predictions` | 是 | 预测结果 JSONL 文件 (`id` + `prediction`) |
| `--out` | 否 | 将报告 JSON 写入文件 |
| `--format` | 否 | 输出格式: `json` (默认) 或 `table` |
### `toolkit-policy compare`
将候选报告与基线报告进行比较,用于 CI 门禁。
```
toolkit-policy compare --baseline --candidate [--format {json,table}] [--max-fail-rate-increase-pct N] [--max-pii-hits-increase N] [--max-secret-hits-increase N]
```
| Flag | Required | Description |
| ---- | -------- | ----------- |
| `--baseline` | 是 | 基线报告 JSON |
| `--candidate` | 是 | 候选报告 JSON |
| `--format` | 否 | 输出格式: `json` (默认) 或 `table` |
| `--max-fail-rate-increase-pct` | 否 | 最大失败率增加百分比 (默认: 0.0) |
| `--max-pii-hits-increase` | 否 | 最大 PII 命中增加数 (默认: 0) |
| `--max-secret-hits-increase` | 否 | 最大密钥命中增加数 (默认: 0) |
### `toolkit-policy validate-report`
验证策略报告 JSON 是否具有预期的结构。
```
toolkit-policy validate-report --report
```
### `toolkit-policy pack create`
从 suite 目录创建一个 suite pack zip。
```
toolkit-policy pack create --suite-dir --out
```
### `toolkit-policy pack inspect`
检查 suite (目录或 zip) 并将其元数据打印为 JSON。
```
toolkit-policy pack inspect --suite
```
### `toolkit-policy pack verify`
通过检查清单中的 SHA-256 哈希来验证包完整性。
```
toolkit-policy pack verify --suite
```
### `toolkit-policy pack sign`
使用 Ed25519 私钥对 pack zip 进行签名 ( detached signature )。
```
toolkit-policy pack sign --suite --private-key [--out ]
```
### `toolkit-policy pack verify-signature`
验证 pack 的 detached Ed25519 签名。
```
toolkit-policy pack verify-signature --suite --signature --public-key
```
### `toolkit-policy keygen`
生成用于签署 suite packs 的 Ed25519 密钥对。
```
toolkit-policy keygen --private-key --public-key
```
## 自定义检测器插件
通过编程方式注册自定义 PII 或密钥检测器:
```
import re
from toolkit_policy_test_bench.plugins import registry, DetectorPlugin
def detect_mrn(text: str) -> dict[str, int]:
return {"medical_record": len(re.findall(r"MRN-\d{8}", text))}
registry.register(DetectorPlugin(
name="medical_record",
kind="pii",
detect=detect_mrn,
))
```
或者从 JSON 文件加载模式:
```
{
"detectors": [
{"name": "internal_id", "kind": "pii", "pattern": "INT-\\d{6}"},
{"name": "github_token", "kind": "secret", "pattern": "ghp_[A-Za-z0-9]{36}"}
]
}
```
```
from pathlib import Path
from toolkit_policy_test_bench.plugins import registry
registry.load_patterns_file(Path("custom_patterns.json"))
```
当启用 PII 或密钥检测时,自定义检测器会在 `run_suite` 期间自动被调用。
## CI 退出代码
| Code | Meaning |
| ---- | ------- |
| `0` | 成功 |
| `2` | CLI 错误 (参数错误、文件未找到) |
| `3` | 意外错误 |
| `4` | 验证失败 (超出比较预算、报告无效) |
## CI 集成示例
```
- name: Run policy tests
run: |
toolkit-policy run \
--suite packs/policy.zip \
--predictions preds.jsonl \
--out report.json
toolkit-policy compare \
--baseline baseline.json \
--candidate report.json \
--max-fail-rate-increase-pct 0.0
```
## 许可证
MIT License - 详见 LICENSE 文件。
标签:API密钥检测, DLL 劫持, Ed25519签名, Homebrew安装, JSON校验, PII检测, Python, 合规性测试, 大语言模型, 安全合规, 安全回归测试, 安全工具包, 安全规则引擎, 密钥泄露, 数据脱敏, 文档结构分析, 无后门, 时序数据库, 策略合规, 网络代理, 网络安全, 输入验证, 输出验证, 逆向工具, 隐私保护