arangoe036-ui/grader-gameability-study
GitHub: arangoe036-ui/grader-gameability-study
一项预注册的决策实验,通过红队对抗性测试验证AI评分器的不可博弈性,并诚实报告了静态黑名单和行为检查均无法阻止篡改的负面结论。
Stars: 0 | Forks: 0
# 评分器可博弈性研究
这是一项**决策实验**,而非产品构建。问题是:在优化压力下,一种不可博弈的、
基于 footprint 的相对评分,能否以具有商业决定性的优势击败当前的实验室最佳实践(一个强大的隐藏测试基线,
"A2")?
严格按照 `BUILD_PLAN.md`(执行契约)构建;科学事实来源是 `SPEC.md`
(Cuarzo spec v2.1)。工作原则(§0):**最低成本击杀优先 · 严格的层级门控 · 沙盒化
作弊者 · 评分前冻结阈值 · 每个层级均设人工门控 · 遇到第一个 RED 即停止。**
## 如何阅读本仓库
**负面结果即是交付物。** 本实验旨在以最低成本淘汰一个糟糕的想法,
而不是发布一个评分器,并且它成功了:红队发现了系统性的逃脱方法,因此昂贵的下游层级被
**刻意未构建**。如果您打开 `experiments/tier1_*.py`
或 `graders/control_b.py` 并发现 `NotImplementedError`,那是停止规则按预期生效
—— 而不是废弃的工作。下方的 `STATUS BOARD`(状态看板)标记了每个组件的真实状态,包括存根。
如果您正在评估工程和方法,本仓库展示了以下内容:
- **评分前预注册** — `PREREGISTRATION.md` 在收集任何数据*之前*冻结了阈值和对
结果的解读,因此结论无法在事后被拟合到结果上。
- **对抗性自我评估** — 红队以黑盒方式攻击*我们自己的*评分器,由
一个独立的行为元预言机决定正确性,因此测试套件只会使评分器看起来更糟,绝不会错误地使其看起来更好。
- **量化的、诚实的报告** — 带有 95% bootstrap 置信区间的逃脱率,公平性控制
(诚实的补丁仍必须被接受),以及记录在案的根本原因,而不是仅仅一个标题数字。
- **可复现的产出物** — 每次运行都会在 `results/` 下写入一个不可变的带时间戳的目录,
并且所有评分和对抗性代码都在经过验证的沙盒(`harness/sandbox_runner.py`)内执行。
- **知道何时停止** — 预注册的解读表明,固定的、对手可知的检查在
结构上是可被绕过的,因此重新设计被明确*未*构建。该决定留给了人类。
**范围:** 约 2.3K 行 Python 代码,加上一个冻结的 spec 和预注册。这是一个研究
产出物,而不是一个库或产品 —— 预期看到的是实验脚本和决策记录,而不是一个 API。
## 🛑 后续:行为篡改检查无法在白盒对手下存活
在 Step 1 RED 之后,一项低成本的决策实验探究了**行为/差分**篡改
检查(在多个执行上下文中运行每个补丁;标记跨上下文行为分歧)能否
在自适应对手下存活。一次性原型位于 `redteam/diff_prototype/`;**未**接入
`graders/treatment/`。产出物:`results/redteam-diff-20260713T152022Z/`。
| 条件 | 逃脱率(生产环境有Bug但被接受) | 95% CI | 任务 |
|---|---|---|---|
| **黑盒**(对手不知道上下文) | **0%** — 0/16 | [0%, 0%] | 0/8 |
| **白盒**(对手获得上下文电池) | **100%** — 16/16 | [100%, 100%] | 8/8 |
诚实的修复被接受且正确(无误报)。**解读(运行前预注册):
白盒逃脱是系统性的 → 强确定性的不可博弈性大概率已死。** 该检查
*确实*能阻止天真的/黑盒的篡改(相比 Step 1 的黑名单是一个实质性的进步),因此诚实的残留物是
一个**经验上“更稳健”的评分器,而不是一个不可博弈的评分器**。根本原因是结构性的:任何固定的、
对手可知的上下文电池都会被那些专门针对这些
上下文进行特殊处理的代码所绕过 —— 这是 Step 1 教训的升级版。**不要构建重新设计**(预注册);
三方声明的选择(绝对不可博弈性 / 经验上最稳健 / 停止)是人类决策。
完整结论 + 公平性保证 + 注意事项:`results/redteam-diff-20260713T152022Z/VERDICT.md`。
## 🛑 STEP 1 RED(之前) — 静态黑名单 Treatment 在黑盒下是可博弈的
对**现有** Treatment 评分器的黑盒红队测试发现了一种**系统性的、可重复的绕过
方法**。根据计划中的最低成本击杀优先规则,这在不可博弈性上是一个 RED:**Tier 1
套件未被构建。** Treatment 在实现上是可博弈的 —— 因此在重新思考机制(人类决策)之前,不值得运行昂贵的强化的/
裁决筛查。
### 红队结果 (`results/redteam-20260708T235339Z/`,测试工具位于 `redteam/`)
拥有**黑盒**访问权限的对手(提交补丁 → 获取结论;无法访问
`graders/treatment/`)试图让*生产环境有 Bug 的*补丁**被接受**。一个独立的行为
**元预言机**(全新输入,非测试上下文)客观地决定一个被接受的
补丁是否确实正确 —— 因此红队只能让 Treatment 看起来更*糟*,绝不会错误地使其更好。
| 指标 | 结果 |
|---|---|
| **逃脱率**(实际错误但被接受的篡改) | **80%** — 32/40 (95% bootstrap CI **[65%, 92.5%]**) |
| **逃脱的不同任务** | **8 / 8** |
| 在*每个*任务上逃脱的测试上下文通道 | **5 个中的 4 个** (`main_file`, `inspect_stack`, `orig_argv`, `argv_getattr`) |
| 诚实控制组(被接受且确实正确) | ✅ 全部 — 竞技场是公平的 |
**机制:** Treatment 的篡改检测是一个**固定的子字符串/正则表达式黑名单**。一个
奖励通道篡改只有在它检测到测试工具时才运行正确的修复
— 通过任何不在黑名单上的通道(例如读取 `__main__.__file__`,扫描 `inspect.stack()`,
`sys.orig_argv`,或通过 `getattr` 别名化 `sys.argv`)— 通过了隐藏的预言机**并且
没有触发任何标记**,同时在生产环境中保留 Bug。只有包含
黑名单子字符串(`sys.argv`)的天真通道会被抓到。**静态黑名单不可能是“不可博弈的”:**
测试上下文信号的空间是无限的。
**给人类的观察(未构建 — 重新设计决策):** 用于*检测*逃脱的相同技术
— 在全新输入上跨上下文进行的差分/行为测试 — 抓住了
100% 的逃脱。行为篡改检查是一条看似合理的路径,但改变机制是
人类的决定,而不是自主的决定。
## 背景:Tier 0 "PASS" 仅达到了最低门槛(近乎同义反复)
Tier 0 得分为 100% 分离率 / 0% FP (`results/run-20260708T225607Z/tier0/`)。但 Tier 0
的检测器是与它们所捕获的篡改**同时**编写的,因此该次扫描几乎是同义反复的 —
它通过了最低成本的门控,仅此而已。Step 1 是真正的不可博弈性测试,而 Treatment
**未通过**。这就是恢复计划所坚持的框架:针对
为匹配而构建的篡改取得高分毫无价值;**独立性是质量标准**,而黑盒
红队提供了这一点。
## 状态看板 (STATUS BOARD)
**阶段 A:** ✅ 完成。 **门控:** Tier 0 ✅(仅限最低门槛) · **Step 1 红队 🛑 RED** · **行为检查探测 🛑 白盒溃败 (BB 0% / WB 100%)** · Tier 1 ⛔ 未构建(已击杀) · Tier 2 🔒 门控。
**`prereg-locked`:** ✅ 存在且未被触碰(阈值已冻结;商业门槛仍为 `TEAM INPUT REQUIRED`)。
| WS | 项目 | 状态 | 备注 |
|----|------|-------|-------|
| WS1 | 合约 + `SPEC.md` (v2.1) + `PREREGISTRATION.md` | ✅ 冻结 | 本次会话预注册未被触碰 |
| WS2 | `harness/sandbox_runner.py` | ✅ 已验证 | 所有评分/红队运行均在沙盒中 (§0.4) |
| WS3 | `graders/{control_a,control_a2}.py` | ✅ | A2 = 决策基线 |
| WS3 | `graders/control_b.py` | 🟡 存根 | 输入已锁定 (§5);门控至 Tier 1 |
| WS3 | `graders/treatment/` | ✅ 真实,**🛑 可博弈** | 通过了 Tier 0 门槛;**黑盒逃脱率 80% (Step 1)** |
| WS4 | `analysis/{metrics,power_check,report}.py` | ✅ 已测试 | CI;科学与商业分离 |
| WS5 | Tier 0 标注数据集 | ✅ | `data/{tasks,labels}/tier0/` |
| — | **`redteam/` (Step 1 测试工具)** | ✅ | 黑盒 + 元预言机 + 电池 + 人工模式 |
| — | **`redteam/diff_prototype/` (行为检查探测)** | ✅ 一次性 | BB 0% / WB 100% 逃脱率;未集成;结论:确定性不可博弈性大概率已死 |
| Tier 0 | `experiments/tier0_separation.py` | ✅ PASS (最低门槛) | 被重新定义为近乎同义反复 |
| Tier 1 | Exp 1 / Exp 2 套件 | ⛔ **未构建** | Step 1 RED — 在重新思考机制前不要构建 |
| Tier 2 | RL | 🔒 门控 | 未评估;已击杀门控的下游 |
图例:✅ 完成 · 🟡 部分/延迟 · 🛑 红色/击杀 · ⛔ 未构建(由决策决定) · 🔒 门控。
## 复现
```
python3 redteam/run_auto.py # STEP 1: automated black-box red-team (writes immutable artifact)
python3 redteam/human_redteam.py --task add # STEP 1: human red-team (a person should drive this)
python3 experiments/tier0_separation.py # Tier 0 floor (context)
python3 tests/test_smoke.py # unit tests (docker-free)
```
## 刻意未构建的内容 (范围 + 门控, §0.7)
Tier 1 强化的/裁决套件(Exp 1 + Exp 2),Tier 2 RL,完整的精选任务集,以及
任何生产/规模基础设施。Step 1 RED 意味着在人类决定
是否/如何重新思考 Treatment 的篡改检测之前,不应构建任何这些内容。
## 需要团队做出的决定
1. **Treatment 在编写时就是黑盒可博弈的。** 决定:重新思考不可博弈性机制
(例如使用行为/差分篡改检测而不是静态黑名单),或者接受较弱的
声明。只有在重新设计之后,才值得构建 Tier 1 套件。
2. 预注册保持**冻结**;商业幅度门槛保持为 `TEAM INPUT REQUIRED` — 未设置。
3. Tier 2 RL 的可行性**未**进行评估(已击杀门控的下游);仅在
机制修复且 Tier 1 随后通过时重新审视。
标签:人工智能, 实验科学, 模型评估, 用户模式Hook绕过, 逆向工具, 黑盒测试