CyBench 是一个 capture-the-flag(CTF)风格 benchmark,用来评测 agent 在安全分析任务上的表现,包括逆向、Web 利用、取证和密码学。任务运行在隔离环境中,得分通过比较 agent 提交的答案与已知 flag 计算。
QitOS 提供:
CyBenchAdapter
CyBenchRuntime
score_cybench_submission
因此你可以在 QitOS 内核上直接运行完整评测流程。
评分模式
| 模式 | 工作方式 | 主指标 |
|---|
| Guided(默认) | agent 按子任务逐步求解,并获得子任务级提示 | guided_subtask_score |
| Unguided | agent 只收到最终 hard prompt,需要直接拿到 flag | unguided_success |
准备工作
安装 benchmark 依赖
pip install "qitos[benchmarks]"
克隆 CyBench 仓库
git clone https://github.com/andyzorigin/cybench.git references/cybench
安装 Docker
大多数 CyBench 任务都需要 Docker 启动 challenge services。
设置模型 API key
export OPENAI_API_KEY="sk-..."
加载任务
from qitos.benchmark import CyBenchAdapter
adapter = CyBenchAdapter(
cybench_root="references/cybench",
run_with_subtasks=True,
)
records = adapter.load_records(limit=5)
tasks = adapter.to_tasks(records, split="guided")
一行式 loader:
from qitos.benchmark.cybench.adapter import load_cybench_tasks
tasks = load_cybench_tasks(
cybench_root="references/cybench",
run_with_subtasks=True,
limit=10,
)
运行评测
优先使用官方 CLI:
qit bench run \
--benchmark cybench \
--split guided \
--root references/cybench \
--limit 20 \
--output results/cybench_guided.jsonl \
--model-name "Qwen/Qwen3-8B"
然后继续做聚合与检查:
qit bench eval --input results/cybench_guided.jsonl --json
qita board --logdir runs
cybench_eval.py 依然保留,但它现在主要承担 benchmark 专用参考 agent wrapper 的角色。
运行单个 guided 任务:
python examples/benchmarks/cybench_eval.py \
--cybench-root references/cybench \
--task-index 0 \
--max-steps 12 \
--model-name "Qwen/Qwen3-8B" \
--api-key "$OPENAI_API_KEY"
运行 unguided:
python examples/benchmarks/cybench_eval.py \
--cybench-root references/cybench \
--task-index 0 \
--unguided-mode \
--max-steps 20 \
--api-key "$OPENAI_API_KEY"
完整 benchmark:
python examples/benchmarks/cybench_eval.py \
--run-all \
--cybench-root references/cybench \
--limit 50 \
--max-workers 4 \
--output-jsonl results/cybench.jsonl \
--trace-logdir runs \
--api-key "$OPENAI_API_KEY"
CyBench 任务应始终运行在隔离环境中。challenge services 可能会开放端口或执行任意代码;生产评测建议启用 Docker 隔离。
CyBench 评测 agent 通常只注册一组适合 CTF 的最小工具面:
CodingToolSet
- shell execution
SubmitAnswer
如有需要,也可以继续扩展浏览器工具。
评分与结果检查
score_cybench_submission 会统一计算:
guided_subtask_score
guided_final_score
unguided_success
exact_matches
partial_matches
单条结果通常包含:
task_id
mode
success
guided_subtask_score
guided_final_score
predictions
references
stop_reason
steps
latency_seconds
评测结束后,仍然可以直接用:
qita board --logdir runs
qita replay --run runs/<run_id>
来检查具体任务轨迹。