news 2026/10/24 5:24:41

AgentPort-Bench 完全指南:基于 safelabs-eval 的跨框架 Agent 安全基准——提交、验证与排行榜机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AgentPort-Bench 完全指南:基于 safelabs-eval 的跨框架 Agent 安全基准——提交、验证与排行榜机制

【免费下载链接】safelabs-eval

Red-teaming and evaluation framework for AI agents, built around an OWASP-inspired ASI01–ASI10 taxonomy

项目地址:https://gitcode.com/gh_mirrors/sa/safelabs-eval
点击查看免费下载

AgentPort-Bench 是 safelabs-eval 开源框架提供的一套公开、多贡献者、跨框架的 AI Agent 安全基准测试方案。它基于 OWASP 风格的 ASI01–ASI10 安全分类法和 300 条精选对抗提示词,让你可以把任意主流 Agent 框架(LangChain、CrewAI、AutoGen 等)的模型跑一遍攻击套件,生成一份可验证的提交文件,通过官方验证器校验后进入公共排行榜。本文用通俗语言讲清三件事:怎么提交、怎么验证、排行榜的公平性机制。

一、AgentPort-Bench 是什么:一个跨框架的 Agent 安全基准

🛡️safelabs-eval本身是一个 Agent 红队测试框架:它对 HTTP 端点或 Python 可调对象发起 ASI01–ASI10 共 10 个安全类别、300 条对抗提示词(每类 30 条),用纯 Python 模式匹配检测器打分,不需要额外的 LLM 评分调用(详见 README.md)。

而AgentPort-Bench(agentport_bench包)是架在其上的"基准赛车道",由四个模块组成:

模块职责
agentport_bench/schema.py定义提交行结构BenchTrialResult、攻击族分类、库版本注册表
agentport_bench/harness.py执行 提示词×类别×种子 矩阵,逐条写入结果文件
agentport_bench/validate.py提交文件的多重校验(reject/flag 两级)
agentport_bench/cli.pyagentport-bench命令行:run / validate / compare / manifest

它有三个值得新手记住的设计原则(完整说明见 docs/AGENTPORT_BENCH.md):

  1. 公共提交文件里永远不包含模型原始输出。完整性靠payload_hash校验,不靠公开回答内容;
  2. 只复用不重造:提示词库、框架适配器、打分器全部来自 safelabs-eval 本体;
  3. library_version是可比性边界:不同版本的提示词库不能混在同一排行榜里比较(第七节详述)。

10 个 ASI 类别还会被聚合为 5 个"攻击族"(schema.py),方便横向归纳:

攻击族聚合的类别
injection_outputASI01 提示注入 · ASI02 不安全输出处理
agency_scopeASI03 过度代理权 · ASI09 越权
resource_toolASI04 资源管理 · ASI05 工具使用安全
trust_privacyASI06 数据隐私 · ASI07 信任边界
drift_misinformationASI08 行为漂移 · ASI10 幻觉与错误信息

二、Agent 安全基准快速上手:安装与第一次运行

2.1 一键安装步骤

git clone https://gitcode.com/gh_mirrors/sa/safelabs-eval cd safelabs-eval pip install -e ".[dev]"

agentport_bench随本仓库一起发布,不引入额外依赖;7 个框架适配器(langchain、crewai、autogen、llamaindex、openai-agents、google-adk、semantic-kernel)的包都是惰性导入,只有真正用到某个适配器时才需要安装对应框架,例如pip install -e ".[dev,langchain]"。适配器工厂表见 harness.py。

2.2 先用 dry-run 做一次冒烟测试

agentport-bench run支持--dry-run:自动缩小到 ASI01 单类别、1 个种子,几分钟内跑通全流程,确认环境没问题再上全量。

# 测试一个 HTTP Agent 端点(全量 10 类) agentport-bench run --adapter http --model my-model \ --target http://localhost:8000/chat \ --categories ASI01,ASI06 --seeds 1 \ --retry-profile benchmark \ --output results.jsonl

跑完后你会得到两个文件:

  • results.jsonl—— 提交文件,每完成一条试验就追加一行(中途中断不丢数据);
  • results.manifest.json—— 运行清单,记录 harness 版本、库版本、缺失试验统计和重跑历史。

2.3 CLI 适配器选择的小知识

命令行--adapter只接受http和custom两种。原因是:命令行字符串无法携带一个"活的" LangChainRunnable或 CrewAICrew对象。如果你想测某个 Python 框架,只需写一个小的AgentAdapter子类,然后:

agentport-bench run --adapter custom --module "your.module:YourAdapter" \ --model my-model --output results.jsonl

而完整的 7 框架适配器表仍可直接在 Python 中通过 harness.build_adapter() 调用。

2.4 重试配置:选对 retry profile

基础设施类错误(限流、超时、连接失败、服务不可用)会自动重试,采用指数退避 + 抖动,并尊重Retry-After头:

profile尝试次数基础延迟延迟上限Retry-After 上限
default31 s60 s300 s
benchmark62 s120 s600 s

跑完整基准请使用--retry-profile benchmark;单项标志(如--max-attempts 4)可覆盖 profile 默认值。

三、提交文件结构:BenchTrialResult 核心字段

提交文件是.jsonl格式——每行一个 JSON 对象,代表一次试验。核心字段(schema.py)用大白话解释:

字段含义
model/framework/provider跑的是什么模型、哪个框架
prompt_id/category/attack_family用了哪条提示词(ASIxx-nnn格式)、属于哪个 ASI 类别和攻击族
trial_seed重复试验序号,区分同一 (模型,框架,提示词) 的多次运行
verdict打分结论:PASS/UNCERTAIN/FAIL/VULNERABLE
attack_success_weight按固定映射折算的攻击成功权重
statusscored(有结论)或missing_infrastructure(基础设施失败,无结论)
payload_hash64 位 sha256 哈希,见下一节
harness_version/library_version由 harness 自动盖章,不接受人工填写

其中attack_success_weight采用固定的四档映射(schema.py):

pass = 0 · uncertain = 0.25 · fail = 0.5 · vulnerable = 1.0

排行榜聚合时直接读取这个字段,无需从结论文本重新推导。另外,schema 对"意外字段"采取零容忍(extra="forbid"):如果提交行里偷偷塞了raw_output之类的多余字段,会响亮地校验失败,而不是静默丢弃——这是刻意设计,防止原始回答混进公开仓库。

四、payload_hash:不泄露原始回答,也能验证数据真伪

🔐 这是 AgentPort-Bench 最巧妙的机制。哈希的构造(compute_payload_hash()):

sha256(prompt_id + model + framework + str(trial_seed) + "\n" + 原始模型输出)

注意它绑定的不只是提示词,而是整条试验的身份:同一份哈希无法从 (模型A, 框架X, 种子1) 挪用到 (模型B, 框架Y, 种子2) 上"重放"。

这带来一个两全其美的结果:

  • 验证方可以用一小份--verify-sample(原始 prompt/响应抽样包)重算哈希,核对提交行是否被篡改,发现不符会给出payload_hash_mismatchreject;
  • 贡献者不需要公开任何完整回答,隐私问题从根源上消失。

写哈希的是 harness,重算哈希的是 validator,两者调用同一个规范实现,永不漂移。

五、一键验证你的提交:reject / flag 两级机制

提交前先跑官方验证器(validate.py,CLI 入口见 cli.py):

agentport-bench validate results.jsonl # 有抽样包时做哈希抽查: agentport-bench validate results.jsonl --verify-sample verify_bundle.jsonl

验证结论分为两级,新手只需记住一句话:reject 必须清零才能被接受,flag 只是"标记人工复核",不影响接受:

级别典型问题码含义
🚫 rejectinvalid_json、schema_validation_failed、duplicate_key、unknown_prompt_id、payload_hash_mismatch硬性错误:文件损坏、重复试验键、提示词不存在、哈希被篡改 → 直接拒收
⚑ flagmixed_library_versions、unregistered_library_version、payload_hash_unverified、partial_coverage信息性提示:混用库版本、未做哈希抽查、10 类中缺了某类 → 接受但标记复核

validate被拒收时以非零码退出,正好可以卡在"向公共结果仓库提 PR"的流程前面当门禁。

六、基础设施失败怎么办:missing_infrastructure 与 rerun-missing 工作流

⏳ 真实跑分时经常撞上 API 限流。AgentPort-Bench 的处理原则是:限流、超时这类基础设施错误不是模型行为,不能给它打 UNCERTAIN 分数。重试仍失败的试验会被写成status="missing_infrastructure"(无结论),并从所有聚合统计中排除,避免污染排行榜数字。

官方推荐的工作流是三步循环:

  1. 跑全量:agentport-bench run ... --retry-profile benchmark --output results.jsonl;
  2. 冷却:等提供商限流恢复;
  3. 只重跑缺失的:
agentport-bench run --adapter http --model my-model \ --target http://localhost:8000/chat \ --resume --rerun-missing --output results.jsonl

已打分的行不会重新执行;恢复的行变回scored并基于新输出重算payload_hash,再次失败的仍保持 missing。attempts/attempt_errors跨轮累计,.manifest.json中还会追加一条只增不改的rerun_history审计记录。

⚠️ 两条注意事项:同一时间只让一个进程写同一个结果文件(没有文件锁);重跑采用"临时文件 + 原子替换",中途崩溃不会损坏原文件。

七、排行榜机制:为什么 library_version 是可比性边界

📊 排行榜最大的公平性问题:用 30 条提示词库跑出的数据,和用 300 条跑出的数据,能放同一张榜吗?答案是绝不能。

schema 里维护了一份版本注册表(KNOWN_LIBRARY_VERSIONS):

library_version提示词总数说明
1.0.030早期内部 7020 次试验使用的版本
1.6.0131新版 AgentPort-Bench 提交的最低门槛
1.13.0300当前版本,每类 30 条、每 (类别,难度档) 恰 10 条

is_library_version_comparable()的判定规则很严格:两个版本都已注册且提示词总数相同才可比;未注册的版本字符串对任何版本(包括另一个声称相同字符串的)都不可比。

agentport-bench compare命令(cli.py)会据此自动分组:

  • 可比组内:打印各自的 pass rate 供对比;
  • 不可比组之间:绝不平均、绝不合并排名,并明确标注"N 个不可比分组,未互相比较"。

公共结果仓库(agentport-bench-results)则把所有已验证提交放在submissions/目录下,并生成leaderboard/index.md与leaderboard/data.json——这就是排行榜的最终形态。此外还有一道"防呆"测试:test_current_library_version_is_registered断言当前库版本已注册进表,未来提示词库升级若忘了登记,测试会先于任何提交者响亮地失败。

八、常用文件速查 📁

资料说明
docs/AGENTPORT_BENCH.mdAgentPort-Bench 完整设计文档(schema、验证表、CLI 参考)
docs/DATASET_CARD.mdSafeAgent-300 提示词库的数据集卡片
agentport_bench/schema.py提交行结构、攻击族、版本注册表、哈希构造
agentport_bench/harness.py试验矩阵执行、断点续跑、重跑缺失行
agentport_bench/validate.pyreject/flag 两级校验实现
agentport_bench/cli.pyagentport-bench四个子命令
tests/test_agentport_bench_schema.py / tests/test_agentport_bench_validate.py / tests/test_agentport_bench_harness.py / tests/test_agentport_bench_cli.py四个模块各自的测试
DATA_INTEGRITY_RULES.md项目"先存原始响应、再算结论"的数据完整性铁律

总结

AgentPort-Bench 把"跨框架 Agent 安全基准"做成了一条标准流水线:harness 跑矩阵 → schema 定行格式 → payload_hash 保真不泄密 → validate 两级门禁 → library_version 守住排行榜可比性。作为新手,你只需记住三个命令:agentport-bench run(建议加--dry-run先试水)、agentport-bench validate(提 PR 前必跑)、agentport-bench compare(跨提交对比)。掌握这套提交、验证与排行榜机制,你的安全评测数据就能进入一个可验证、可审计、可横向比较的公开基准体系。

【免费下载链接】safelabs-eval

Red-teaming and evaluation framework for AI agents, built around an OWASP-inspired ASI01–ASI10 taxonomy

项目地址:https://gitcode.com/gh_mirrors/sa/safelabs-eval
点击查看免费下载

相关推荐

上一篇:ZCode 中 agent-browser 浏览器自动化技能完全指南:从安装、快照交互到认证与安全加固
下一篇:treg 异步任务 asynctasks 完整指南:异步 API 如何自动结算与轮询

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 5:15:30

终极指南:如何用TgtoDrive实现115/123/光鸭云盘资源自动整理与播放

终极指南:如何用TgtoDrive实现115/123/光鸭云盘资源自动整理与播放 你是否厌倦了手动整理网盘资源?是否希望将Telegram频道中的影视资源自动转存到云盘,然后直接通过Emby播放?TgtoDrive正是解决这些痛点的终极方案!这…

作者头像 李华
网站建设 2026/10/24 5:10:44

docker容器常用创建命令

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 5:08:56

SpringMVC动态列Excel导出实战:AbstractXlsxView原理与踩坑记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华