一个评估框架,用于测试大语言模型是否会遵循嵌入在看似正常文本中的不可见Unicode编码指令。传统验证码利用的是人类能解决而机器不能的任务,而反向验证码利用的是机器能访问而人类不能的感知通道。
在来自5个模型(GPT-5.2、GPT-4o-mini、Claude Opus 4、Claude Sonnet 4、Claude Haiku 4.5)的 8,308个分级输出 中:
代码执行访问将不可见Unicode从可忽略的伪影转变为可解码的指令通道。没有工具时,遵从率低于17%。有工具和提示时,达到98-100%。

OpenAI模型能解码零宽度二进制,但不能解码Unicode标签。Anthropic模型偏好Unicode标签。攻击者必须为目标提供商定制编码方案。

不同模型间提示梯度一致:无提示 << 码点提示 < 完整提示。工具访问和解码指令的结合是关键推动因素。

两种不可见编码方案被嵌入到琐事问题中:
模型收到一个已知可见答案的琐事问题。隐藏在不可见字符中的是另一个答案。如果模型输出隐藏的答案,则说明它遵循了不可见指令。
# 安装
pip install -e ".[dev]"
# 运行反向验证码评估
evalrun run --pack reverse_captcha --model openai:gpt-4o-mini --tools --n 3 --out results.sqlite
# 不启用工具运行
evalrun run --pack reverse_captcha --model openai:gpt-4o-mini --n 3 --out results.sqlite
# 使用Anthropic模型运行
evalrun run --pack reverse_captcha --model anthropic:claude-sonnet-4-20250514 --tools --n 3 --out results.sqlite
# 生成分析结果
python3 scripts/analyze_journal.py
# 生成图表
python3 scripts/generate_figures.py
├── packs/reverse_captcha/ # 评估包(案例、评分器、生成器)
│ ├── cases.yaml # 270个测试案例
│ ├── qa_pairs.yaml # 30个琐事问答对
│ ├── grader.py # 确定性评分(5个类别)
│ └── generate_cases.py # 两种编码的案例生成器
├── src/evalrun/ # 核心框架
│ ├── adapters/ # OpenAI + Anthropic API适配器
│ ├── cli.py # CLI(运行、报告、导出)
│ ├── runner.py # 带工具使用支持的评估运行器
│ └── db.py # SQLite持久化
├── paper/ # 研讨会论文
│ ├── reverse_captcha.tex # LaTeX源文件
│ └── reverse_captcha.pdf # 编译后的PDF
├── results/journal/ # 原始数据
│ ├── analysis/ # 统计分析CSV
│ └── figures/ # 出版物图表(PDF + PNG)
├── scripts/ # 分析与图表生成脚本
└── tests/ # 测试套件
框架中还包含另外两个包:
OPENAI_API_KEYANTHROPIC_API_KEYclick, openai, anthropic, pyyaml, matplotlib, pandas, scipy, numpyMIT