CodexQA

行业与实践研究与基准测试

高风险子集上攻击成功率从 6.00% 降到 1.69%:腾讯朱雀在编码代理上回归九种防御

CodexQA 团队阅读约 4 分钟

pi 编码代理,模型匿名。9 组高风险组合上,九种防御把配对成功率从 6.00% 降到 1.69%,相对下降 71.8%,没有一种降到 0。离线检测误报为 0,召回最高 17.78%。

本文目录

高风险子集上攻击成功率从 6.00% 降到 1.69%:腾讯朱雀在编码代理上回归九种防御

腾讯朱雀实验室的预印本 pikit: A Composable Toolkit for Indirect Prompt Injection Research and Evaluation。arXiv 为 2609.36817v1。HTML 水印和 abs 页提交日都是 2026 年 9 月 29 日。许可证是 CC BY 4.0。作者是 Zonghao Ying、Xiangfan Wu、Bo Yang、Huiyu Wu、Xing Zheng、Huangsheng Cheng、Xiaorong Shi、Jing Guo,页面单位写 Tencent Zhuque Lab。

pikit 是一套把攻击包装、投递通道和防御拆开登记、再拼成矩阵的间接提示注入评测工具。间接提示注入指指令不写在用户消息里,而藏在 Agent 会去读的外部内容里。这篇的实测对象不是上一篇的 DeepSeek Harness,而是 pi(一个开源的自主编码 Agent),后面接的是匿名化的大模型,跑在近似生产的环境里。模型名字没有公开。

只回归先前矩阵里的高风险组合

论文把更早的 DeepSeek Harness 评估写成对照:那边是 13 种攻击、16 个通道、2 种载体、35 个载荷的全矩阵。作者认为成功率集中在少数攻击-通道组合上,所以这篇防御回归只取基线筛出来的前 9 组攻击-通道-模式。每一组都跑全部 35 个载荷,再对上 9 种预防型防御。计划中的配对是 \(9\times 35\times 9=2835\)。实际完成 2832,完成率 99.89%。每条加了防御的运行用 baseline_run_id 对上同一条基线运行。

攻击成功率定义为满分次数除以有效运行数。有效运行去掉超时和执行错误。满分可以由确定性的规则裁判给出,也可以由可选的语义裁判给出。表 1 没有把两种裁判拆成两列,读的时候不知道 6.00% 里有多少只被其中一个裁判算进去。

九种防御都降了,没有一种降到 0

表 1 的基线成功率按每条防御自己配上的运行来算,所以样本数不完全一样时,基线也不一样。

防御样本数基线成功率防御后成功率
few_shot_warning3156.03%0.32%
instruction_hierarchy3156.03%0.32%
spotlighting3146.05%0.96%
self_reminder3145.73%1.27%
instructional3156.03%1.90%
delimiters3156.03%1.90%
retokenization3156.03%2.22%
sandwich3156.03%3.17%
random_sequence_enclosure3146.05%3.18%
全部防御28176.00%1.69%

九行样本数加起来是 2832,和完成数一致。合计行却写成 2817,少 15 次,论文没有解释这 15 次为什么不进合计。合计从 6.00% 降到 1.69%,相对下降 \((6.00-1.69)/6.00=71.8\%\)。few_shot_warning 和 instruction_hierarchy 降到 0.32%。sandwich 和 random_sequence_enclosure 仍在 3.17% 和 3.18%。没有一种是 0。self_reminder 的基线是 5.73%,同为 314 次的 spotlighting 基线是 6.05%,说明少掉的那一次不是随机缺跑,配上的运行集合本身不同。

论文的解释是:把指令优先级写明的防御,在这组高风险样本上强于只加语法边界的防御。这个排序被限定在当前 Agent、这个匿名模型、这批载荷和这 9 组组合里。

离线检测:误报是 0,召回最高 17.78%

另一组不调用模型。检测器在内容进模型之前看原始产物。语料 630 条,配平:315 条来自高风险矩阵的受污产物,315 条良性对照。

检测器精确率召回率F1误报率
PatternDetector0.00%0.00%0.00%0.00%
LengthDetector100%11.11%20.00%0.00%
RepetitionDetector100%17.78%30.19%0.00%

三个检测器的误报率都是 0。PatternDetector 一条受污样本都没报出来。LengthDetector 召回 11.11%,论文写成标出 35 条。RepetitionDetector 召回 17.78%,标出 56 条。315 乘 11.11% 等于 35.0,315 乘 17.78% 等于 56.0,和条数对齐。论文据此说静态签名可以滤掉一部分量大的简单样本,不能单独当边界。

这些数不能被读成什么

6.00% 和 1.69% 是 9 组高风险组合上的配对结果,不是 13 乘 16 乘 2 乘 35 的全矩阵成功率,也不是 DeepSeek Harness 那篇里的 5.6%。全矩阵的大部分组合论文自己说没有成功注入。只测高风险子集,会把防御前后的差放大到这 9 组上,不能倒推其余组合。

71.8% 是相对下降,不是绝对下降。绝对差是 4.31 个百分点。防御后仍有 1.69%。合计样本 2817 和九行之和 2832 对不上。表上的成功率没有区分规则裁判和语义裁判。模型匿名,换一个模型这些百分比没有对照。2832 次完成之外的 3 次计划运行,失败原因没有单列。

检测器的 100% 精确率建立在这 630 条配平语料上,误报为 0 不表示换一批良性文档仍然不误报。召回不超过 17.78%,漏掉的仍是大多数。

讨论里还写:新注册一个通道就会自动和已有的 13 种攻击、2 种模式、9 种防御组合成新格子。那是工具的组合方式,不是这次已经跑完的实验。这次跑完的就是上面两张表。许可证是 CC BY 4.0。这篇只复述评测协议和文中数字。

出处:腾讯朱雀实验室,Zonghao Ying 等,pikit: A Composable Toolkit for Indirect Prompt Injection Research and Evaluation,2026-09-29,https://arxiv.org/abs/2609.36817

觉得有用,转给同事

微信扫码

用微信扫一扫,在手机上打开后即可转发。

用 RSS 订阅

提交勘误