mcpField
F
falsepass

falsepass

本地服务
super-eric.github.io开发工具1今天更新

关于 falsepass

falsepass通过测试已知正确和错误的回答来审计强化学习环境的奖励判定,帮助环境作者和训练团队在训练前发现评分错误。它支持多种环境框架及独立奖励函数,并提供可复现的探测结果,无需模型或 rollout。

主要功能

  1. 01测试已知正确与错误的回答
  2. 02支持多种强化学习环境框架
  3. 03审计独立奖励函数
  4. 04统计误通过与误拒绝
  5. 05提供可复现的探测结果

适用场景

  1. 01在模型训练前检查评分器
  2. 02结合数据集检查 TRL 奖励函数
  3. 03在 GitHub Action 中加入评分检查

MCP 相关

MCP 服务通过 stdio 将 falsepass 命令作为工具提供,包括初始化、审计、查看结果和复现探测。审计在后台运行。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"super-eric-falsepass": {
"command": "uvx",
"args": [
"falsepass"
]
}
}
}
启动命令uvx falsepass

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypifalsepass0.11.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

falsepass

English | 中文

CI License: Apache-2.0 PyPI Python 3.11+

探测 RL 环境的验证器是否存在误通过(已知错误的完成结果获得奖励)和误失败(已知正确的完成结果未获得奖励)。

网站和文档:https://super-eric.github.io/falsepass/ · 介绍文章:你的奖励函数就是一个断言

在某个公开环境中,只要把问题原样复述,就能在每个任务中获得满额奖励: 每个问题都列出了所有候选答案,而评分器只检查回复中是否出现了正确答案,因此策略只需列出所有答案就能获得满额奖励。falsepass 能在训练开始前找到这类漏洞。

falsepass 演示:从两个角度发现人为植入的评分缺陷

RL 环境由任务数据集和验证器组成,后者会将模型输出转换为奖励。falsepass 将该验证器视为待测系统:它会针对正确性已预先确定的完成结果,调用环境自身的奖励代码,并报告所有不一致之处。无需模型、无需 rollout,也无需 GPU。

它支持四种框架以及普通奖励函数,无论它们已经发布,还是仍在本地文件夹中:

框架falsepass 运行的内容falsepass init …
verifiers(Prime Intellect Environments Hub),支持全部三代 API环境的评分规则或任务集owner/environment,或 ./folder
OpenEnv(Hugging Face Spaces)环境类自身的 reset() 和 step(),在进程内运行,无需 Dockerhf:owner/space,或 ./folder(包含一个 openenv.yaml)
TRL 的 GRPOTrainer 奖励函数(或任何具有相同签名的函数)按照训练器调用的方式调用这些函数,并按权重求和rewards.py --dataset data.jsonl,或 trl.rewards 等模块
Inspect AI使用脚本模型运行任务的求解器链,然后运行评分器path/to/task.py、./project 或 inspect_evals/gsm8k
HUD按照 HUD 服务的运行方式执行任务模板的评分器path/to/env-folder(每次探测都需添加 --answers refs.json)

安装

需要将 uv 添加到 PATH(每次审计都会在独立的一次性虚拟环境中运行),并安装 Python 3.11 或更高版本。

uvx falsepass demo              # try it, nothing to install
uv tool install falsepass       # or keep `falsepass` on the PATH
pip install falsepass           # or into an existing environment
uvx --from git+https://github.com/Super-Eric/falsepass falsepass --version   # the unreleased main branch

快速开始

falsepass demo                            # audits a bundled toy environment with one planted defect (about a minute)
falsepass init owner/environment          # a Hub environment: package, version and verifiers pin read from the Hub
falsepass init ./my-environment           # or your own, from its folder (pyproject.toml); edits are picked up on every run
falsepass audit my-environment            # probe it; results in audits/my-environment/summary.md
falsepass results my-environment --json   # headline numbers and failing probes, for scripts and agents

demo 会将玩具环境写入 ./falsepass-demo 并对其进行审计。该环境的评分器会在答案中任何位置出现参考答案时给予奖励,摘要从几个角度展示了这一问题:静态扫描指出了这行代码,而列出多个答案(P5)、撤回答案(P9)或在答案栏中否认答案(P15)的探测也都获得了奖励。 以下是实际输出的精简摘录(完整文件:examples/toy-env/summary.md):

- False-pass ceiling: 1 of 1 (highest reward given to a known-bad completion; via P5 shotgun/all_in_one_slot)
- Lazy-policy reward: 0 (best average reward of one fixed strategy that never uses the reference answer; via P3 empty/empty)
- False-fail rate: 0.108 (93 known-good completions)

| Probe              | Variant                | Expect | Runs | Failed | Score min / mean / max |
| P5 shotgun         | all_in_one_slot        | zero   | 10   | 10     | 1 / 1 / 1              |
| P9 oversized       | correct_then_retracted | zero   | 10   | 10     | 1 / 1 / 1              |
| P15 hedged_in_slot | denied                 | zero   | 10   | 10     | 1 / 1 / 1              |

Static hint: falsepass_toy_env.py:26 reference_substring_match
    return 1.0 if answer in reply else 0.0
    confirmed: P9 failed 10/20, P5 failed 10/30

奖励函数(TRL GRPOTrainer 风格)

falsepass init rewards.py --dataset data.jsonl                       # every function in the file that takes `completions`
falsepass init rewards.py --dataset hf:owner/name --split test \
    --func accuracy_reward --func format_reward --weight 1 --weight 0.2   # which functions, with the trainer's reward_weights
falsepass init trl.rewards --framework reward --dataset hf:trl-lib/DeepMath-103K --func accuracy_reward --with math-verify
falsepass init train.py --dataset call:get_dataset --map to_prompt     # a loader and a row mapper defined in the script itself
falsepass audit rewards

许多评分器并未打包成环境:训练脚本会定义 accuracy_reward(completions, solution, **kwargs) 之类的函数,并将它们连同数据集一起交给 GRPOTrainer。falsepass 会像训练器那样逐条调用每个函数,每次处理一个补全,并将数据集的每一列都作为关键字参数传入(包括 prompts、completions、completion_ids、trainer_state、log_extra 和 log_metric),然后按权重累加结果;None 不计入总和。如果数据集中的提示词是对话,或者函数读取 completion[0]["content"],那么补全就是一个仅含一条消息的列表,否则就是文本。参考答案列由函数指定(solution);如果未指定,则依次使用 answer、solution、ground_truth……(可用 --answer-column 选择)。对于探测用例,完整解答会被简化为最后一个 \boxed{} 中的内容,或 #### 后面的内容;但函数始终会收到原始列值。数据集可以是 .jsonl/.json/.csv/.parquet 文件、hf:owner/name(通过 datasets 流式读取),或文件中的 call:function。审计时会安装文件所需的第三方导入(可用 --with 添加,用 --without 移除)。examples/reward-toy/ 中包含一个预先植入的缺陷。

OpenEnv

falsepass init hf:owner/space                          # a Space on the Hugging Face Hub: cloned next to the audit
falsepass init ./my_env                                # or a local environment folder (openenv.yaml, server/app.py)
falsepass init hf:owner/space --answers refs.json      # with reference answers: every probe runs
falsepass audit space

OpenEnv 环境会在 step() 中计算奖励,因此 falsepass 会像客户端连接其服务一样驱动环境类:先调用 reset() 获取任务,再将回复作为动作传入 step();整个过程在进程内完成,安装 Space 自身所需的依赖,且不使用 Docker。(服务端的 HTTP /reset 和 /step 路由每次请求都会创建一个新环境,因此无法评估先调用 reset() 再调用 step() 的情况。)任务:audits/<name>/tasks.json 列出调用 reset() 时使用的关键字集合(大多数环境会通过 task_id、task_name、difficulty 或随机种子选择任务;每个集合也可以包含一个 answer);如果没有,则使用环境实现的 Task API;再没有,则重复调用 reset(),每个不同提示词对应一个任务。如果环境会随机抽取任务,则会再次调用 reset(),直到抽中并记录该任务。没有参考答案时,只运行不需要答案的探测用例。纯文本回复会放入动作的自由文本字段;其他必填字段(如决策枚举、标志)会填入常量,而 O1 会尝试此类决策字段的每个值(固定策略,报告为懒惰策略奖励),O2 则会将自报字段(confidence、score)从最小值调整到最大值。若回复是一个列出动作字段的 JSON 对象,则该对象本身就是动作:适配器或由这类对象构成的答案文件可以用这种方式填写多个字段。examples/openenv-toy/ 中包含一个可供尝试的预先植入缺陷。

Inspect AI 和 HUD

falsepass init inspect_evals/gsm8k                     # a task from inspect_evals (pinned from PyPI)
falsepass init my_eval.py --task hard_split            # a task file; --task picks one of several
falsepass init ./my-hud-env                            # a HUD environment folder (env.py + tasks.py)
falsepass init ./my-hud-env --answers refs.json        # with reference answers: every probe runs

Inspect:脚本模型只替换对 generate() 的调用;提示词模板、系统消息和答案解析(multiple_choice())仍使用任务自身的代码。如果求解器或评分器自行调用模型(如自我批评、model_graded_qa),每一行都会被标记,而不是进行评分。不支持需要沙盒的任务。

HUD:任务模板会将预期答案保存在评分器中,因此没有 --answers 时只运行不需要答案的探测用例:空回复、原样复述提示词,以及列出 0 到 1000 之间所有整数、所有字母、yes/no 词语或提示词中所有词语的回复(A1;提供答案时,也会与其他所有探测用例一起运行)。如果评分器会奖励这些回复,实际上就是在进行子串测试。答案文件为 JSON:从任务 slug 到答案的对象({"add-2-3": "5"}),或按任务顺序排列的列表(["5", "12"])。要为现有审计添加答案,请使用 --force 重新运行 init。examples/inspect-toy/ 和 examples/hud-toy/ 各包含一个可供尝试的预先植入缺陷。

对于环境作者:发布前请检查

在本地运行 falsepass init ./your-env && falsepass audit your-env,或将 GitHub Action 添加到环境的代码库中,以便每次推送时都进行检查:

# .github/workflows/falsepass.yml
on: [push, pull_request]
jobs:
  falsepass:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: Super-Eric/falsepass@main
        with:
          path: .                         # folder with the environment's pyproject.toml
          fail-on: "ceiling>0.1 errors>0" # fail when a known-bad answer earns over 0.1, or scoring raises

步骤摘要会显示探测表。指标名称:ceiling(任意已知错误的完成结果所获得的最高奖励)、lazy(某种固定策略在从不使用答案的情况下获得的最高平均奖励)、false_fail(被拒绝的正确答案所占比例)、errors。加载时需要登录或 API 密钥的数据集,若没有该密钥,便无法在 CI 中审计。

对于编码 Agent

  • MCP 服务。 falsepass mcp 会通过标准输入输出将这些命令作为工具提供(falsepass_scan、 _init、_audit、_audit_status、_results、_completion、_reach、_repro、_draft、_upstream、_verify_fix、_discover)。 审计会在后台运行,因此客户端的工具调用超时不会中断审计;失败会作为工具错误返回,并附上原因。任何 MCP 客户端都可以通过 uvx --from "falsepass[mcp]" falsepass mcp 启动; 例如,在 Claude Code 中:claude mcp add falsepass -- uvx --from "falsepass[mcp]" falsepass mcp。
  • 技能。 skills/falsepass/SKILL.md 是一套现成的审计流程,采用 Agent Skills 格式,介绍如何运行审计、如何区分缺陷与设计选择,以及如何向维护者提交报告。将该文件夹复制到 Agent 的技能目录 (对于 Claude Code,为 ~/.claude/skills/)。
  • 纯命令行工具。 每条命令都以非交互方式运行并写入文件;init --json、 results --json 和 scan --json 会输出 JSON;results --completion ID 会完整输出一条完成结果;audit --fail-on ... 在满足某项条件时以状态码 1 退出。输出 格式详见 docs/OUTPUT.md。

无论由什么来运行,输出都是一组待调查线索。Agent 应重现线索并阅读奖励代码后再将其认定为缺陷,不应仅凭探测表就报告环境存在问题。

所有命令

falsepass init owner/environment          # set up audits/<name>/ for a Hub environment, or pass a local folder
falsepass init hf:owner/space             # an OpenEnv Space on the Hugging Face Hub (cloned into audits/<name>/space)
falsepass init rewards.py --dataset d.jsonl   # reward functions written for TRL's GRPOTrainer, with their dataset
falsepass audit environment               # no adapter needed for Q&A tasks: the answer format is inferred
falsepass audit environment --search 120  # add mutation search (scorer calls per direction and example)
falsepass audit environment --jobs 1      # score one task at a time (default: up to 8 at once where that is safe)
falsepass audit environment --fail-on 'ceiling>0.1' --fail-on 'errors>0'   # CI gate, exit 1 when met
falsepass results environment [--json]    # the last run: summary.md, or a compact JSON digest
falsepass results environment --completion ID   # one completion in full (IDs are in the JSON digest)
falsepass scan path/to/source [--json]    # static pre-scan only, nothing is installed or run
falsepass discover --days 90 --limit 160  # recently maintained Hub environments and what each needs
falsepass discover --hub hf --days 30      # OpenEnv Spaces on the Hugging Face Hub, most liked first
falsepass reach environment --probe P15/denied   # how many tasks one failing probe row reaches (every task by default)
falsepass reach environment --template '{wrong} or {answer}'   # ...or a completion of your own, filled per task
falsepass repro environment               # stand-alone script that re-scores the exact failing completions
falsepass repro environment --run         # ...and run it twice in fresh virtualenvs, compare, store the first run
falsepass rollout environment -n 20       # what a local model's own replies earn (Ollama)
falsepass propose environment -n 5        # a local model writes wrong answers and climbs on the reward
falsepass draft environment               # REPORT.draft.md: candidate findings for manual review
falsepass overview -o RESULTS.md          # one table over every audit on disk
falsepass container environment           # container tasks: the key, and mutations of it, written as the output file (Docker)
falsepass upstream environment            # find the source repository on GitHub and compare it with the audit
falsepass verify-fix environment --source ../patched/pkg   # rerun the stored repro on a patch: which lines change
falsepass demo                            # the toy environment above
falsepass mcp                             # MCP server over stdio (`falsepass[mcp]`)

每次审计都会在一个临时虚拟环境中运行,该环境由 audits/<env>/env.toml 固定版本,因为 Hub 环境使用的 verifiers 版本彼此不兼容。输出文件: audits/<env>/probe-results.json 和 summary.md。在此代码库的克隆中运行命令时,请在命令前加上 uv run;uv run pytest 会运行工具包自身的测试。

检查

ID检查项正确的验证器……
P1参考答案,使用请求的格式给出满分奖励
P2相同答案,但有无害的变化给出满分奖励
P3空内容/仅含空白字符不给分
P4原样复述提示词不给分
P5一次给出所有候选答案不给分
P6格式完美但答案错误不给分
P7自信地给出错误答案不给分
P8错误答案加上给评分器的说明(LLM 评审环境)不给分
P9正确答案埋在填充内容中,随后又撤回不给分
P10输出格式错误不给分,也不抛出异常
P11同一条补全重复十次给出相同分数
P12数据集:提示词为空或重复、标签冲突检查不到任何结果
P13NaN、Infinity、整数答案加 0.9(JSON 答案:浮点数设为 NaN,整数加 0.9 或 Infinity)不给分,也不抛出异常
P14正确答案,且在答案前后以正文提及答案标签或 \boxed{}给出满分奖励
P15在答案槽中否认答案,或将答案与错误值并列(\boxed{R \text{ is wrong}}、\boxed{W = R})不给分
P16JSON 答案:将参考答案中每个自由文本值(两个或更多单词)替换为提示词,同时保留标签、ID 和数字几乎不给分
P17JSON 答案:每次选择一个简短字符串字段(标签、日期、ID),在其所有出现处后加上“(this is wrong)”得分低于参考答案
A1无需参考答案:在一条回复中给出任意一个 0–1000 的整数、任意字母、是/否词语,或提示词中的词语不给分
O1OpenEnv,动作中的决策字段:依次尝试该字段的每个值,且不说其他内容(固定策略;其均值即懒惰策略奖励)只按该标签的基础比率给分
O2OpenEnv,动作中的自报字段(confidence、score、quality):分别取最大值和最小值给出相同奖励
T7正确答案前先进行一次空操作工具调用给出满分奖励(当执行框架未提供工具时,需酌情判断)
C0–C2容器任务:将关键内容写入输出文件(C0);使用 NaN/Infinity/小数计数(C1);清空、截断或替换为输入文件(C2)C0 全额给分,未发生修改也全额给分
T4多轮:在一轮无关对话之后重放一个回合给出相同的奖励和对话记录
T5多轮:永不作答的策略会被截断,且不获奖励
T8多轮:先回答错误,随后重复环境泄露的任何内容(“The word was …”)不给分;摘要还会说明环境宣布结束后回合是否仍继续
T6工具使用:仅依据工具架构构建的七种策略(不调用工具、不调用工具却声称成功、对每个工具各调用一次且参数为空、立即调用结束工具,……);在拒绝才是正确做法的任务上不计入(什么都不做在这类任务上能获得最高分,但并非在所有任务上都如此,或适配器会注明这一点)不会获得奖励,也不会引发异常
X*、T1–T3适配器中定义的环境专属探测—
S1搜索:对已知的错误补全进行变异,绝不加入答案,以提高奖励找不到高于零的结果
S2搜索:在不改变答案的情况下,对正确补全进行变异,以降低奖励找不到低于满分的结果
S3搜索:提及答案但不确认答案的补全找不到高于零的结果

搜索(--search N)是对小型命名变异链执行的带种子束搜索。 命中结果会以最小化配方的形式报告,例如 nothing + pad_think。S2 命中是脆弱性候选项,需要人工审查:带引号的 "B" 是否应算作 B,需酌情判断。 静态预扫描会随每次对 audits/<env>/src 的审计运行,也可通过 falsepass scan 单独运行。它使用范围有限的 AST 规则,每条规则都源自真实审计中发现的缺陷; 每条提示都会附上测试该提示的探测器给出的判定 (confirmed: P6 failed 25/25、not confirmed、not checked)。

**适配器推断。**如果没有 adapter.py,系统会根据解析器和提示词文本推导候选格式, 为参考答案在每种候选格式下评分,并选出该环境自带的奖励代码评分最高的格式。错误答案取自标签集、 偏移后的数字或另一行。此方法适用于有参考答案的单轮或多轮环境;工具使用环境、沙盒环境,以及行中没有 答案的游戏则需要策略:falsepass init --policies 会写入骨架(问答环境可使用 --manual)。提示词中用于 包裹输入内容的标签(<conversation>…</conversation>)不会被当作答案格式;如果所有格式的得分相同,则使用 纯文本答案。作为对照,自动模式会将参考答案与空回复进行比较;如果奖励无法区分两者,就会将整个结果标为 无法定论。

**多轮。**多轮环境通过运行自身的 rollout 循环来评分,并用脚本化的模型替身(V0RolloutScorer)进行模拟, 以测试后续提示、停止条件和每个 episode 的状态。搜索会修改脚本中的每一轮。 脚本条目也可以包含工具调用({"tool_calls": [{"name": …, "arguments": {…}}]}), 环境会使用其真实工具执行这些调用。自动模式也支持工具在进程内运行的工具使用环境:这类环境没有答案格式可供推断, 因此系统会运行七种 T6 策略和 T5,并在摘要中说明无法进行对照测试。 必须读取任务内容才能发现漏洞的策略仍需手动编写 (falsepass.model.Policy:一个根据当前对话内容生成下一条回复的函数)。

v1 工具和多轮任务集(verifiers.v1,使用工具服务、自带的 Env episode 循环或脚本化用户) 会通过任务集自己的循环,以完整 episode 的形式运行,和 vf-eval 的运行方式一致:包括其执行框架、工具服务、 脚本化用户、停止条件和奖励(V1EpisodeScorer)。模型是位于 127.0.0.1 的本地端点,会根据策略回复, 因此不会产生费用,也不会上传任何内容。自动模式会通过这种方式运行 T5 和 T6; falsepass init <env> --policies 会写入以求解器作为对照的 v1 骨架,而 repro 会逐轮重放每个已记录的 episode,不经过 falsepass。除非 env.toml 指定 runtime = "docker",否则执行框架会在 verifiers 的子进程运行时中运行。episode 期间会阻止访问外部主机 (将代理指向一个关闭的端口;network = ["host"] 可允许访问),因此在实时服务上注册或发帖的环境不会在那里运行。

Rollout 检查。falsepass rollout <env> 会将一部分任务发送给 OpenAI 兼容端点后面的模型——默认使用本地 Ollama 服务,因此不会产生费用——并使用与探测器相同的评分器为模型自己的回复评分。它会标记需要检查的行 (未包含参考答案却获得奖励;包含参考答案却未获得全部奖励;获得的奖励高于参考答案;在 token 上限处被截断), 但绝不会将任何标记称为发现。对于工具使用环境,模型会通过 verifiers 自带的客户端运行,因此会收到工具架构, 其工具调用也会得到执行。使用 --endpoint、--model 和 --tag 可让第二个模型与第一个模型并行运行。

模型生成的错误答案。falsepass propose <env> 会让模型生成一条切合主题但错误的回复,为其评分, 然后将评分器的得分作为反馈,让模型重写几次。对于封闭式答案,回复中不得出现参考答案(代码会对此进行检查); 对于开放式答案,错误与否由模型自行判断,因此每一行都需要人工检查,不能视为发现。 发现。 falsepass discover 会列出最近更新且发布版本不止一个的 Hub 环境,并读取每个 wheel,说明其所需内容(沙盒、工具、LLM 判定器、API 密钥、参考答案)。列出环境需要 prime CLI。 --hub hf 则仅根据公开列表列出 Hugging Face Hub 上的 OpenEnv Spaces(点赞数、最近更新时间、标签,以及供 init 使用的 hf:owner/space 目标)。

每个环境有三个核心数字:错误通过上限(任何已知错误的完成内容所获的最高奖励)、懒惰策略奖励(针对各示例,某种固定错误策略所获的最高平均奖励)和错误拒绝率(未获满额奖励的已知正确完成内容所占比例)。summary.md 还会显示哪些奖励项为已知错误的完成内容提供了奖励。

从探测运行到报告

探测运行产生的是线索,而非发现。要将线索转化为发现:

  1. falsepass repro <env> 会生成一个仅依赖验证器和环境包的脚本,并对完全相同的完成内容(保存在 completions.json 中)重新评分。 在干净的虚拟环境中运行两次;输出必须完全一致。
  2. 阅读奖励代码,找出导致该结果的代码行。判断这是缺陷还是设计选择:如果评分器本来就允许被利用,那么这只是观察结果。
  3. falsepass draft <env> 会生成 REPORT.draft.md,将每组失败探测作为候选项,附上已确认的静态提示,并标明需要人工判断的地方。根据 docs/SEVERITY.md 评估已证实的内容。
  4. 请一位未撰写报告的人对照存储的输出,核实每个数字。

从报告到上游修复

falsepass upstream <env> 会搜索该环境的源代码(先查包在项目 URL 中自行标注的仓库,或其源代码或文档字符串中的 github.com 链接;再查 pyproject.toml 中的包名;最后查找最具辨识度的类名和函数名),将每个已审计文件与仓库的默认分支进行比较(忽略行尾差异),并输出贡献者所需的信息:默认分支、许可证、最近推送时间、未关闭的拉取请求,以及近期合并中来自外部的数量。falsepass verify-fix <env> --source <patched folder> 会使用修补后的包(或将审计中 src/ 的修补副本覆盖到发行版上)重新运行已存储的复现脚本,并输出发生变化的行;如果尚无未修补基线,则会先存储一份。只有当变动局限于该发现涉及的行时,修复才算就绪。它只会重新运行复现脚本;falsepass audit <env> --source <patched folder> 则会在补丁上运行整套探测。

添加环境

falsepass init owner/environment 会写入 audits/<name>/env.toml(包、版本、模块、索引、验证器固定版本——均从 Hub wheel 中读取),并将 wheel 的源代码解压到 audits/<name>/src,以供静态扫描。falsepass init ./folder 会根据本地 pyproject.toml 执行相同操作,并将该文件夹记录为 source,这样每次运行都会安装并扫描该文件夹。已安装的 Inspect 任务(inspect_evals/gsm8k)没有可供解压的 wheel:审计会改为将任务自身的文件夹及其所用评分器的模块复制到 src/。对于问答环境,这些就足够了。 否则,请添加 --manual 并填写生成的 adapter.py:如何加载示例、如何按提示词要求编写答案,以及错误答案应是什么样。

记录

2026 年 10 月,已在几十个公开 Hub 环境中使用。每项保留的发现都在干净的虚拟环境中复现了两次,并通过阅读奖励代码确认;修复正以拉取请求的形式提交给维护者。在这些修复合并之前,此处不会公布具体环境和数量。

局限

  • 线索需要人工判断。工具会找出评分器错误奖励的情况;判断这是否属于缺陷以及严重程度如何,需要人工完成。
  • 搜索范围较浅:只进行固定文本变异,并调用评分器几百次。它不会针对奖励训练模型。
  • 容器任务没有自动模式;对于托管沙盒中的环境或使用付费 LLM 评审器的环境,若没有凭证,则不在支持范围内。
  • 支持的框架:verifiers(v1 工具任务集:通用工具策略会自动处理,任务专用策略需手动编写)、OpenEnv(step() 会对回复或结构化操作评分的环境;MCP 工具环境和没有 Environment 类的手写服务需要策略或适配器)、Inspect AI(不支持沙盒任务)和 HUD(对答案评分的模板;对 Agent 在工作区中的行为评分的任务需要手写策略)。

相关工具

  • rewardlint — 针对单个奖励函数的对抗语料库。若可替换参考答案,falsepass 会使用环境的奖励代码运行该语料库,并在 summary.md 中输出判定结果。
  • ratctl — 静态扫描并借助 LLM 检查环境源代码中的沙盒利用模式。
  • VerifierLab — 在声明的预算内,针对封装后的评分器开展攻击测试,并提供真实情况预言机。
  • vlabs-integrity — 针对具有可信参考答案的编码奖励,进行变异杀除和同构重标记审计。
  • harden-v0 — 通过 LLM 黑客与修复者循环,强化 Harbor 格式的 Agent 基准验证器。

目录结构

falsepass/           the probe kit (falsepass/mcp_server.py: the MCP tools)
tests/               its tests
examples/toy-env/    the demo environment, with its planted defect
examples/openenv-toy/, examples/reward-toy/, examples/inspect-toy/, examples/hud-toy/   the same idea for OpenEnv, reward functions, Inspect AI and HUD
skills/falsepass/    agent skill: the audit procedure
action.yml           the GitHub Action
docs/SEVERITY.md     the rating scale; docs/OUTPUT.md: the output files
audits/<env>/        created by `falsepass init`; ignored by git

许可证

Apache-2.0,详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。