用 garak 对本地大模型做一轮安全测试

先明确测什么,再选工具

AI 安全测试不是给模型打个分,而是用一组可重复的输入去验证它在特定风险上的表现。
对刚接触这件事的人来说,最省事的切入方式是:选一个本地可运行的模型,用现成的扫描框架跑一轮基线,看清哪些探测项会命中、哪些是误报,再决定下一步是加提示词防护、加输出过滤,还是换模型。

本文以 garak(NVIDIA 开源的 LLM 漏洞扫描工具)为例,目标是本地 Ollama 上的一个对话模型。
它覆盖提示注入、越狱、训练数据泄露、毒性输出等探测,适合做入门级基线,但不等于完整的安全评估。

适用前提:

  • 一台能跑 Ollama 的 Linux 机器,Python 3.10 及以上
  • 已经能通过 ollama list 看到至少一个模型
  • 测试对象是你自己的模型或你有权测试的接口,不要对第三方线上服务未经授权扫描

准备测试环境

先确认 Ollama 服务在监听,默认端口 11434:

ollama list
curl -s http://127.0.0.1:11434/api/tags | head -c 300

建议单独建虚拟环境装 garak,避免和系统 Python 包冲突:

python3 -m venv ~/garak-venv
source ~/garak-venv/bin/activate
pip install -U pip
pip install -U garak

安装后确认命令可用,并查看当前版本支持的探测器和模型接口类型:

garak --version
garak --list_probes | head -40
garak --list_generators | grep -i ollama

如果 --list_generators 里没有 Ollama 相关项,说明当前版本或插件组合不支持该接口,可改用 OpenAI 兼容接口方式接入,下面会讲到。

配置扫描目标并跑第一轮

garak 的调用结构是“探测器 + 目标模型”。
目标模型通过 --model_type 指定接口类型,通过 --model_name 指定模型名。
对 Ollama,常见写法是:

garak --model_type ollama \
  --model_name qwen2.5:7b \
  --probes encoding,dan,promptinject \
  --generations 1 \
  --report_prefix baseline

几个参数的含义:

  • --probes:选择探测器类别,先用少量类别跑通链路,不要一上来全量
  • --generations:每个提示的尝试次数,1 表示最省时,适合首轮验证
  • --report_prefix:报告文件名前缀,结果会输出到当前目录

如果本地模型不方便直接接,也可以先把 Ollama 暴露成 OpenAI 兼容接口,再用对应接口类型扫描:

garak --model_type openai \
  --model_name qwen2.5:7b \
  --generator_options '{"openai":{"api_key":"ollama","api_base":"http://127.0.0.1:11434/v1"}}' \
  --probes promptinject

首轮建议只跑一个探测器类别,确认能看到请求发出、模型返回、报告生成,再扩大范围。

判读报告时先分清命中与误报

garak 跑完会在当前目录生成 .jsonl 和 .html 报告。
JSONL 每行一条探测记录,重点看 status、probe、detector 和 score 几个字段。
HTML 报告更适合快速浏览命中的类别。

判读时注意三点:

  • 命中不等于漏洞。探测器用关键词或分类器判断输出是否“像有害内容”,模型正常拒答但措辞里带了敏感词,也会被判命中。
  • 先看探测输入再下结论。把命中的 prompt 和模型原始输出一起看,判断是模型真的被绕过,还是检测规则过宽。
  • 同一项多跑几次。大模型输出有随机性,单次命中参考价值有限,至少跑 2 到 3 次看是否稳定复现。

如果某项命中稳定复现,且输出确实违反了你的预期,再把它作为需要修复的问题记录下来,附上输入、输出和复现次数。

常见问题与避坑

扫描卡住或超时:本地模型推理慢,长探测器容易超时。
先用 --probes 限定小范围,或调低单次生成长度,确认链路通畅后再加量。

报告全是命中:多半是检测器过于敏感,或模型输出语言与探测器默认语言不匹配。
可以换用更贴合的 detector,或人工抽样复核。

误把扫描当合规证明:一轮 garak 扫描只能说明在所选探测项上的表现,不能证明模型整体安全,也不能替代针对业务场景的人工评估和红队测试。

对线上服务直接扫:未经授权对第三方接口做提示注入扫描可能违反服务条款,测试前确认授权范围。

验证这轮测试是否有效

完成首轮后,用三个问题检验结果是否可复现、可解释:

  1. 报告里每个命中项,能否找到对应的输入和输出原文?
  2. 同一探测项重跑一次,命中是否稳定出现?
  3. 对稳定命中的问题,是否已经有了修复方向(改提示词、加输出过滤、换模型)?

这三个问题都能回答,说明这轮 AI 安全测试产出了可用信息;
回答不了,就缩小探测范围重跑,而不是继续堆探测器数量。

需要补充的是,garak 只是入口之一。
真正落地时,还应结合业务实际输入构造测试用例,并把扫描放进版本迭代流程里,模型或提示词变更后重新跑一轮基线,才能持续看到风险变化。

分享到:
上一篇
企业对照AI安全标准时先分清这四类要求
下一篇
AI渗透测试教程:用garak扫描本地大模型并解读报告
1
系统公告

关于香港云优质服务器IP地址更换的通知

尊敬的客户: 因原IP运营商大幅涨价,为避免成本转嫁至用户,我司决定更换IP服务商。本次更换后,您的续费价格将保持不变,且新IP网络质量与服务标准不受影响。新IP已分配至后台,即刻生效(更换的新IP都是香港原生IPv4)。 涉及 IP 段: 45.192.x.x 旧 IP 停用时间: 2026 年 12 月 1 日
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意