尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

garak 报告转 AVID:用 `-r` 命令将 LLM 漏洞扫描结果接入 AI 漏洞数据库

发布时间:2026/9/16 23:26:46

资讯中心
01
ARTICLE

garak 报告转 AVID:用 `-r` 命令将 LLM 漏洞扫描结果接入 AI 漏洞数据库

garak 报告转 AVID:用 `-r` 命令将 LLM 漏洞扫描结果接入 AI 漏洞数据库
garak 报告转 AVID用-r命令将 LLM 漏洞扫描结果接入 AI 漏洞数据库【免费下载链接】garakthe LLM vulnerability scanner项目地址: https://gitcode.com/GitHub_Trending/ga/garakgarak 每次扫描会沉淀下一份结构化报告但报告本身只是中间产物。本文聚焦 garak 的AVID 报告转换能力通过一条python3 -m garak -r 报告文件命令把 JSONL 格式的扫描报告重新整理为符合 AI Vulnerability DatabaseAVID开放数据模式的.avid.jsonl文件供下游漏洞消费方如 AVID 数据库直接使用。读完本文你将掌握-r命令的完整用法、Report 类的转换原理以及 AVID 输出中各字段与探测标签的映射关系。garak 报告体系与 AVID 的定位garak 每次运行默认产出三类产物详见 报告总览一个 JSONL 文件名为garak.uuid.report.jsonl记录扫描的进度与结果一个汇总分数的 HTML 报告一个 JSONL 命中日志hit log描述所有被判为成功攻击的尝试。而report.rst描述的能力是这些产物的下游延伸garak 报告需要连接到对 LLM 漏洞与失败信息感兴趣的事物上例如 AI 漏洞数据库。为此garak 提供了专门的 CLI 选项将报告进一步结构化采用AVIDAI Vulnerability Database开放数据模式。这种转换的价值在于原本面向人类阅读与 garak 内部统计的报告被重新组织成机器可读、可入库、可跨工具交换的漏洞条目。从源码依赖看转换工作依赖avidtools数据模型库版本锁定见 requirements.txtgarak/report.py顶部的导入语句直接引用了avidtools.datamodels.report、avidtools.datamodels.components与avidtools.datamodels.enums来构造标准化的 AVID 对象。-r命令一条命令完成格式转换AVID 转换的语法非常简洁在 report.rst 中给出python3 -m garak -r path_to_file其中path_to_file指向一个 garak 原生报告即garak.uuid.report.jsonl。该参数在 CLI 层面对应 cli.py 中定义的--report/-r选项parser.add_argument( --report, -r, typestr, helpprocess garak report into a list of AVID reports, )注意它与常规扫描命令的差异使用-r时不会发起新的扫描而是对已有报告做离线后处理。实际操作示例沿用原文档的做法先准备一份 garak 报告。原文档以扫描gpt-3.5-turbo-0613生成的报告为例通过下载方式取得样例报告后再执行转换python3 -m garak -r gpt35-0906.report.jsonl如果不方便联网获取外部样例也可以直接使用仓库自带的测试报告 tests/_assets/report/report_test.report.jsonl 来演练完整流程python3 -m garak -r tests/_assets/report/report_test.report.jsonl无论哪种数据源转换成功后会输出两行提示cli.py中对应的处理逻辑见 cli.py Converting garak reports gpt35-0906.report.jsonl AVID reports generated at gpt35-0906.avid.jsonl第二条提示中的.avid.jsonl路径揭示了输出文件的命名规则将输入文件名中的.report替换为.avid。该规则由 report.py 中的self.report_location.replace(.report, .avid)实现。转换的底层原理Report 类三步流水线-r背后的核心是 garak/report.py 中定义的Report类。它将整个转换过程组织为加载 → 提取 → 导出三个阶段这也是理解整个功能的最佳入口。第 1 步load()读取原始报告load()逐行读取 JSONL 报告将每一行解析为独立的 JSON 记录存入self.recordsreport.py。之所以是行级记录是因为 garak 报告的每一行都带有entry_type字段标记这条记录的类型。第 2 步get_evaluations()提取评估数据get_evaluations()report.py遍历全部记录并做两件事收集entry_type eval的记录作为评估数据捕获entry_type start_run setup的记录作为元数据metadata其中包含被扫描目标的关键信息如plugins.target_type与plugins.target_name。随后它对每条 eval 记录按probe字段反查探测插件的tags通过importlib动态导入garak.probes.module并实例化为后续 AVID 分类提供素材最后用 pandas 汇总出每个探测的得分self.evaluations[score] np.where( self.evaluations[total_evaluated] ! 0, 100 * self.evaluations[passed] / self.evaluations[total_evaluated], 0, )即score 100 × passed / total_evaluated百分比形式并按probe分组求均值得到self.scores。一个重要的边界情况如果报告里连一条eval记录都没有get_evaluations()会抛出ValueError(No evaluations to report )这一点被 tests/test_report.py 的test_get_evaluations_raises_error_when_no_evals用例覆盖。第 3 步export()生成 AVID 报告export()report.py是转换的核心。它以avidtools.datamodels.report.Report()为模板为每个探测生成一条独立的 AVID 记录最后按行写入.avid.jsonl文件。整个流程可归纳如下填充公共信息若存在元数据则构造affects影响对象——deployer取plugins.target_typeartifacts取plugins.target_name并标记类型为modelreferences固定写入 garak 项目引用reported_date取当天日期。逐探测生成记录每个探测对应一条 AVID 记录包含description自动生成的英文描述如 The model {target_name} from {target_type} was evaluated by the Garak LLM vulnerability scanner using the probe{probe}.无元数据时退化为通用描述problemtypeclassofllm、typemeasurement即针对 LLM 的测量类问题metrics携带该探测下每个检测器detector的passed、total_evaluated、score明细impact.avid由探测标签推导的 AVID 分类见下一节。输出字段结构测试用例给出的验收标准转换是否成功、结构是否合规在仓库测试中有非常明确的断言。tests/test_report.py中的validate_avid_report_structuretests/test_report.py要求每条输出记录必须包含data_type字符串且小写为avidaffects、problemtype、metrics、impact、references。在此基础上测试进一步验证references为非空列表tests/test_report.pyaffects.deployer与affects.artifacts均非空即模型类型与名称被正确写入tests/test_report.pyproblemtype.classof、type、description.value、description.lang均存在且非空tests/test_report.pymetrics中detection_method存在且results包含detector、passed、total_evaluated、score各列tests/test_report.pyimpact.avid中vuln_id、risk_domain、sep_view、lifecycle_view、taxonomy_version字段齐全tests/test_report.py。这些断言同时充当了格式契约任何对输出结构的改动都会被测试拦截。avid-effect标签探测分类如何进入 AVID 报告AVID 输出的impact.avid分类并非凭空而来而是取自每个探测自带标签中以avid-effect:为前缀的部分。export()中的提取逻辑report.py只处理tag.startswith(avid)的标签并将标签按:切分后映射到 AVID 分类字段risk_domain取标签第二段并首字母大写如security→Security去重后作为列表sep_view取标签第三段映射为 AVID 的 SEP 枚举如S0403lifecycle_view固定为L05。以 adaptive_attacks.py 为例该探测的标签中包含tags [ avid-effect:security:S0403, avid-effect:performance:P0204, owasp:llm01, quality:Security:PromptStability, payload:jailbreak, demon:Language:Prompt_injection:Strong_arm_attack, ... ]其中只有avid-effect:security:S0403与avid-effect:performance:P0204会被计入 AVID 分类其余标签如owasp:*、demon:*在此流程中被忽略——注释明确写着supports only avid taxonomy for now目前仅支持 AVID 分类法。类似的avid-effect标签广泛存在于各探测中例如 continuation.py 的avid-effect:ethics:E0101、avid-effect:performance:P0401等覆盖 security、performance、ethics 等多个风险域。使用边界与注意事项无元数据也能转换即使报告缺少start_run setup记录export()仍可运行只是affects与描述信息会退化为通用内容对应的测试用例为 tests/test_report.py 中的test_export_works_without_metadata。输入必须是完整报告仅有 attempt 记录而无 eval 记录时无法生成 AVID 输出会直接报错。输出不会覆盖原报告转换生成的.avid.jsonl是独立新文件原.report.jsonl保持不变。离线后处理-r只做格式转换不会触发对目标模型的任何请求适合对历史报告批量归档或入库。延伸与报告体系的其余环节衔接AVID 转换是报告下游消费的一种形态。若你的目标是让报告更便于人读或做统计还可参考 报告总览 中的配套工具链rebuild_cispython -m garak.analyze.rebuild_cis -r report.jsonl用于重算置信区间report_digestpython -m garak.analyze.report_digest用于生成 HTML 摘要报告。若需基于意图intent维度解读扫描结果可进一步查阅 CAS 意图扫描。这些工具与 AVID 转换共享同一份.report.jsonl数据源共同构成 garak 报告从采集、分析到跨系统交换的完整闭环。【免费下载链接】garakthe LLM vulnerability scanner项目地址: https://gitcode.com/GitHub_Trending/ga/garak创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。