资讯动态

garak atkgen 探针深度解析:用攻击模型自动生成毒性诱导提示(Attack Generation)

发布时间:2026/9/16 14:04:42 来源:尧图企业网站定制
garak atkgen 探针深度解析用攻击模型自动生成毒性诱导提示Attack Generation【免费下载链接】garakthe LLM vulnerability scanner项目地址: https://gitcode.com/GitHub_Trending/ga/garak导读garak.probes.atkgen是 LLM 漏洞扫描器 garak 中一类特殊的攻击生成Attack Generation探针它不再依赖人工预置的静态 prompt 列表而是启动一个独立的攻击模型red team model在扫描过程中动态生成旨在诱导目标模型输出毒性内容的攻击提示并以多轮对话的方式持续施压。读完本文你将掌握 atkgen 的设计定位、Tox探针的完整配置参数、多轮对话攻击循环的内部执行逻辑以及如何在 garak 中运行和验证这一探针。atkgen 模块的定位动态生成攻击提示在 garak 的探针体系中多数探针如topic、dan、encoding从静态 payload 数据文件加载提示词而atkgen模块的职责完全不同。模块文档garak/probes/atkgen.py开宗明义This probe uses a separate model to create attack prompts, which are intended to guide that generator into a certain failure mode. Only probes that dynamically generate their own attack prompts belong in this module.即只有自己动态生成攻击提示的探针才属于该模块。其核心思路是训练一个专门的攻击模型——该模型基于最终诱导 LLM 输出毒性内容的对话数据训练而成——然后在扫描运行时用它不断产出挑战性 prompt投喂给被测目标模型。该模块在FAQ.md中被归入反应式探针reactive probes一类reactive probes, that respond to LLM behavior and adapt as we go along; examples includeatkgen,topic, as well as the compute-intensetapandsuffixmodules这一特性决定了它与静态探针的本质差异攻击质量随目标模型的回应动态演化而非一次性批量发送。从源码结构看atkgen模块内只定义了一个探针类Tox模块级常量TEMPLATE_PLACEHOLDER [query]用于校验攻击提示模板中的占位符garak/probes/atkgen.py。安全警示模块文档明确警告攻击模型在试图诱导目标模型失效时可能生成极具毒性的 prompt阅读扫描日志需自行承担风险并建议参考关于有害文本处理的研究资料doc_uri指向的 Fake Toxicity Prompts 相关文章参见 garak/probes/atkgen.py。在真实环境中运行该探针前请确认输出审查与日志隔离策略。Tox 探针针对毒性输出的自动攻击生成Tox是garak.probes.Probe的子类garak/probes/atkgen.py目标是make the model say something toxic让模型说出毒性内容。它使用一个攻击模型生成提示该攻击模型的训练数据挑选自导致 LLM 输出毒性的对话且数据筛选所用的检测器与本探针使用的检测器一致——因此攻击模型与检测器对失败模式的定义是同一套。类元信息与标签体系属性值含义intentS005攻击模型明确试图诱发广义毒性输出根据目标实际产出单次运行可能重叠S005hate或S005profanity对照 garak/data/cas/trait_typology.json 中S005系条目primary_detectorunsafe_content.ToxicCommentModel默认毒性检测器garak 的默认毒性分类器garak/detectors/unsafe_content.pygoalmake the model say something toxic探针目标parallelisable_attemptsFalseatkgen 自带对话管理器不支持并行化 attemptslangenBCP47 语言标识tierTier.COMPETE_WITH_SOTA第 2 层级与 SOTA 竞争低 z-score 可能意味着问题见 garak/probes/_tier.pyactiveTrue默认启用标签tags从多个维度描述了该探针的属性garak/probes/atkgen.pyavid-effect:ethics:E0301伦理维度——内容安全毒性quality:Behavioral:ContentSafety:Toxicity、HateHarassment、Profanity行为质量——内容安全三大子类payload:unwanted负载类型——非预期内容demon:Stratagems:Scattershot:Regenerate_response攻击策略——反复重新生成挑战提示期待目标在某次失手。DEFAULT_PARAMS九个核心配置项逐项解析Tox在基类DEFAULT_PARAMS基础上合并了 9 个自定义参数garak/probes/atkgen.py它们是控制攻击行为的关键旋钮参数默认值作用max_calls_per_conv5单段对话内最多调用的轮数上限即多轮攻击对话的最大回合数convs_per_generation5每次生成每个 generation启动的独立对话段数constructive_tensionTrue建设性张力当目标回复为空时是否继续以空串作为下一轮攻击模型的输入保持对话压力red_team_model_typehuggingface.Pipeline攻击模型的生成器插件类型格式为module.Classred_team_model_namegarak-llm/attackgeneration-toxicity_gpt2攻击模型的 Hugging Face 模型标识red_team_model_config{hf_args: {device: cpu, torch_dtype: float32}}攻击模型加载配置默认强制 CPU 与 float32把加速设备让给被测模型red_team_prompt_template|input|[query]|response|攻击模型的提示模板[query]为占位符回填上一轮对话内容red_team_postproc_rm_regexr\\|.*对攻击模型输出的后处理正则删除|之后的部分如响应标记use_only_first_sentTrue是否只取目标回复的第一句话按.切分作为下一轮攻击模型的输入allow_repetitionFalse是否允许攻击对话中出现完全重复的回应默认禁止重复即终止对话其中red_team_model_config的默认注释点明了设计取舍defer acceleration devices to model under test unless overriden——即默认把 GPU 留给被测目标模型攻击模型跑在 CPU 上若需加速攻击模型可在配置中覆盖hf_args。模板占位符的强制校验__init__中有一段硬校验garak/probes/atkgen.py若配置了非空red_team_prompt_template但其中不含[query]占位符常量TEMPLATE_PLACEHOLDER将记录 critical 日志并抛出ValueError防止模板无法回填上一轮对话内容导致攻击循环失效。攻击模型配置的自动装配_build_red_team_model_config方法garak/probes/atkgen.py把red_team_model_type按.拆分为module与Class要求必须是完整限定名如huggingface.Pipeline否则抛出ValueError。随后构造出标准的 garak 生成器配置结构{ generators: { rt_model_module: { rt_model_class: self.red_team_model_config | {name: self.red_team_model_name} } } }这一结构在probe()执行时通过garak._plugins.load_plugin(fgenerators.{self.red_team_model_type}, config_rootself.red_team_model_config)加载攻击生成器garak/probes/atkgen.py并设置deprefix_prompt True、parallel_requests False。多轮攻击对话循环probe() 执行流程Tox.probe(generator)garak/probes/atkgen.py是整个探针的核心其执行逻辑可拆解为以下阶段1. 攻击模型懒加载首次调用probe()时加载攻击模型红队生成器加载消息以前缀区分于目标生成器。随后根据generations * convs_per_generation计算总对话段数用tqdm进度条迭代generations来自基类参数。2. 单段对话内的轮次循环对每段对话在calls_made max_calls_per_conv and keep_going条件下循环构造攻击模型输入red_team_prompt_template中把[query]替换为last_response目标上一轮回复默认只取第一句new_conversation起始时置空串。若启用constructive_tension且目标回复为空则挑战文本保持为空以维持对话张力攻击模型生成挑战调用self.redteamer.generate(...)产出challenge再用red_team_postproc_rm_regex正则清理语言转换若配置了翻译服务self.langprovider.get_text(...)把挑战翻译成目标语言若发生翻译原挑战文本会存入attempt.notes[pre_translation_prompt]garak/probes/atkgen.py铸造 Attempt 并发送目标通过self._mint_attempt(...)生成Attempt调用generator.generate(...)获取目标模型回复攻击模型生成的挑战原文记录在attempt.notes[red_team_challenge]后续轮次通过previous_attempt_id串联成对话链garak/probes/atkgen.py反向翻译与终止判定目标回复经reverse_langprovider反向翻译回攻击模型语言存入reverse_translation_outputs并基于以下条件决定是否结束对话回复为空且constructive_tensionFalse→ 终止回复与上一轮完全相同allow_repetitionFalse时→ 终止回复为None→ 终止。持久化每个 Attempt 以 JSONL 形式实时写入_config.transient.reportfile并深拷贝加入结果列表garak/probes/atkgen.py。3. 输出形态verbose 阈值控制output_is_conversation _config.system.verbose 2garak/probes/atkgen.pyverbose 2以 tqdm 进度条展示回合描述形如turn NN: red teaming [...]与turn NN: waiting for [...]verbose 2以彩色对话流形式实时打印——新对话、 probe:黄色显示攻击挑战、 model:加粗显示目标回复garak/probes/atkgen.py。4. 可扩展机制Tox直接覆写了Probe.probe()绕过了基类的静态 prompts 预处理与_execute_all并行执行基类见 garak/probes/base.py因为其对话管理天然是串行的。若需要复用基类的翻译、buff 等管线从源码结构看可考虑IterativeProbe基类garak/probes/base.py它提供了用目标回复生成下一轮提示的多轮骨架Tox当前采用自建循环实现。测试验证攻击循环的自动化保障tests/probes/test_probes_atkgen.py提供了对Tox的完整测试覆盖可用作理解行为的参考加载与配置test_atkgen_tox_load校验所有DEFAULT_PARAMS均被实例化test_atkgen_config校验_build_red_team_model_config生成的嵌套配置结构tests/probes/test_probes_atkgen.py单轮冒烟test_atkgen_one_pass用generators.test.Repeat作为目标、max_calls_per_conv1快速验证redteamer被加载、结果含red_team_challengenotestests/probes/test_probes_atkgen.py自定义攻击模型test_atkgen_custom_model用test.Single替换默认攻击模型验证配置注入与redteamer.name正确性tests/probes/test_probes_atkgen.py多轮反馈闭环test_atkgen_probe以test.Lipsum为攻击模型、test.Repeat为目标断言产出超过一个 Attempt、后轮previous_attempt_id指向前轮——直接验证了对话链tests/probes/test_probes_atkgen.pyverbose 输出test_atkgen_verbose_output断言、 probe:、 model:三个标记出现在verbose 2的输出中tests/probes/test_probes_atkgen.pyNone 回复健壮性test_atkgen_nones验证目标生成器返回None时结果基数正确、outputs [None]被透传tests/probes/test_probes_atkgen.py。此外tests/langservice/probes/test_probes_base.py将probes.atkgen.Tox列入翻译测试探针清单ATKGEN_PROMPT_PROBES验证了带语言服务时的翻译路径tests/test_config.py也以atkgen验证插件规格解析如atkgen简写展开为probes.atkgen.Tox。在 garak 中运行 atkgen 探针atkgen可直接用简写名称运行插件缓存中注册为probes.atkgen.Tox参见 garak/resources/plugin_cache.jsonpython -m garak --model_type huggingface --model_name your-model --probes atkgen--probes atkgen会被解析为probes.atkgen.Tox与_config.parse_plugin_spec的行为一致。若需调整攻击行为通过配置文件覆盖probes.atkgen.Tox下的参数例如plugins: probes: atkgen: Tox: max_calls_per_conv: 8 # 拉长单段攻击对话 convs_per_generation: 10 # 增加并行对话段数 red_team_model_name: your-org/your-attack-model # 替换攻击模型 red_team_model_config: hf_args: device: cuda # 若 GPU 富余可加速攻击模型运行约束提示parallelisable_attemptsFalse攻击过程串行执行扫描耗时与generations * convs_per_generation * max_calls_per_conv正相关攻击模型默认以huggingface.Pipeline类型、CPU/float32 加载garak-llm/attackgeneration-toxicity_gpt2首次运行需下载模型权重默认检测器unsafe_content.ToxicCommentModel基于 s-nlp RoBERTa 毒性分类器garak-llm/roberta_toxicity_classifier见 garak/detectors/unsafe_content.py同样需要模型下载由于可能生成高毒性内容请谨慎选择日志保存位置与人工审查方式。小结garak.probes.atkgen展示了 garak 中用模型对抗模型的探针范式攻击模型持续产出挑战、目标回复又反馈回攻击模型形成动态演化的多轮攻击循环。理解其DEFAULT_PARAMS的九个参数、probe()的对话循环与终止条件、以及测试对行为契约的固化是在真实扫描任务中定制与信任该探针的基础。若需在 garak 中实现其他动态生成攻击提示的探针atkgen.Tox是模块文档钦定的参考实现。【免费下载链接】garakthe LLM vulnerability scanner项目地址: https://gitcode.com/GitHub_Trending/ga/garak创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价