AI-Infra-Guard aig-scanner:一条聊天消息触发全栈 AI 安全扫描的 OpenClaw 技能实战指南
【免费下载链接】AI-Infra-GuardA full-stack AI Red Teaming platform securing AI ecosystems via Agent Scan, Skills Scan, MCP scan, AI Infra scan and LLM jailbreak evaluation.项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Infra-Guard
本指南讲解腾讯朱雀实验室开源项目 AI-Infra-Guard 中的aig-scanner技能:如何把 AI 基础设施漏洞扫描、MCP/工具/Skills 安全审计、AI Agent 安全扫描与大模型越狱评测能力,直接挂载到 OpenClaw 聊天入口,通过一句自然语言完成调用,无需打开 A.I.G Web UI。读完你将掌握技能安装与环境配置、五种后端任务类型的路由规则、aig_client.py全部子命令参数、参数补齐策略与结果轮询机制,并理解任务提交在服务端 common/websocket/api.go 中的真实处理链路。
一、技能定位与工作原理
aig-scanner是 skills/aig-scanner 目录下的一个 OpenClaw Skill,其元数据声明(见 SKILL.md)为:
- 名称:
aig-scanner,版本1.0.3,作者aigsec/Tencent Zhuque Lab,协议 MIT; - 能力定位:面向 AI 基础设施(infrastructure)、AI 工具/技能(AI tools / skills)、AI Agent 与 LLM 越狱评测(jailbreak evaluation)的 AI 安全扫描;
- 依赖:
python3二进制,无需插件,无需 pip 依赖(aig_client.py仅使用 Python 标准库); - 必填环境变量:
AIG_BASE_URL。
它的工作模式可以概括为一条调用链:
用户在 OpenClaw 聊天输入自然语言 ↓ OpenClaw 按 SKILL.md 的 triggers / Routing Rules 命中技能 ↓ 以 exec 方式执行 scripts/aig_client.py <子命令> ... ↓ aig_client.py 调用 A.I.G 服务端 REST 接口 /api/v1/app/taskapi/* ↓ A.I.G 后端调度扫描任务,返回 session_id 与结果这里的核心桥梁是 A.I.G 暴露的taskapiREST 接口。服务端注册位于 common/websocket/server.go,共五类端点:
| 端点 | 作用 |
|---|---|
POST /api/v1/app/taskapi/tasks | 创建扫描任务(按type分派) |
GET /api/v1/app/taskapi/status/{id} | 查询任务状态与日志 |
GET /api/v1/app/taskapi/result/{id} | 获取任务结果 |
POST /api/v1/app/taskapi/upload | 上传本地文件(如源码压缩包) |
POST /api/v1/app/taskapi/uploadChunk/mergeChunks | 大文件分片上传与合并 |
技能内的所有调用都封装在 scripts/aig_client.py 中,SKILL.md 明确规定“Always useaig_client.pyviaexecinstead of rawcurl”,即禁止绕过脚本直接用 curl 拼请求——因为脚本已经处理了 JSON 构造、HTTP 错误、状态轮询与结果格式化等细节。
前置条件:A.I.G 服务已部署(本机或远程均可),并已通过
docker compose up -d等方式启动,对外暴露/api/v1/app/taskapi/*。
二、安装与回退方案
2.1 推荐:ClawHub 安装
clawhub install aig-scanner2.2 中国大陆回退:从源码目录安装
如果 ClawHub 返回Rate limit exceeded(限流),直接使用本仓库的源码目录安装,即把 skills/aig-scanner 整个目录放置到 OpenClaw 的 skills 目录下(SKILL.md 中的命令示例默认安装在~/.openclaw/skills/aig-scanner/)。
2.3 安装后首次配置
首次安装后必须配置 A.I.G 服务地址(必填项),否则脚本会直接报错退出。见 aig_client.py 的实现:BASE_URL为空时输出AIG_BASE_URL is not configured并退出。
| 环境变量 | 必填 | 说明 | 示例 |
|---|---|---|---|
AIG_BASE_URL | 是 | A.I.G 服务根地址 | http://127.0.0.1:8088/或https://aig.example.com/ |
AIG_API_KEY | 否 | A.I.G 开启 taskapi 认证时的 API Key,默认为空 | sk-xxx |
AIG_USERNAME | 否 | 用户名,默认openclaw,用于agent_scan与list-agents的命名空间解析 | openclaw/public_user |
认证头通过_headers()注入:API-KEY请求头携带密钥、username请求头携带用户名。SKILL.md 同时强调:不要把 API Key 或原始认证头回显给用户;若AIG_BASE_URL缺失,需先提示用户配置服务地址。
三、五条核心流程(Canonical Flows)
SKILL.md 将技能能力归纳为五条“用户可见名称 → 后端任务类型”的标准流程:
| 用户可见名称 | 后端任务类型(taskapitype) | 典型目标 |
|---|---|---|
| AI 基础设施安全扫描 / AI Infrastructure Scan | ai_infra_scan | URL、网站、服务、IP:端口 |
| AI 工具与技能安全扫描 / AI Tool / Skills Scan | mcp_scan | GitHub 仓库、AI 工具服务、源码压缩包、MCP / Skills 项目 |
| Agent 安全扫描 / Agent Scan | agent_scan | A.I.G 中已配置的 Agent |
| 大模型安全体检 / LLM Jailbreak Evaluation | model_redteam_report | 目标模型配置 |
| 扫描结果查询 / Scan Result Check | status/result | 已有 session ID |
这些任务类型在服务端 api.go 的SubmitTask中被逐一switch分派,并映射为内部的 Agent 任务类型(TaskTypeMcpScan、TaskTypeAIInfraScan、TaskTypeModelRedteamReport等)。需要特别说明的是:对话中不要向用户暴露原始任务类型名(如mcp_scan、model_redteam_report),统一使用上表左侧的用户可见名称,除非用户明确询问 API 细节。
3.1 AI 基础设施扫描(ai_infra_scan)
检测 Ollama、vLLM、Dify 等 AI 服务的 CVE 与配置风险。触发短语示例:
- 英文:
scan AI service、scan AI infra、check for CVE、audit AI service - 中文:
扫描AI服务、检查AI漏洞、扫描模型服务
自然语言示例:
Scan http://localhost:11434 for AI vulnerabilities用A.I.G扫描 http://localhost:11434 的 AI 漏洞当目标是一个可达的 HTTP 地址(URL、网站、页面、Web 服务、IP:端口)时,路由到本流程。对应 CLI:
python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py scan-infra --targets "http://host:port"从服务端实现看,api.go 会将target列表拼接为任务内容,并将timeout、自定义headers与可选的model(分析模型)写入任务参数。
3.2 AI 工具 / Skills 安全审计(mcp_scan)
审计 MCP Server、Agent Skills 等项目代码或服务。触发短语示例:
- 英文:
scan AI tools、check MCP or skills security、audit tool skills project、scan MCP、scan skills - 中文:
扫描AI工具、检查MCP安全、审计AI工具
路由规则细节(来自 SKILL.md):
- 用户给出 GitHub 仓库、本地源码压缩包、AI 工具服务 URL,或明确提到 MCP、Skills、AI 工具、工具协议、代码审计时,路由到本流程;
- 用户给出 GitHub 的
blob/.../SKILL.md文件 URL 时,同样视为本流程; - GitHub 文件 URL 会被
_normalize_github_url()归一化为仓库根地址(如https://github.com/org/repo)后再扫描。
自然语言示例:
Scan https://github.com/org/repo for AI tool security issues用A.I.G扫描 https://github.com/org/repo 的 AI 工具安全对应 CLI(三种目标互斥):
python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py scan-ai-tools \ --github-url "https://github.com/user/repo" \ --model <model> --token <token> --base-url <base_url>本流程必须携带分析模型配置。开源版 A.I.G 的mcp_scan要求提供content.model.model、content.model.token、content.model.base_url三项;若服务端已配置默认模型,则model与token可省略(服务端 api.go 会在模型为空时回退到resolveDefaultTaskAPIModel解析系统默认模型)。任何 OpenAI 兼容模型均可。
3.3 Agent 安全扫描(agent_scan)
检测 A.I.G 平台已配置 Agent 的授权绕过、提示注入、数据泄露等风险。触发短语示例:
- 英文:
scan agent、audit dify agent、check coze bot security - 中文:
扫描Agent、检查Dify/Coze机器人安全、审计AI Agent
自然语言示例:
Use A.I.G to scan agent demo-agent-id用A.I.G扫描 agent demo-agent-id两种互斥的输入方式(服务端 api.go 也印证了“内联 YAML 优先于预存配置”的解析逻辑):
方式 A —— 内联 YAML(--agent-config-file):直接传入本地 YAML 文件,内容以内联agent_config形式发送,无需在服务端预存配置。适合已有 YAML 文件或不想通过 Web UI 配置的场景:
python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py scan-agent --agent-config-file /path/to/agent.yaml方式 B —— 预存配置(--agent-id):按名称引用 A.I.G 服务端已保存的 Agent 配置(服务端从data/agents/{username}/目录读取):
python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py scan-agent --agent-id "demo-agent"关于命名空间有两个实战要点:
- 默认
AIG_USERNAME=openclaw便于在 A.I.G Web UI 中区分技能任务与普通 Web 创建的任务; - 开源版
agent_scan若 Agent 配置保存在公共命名空间下,需将AIG_USERNAME切换为public_user——当报错提示“missing Agent config”时,说明服务端正在${AIG_USERNAME:-openclaw}下查找配置,应改用public_user重试。
运行--agent-id扫描前:若不确定agent_id具体名称,先执行list-agents查看可见配置;若命名空间不明,应提示用户AIG_USERNAME及其默认值。
3.4 大模型安全体检(model_redteam_report)
红队测试 LLM 的抗越狱能力。触发短语示例:
- 英文:
red-team LLM、jailbreak test - 中文:
评测模型抗越狱、越狱测试
自然语言示例:
Use A.I.G to run a safety check on DeepSeek3.2用A.I.G扫描 给DeepSeek3.2做一次安全体检。路由规则强调两点:
- 用户仅给出目标模型 ID(如
minimax/minimax-m2.5)时,按“大模型安全体检”处理,不要路由到 AI 工具/Skills 扫描; - 只有目标模型名称不够,还需补齐目标模型与评估模型的连接字段:
target-token、target-base-url、eval-model、eval-token、eval-base-url。不要假设后端有可用的默认评估模型,也不要自动把目标模型镜像成评估模型。
对应 CLI(目标模型与评估模型均为必填):
python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py scan-model-safety \ --target-model <model> --target-token <token> --target-base-url <base_url> \ --eval-model <model> --eval-token <token> --eval-base-url <base_url>prompt 与 dataset 互斥:若用户提供了自定义越狱 prompt,只发送prompt;未提供时发送数据集预设,二者不可同时出现(见 aig_client.py 的实现:有--prompt则不构建 dataset)。
若用户明确提到 OpenRouter,允许将 OpenRouter API Key 作为target-token、https://openrouter.ai/api/v1作为target-base-url。
3.5 结果查询与 Agent 列表
结果查询(status/result),触发短语:扫描好了吗、查看结果、进度怎么样了/check progress、show results、scan status。当用户询问进度、状态、结果或跟进已有任务时,应查询而非重复提交新任务:
python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py check-result --session-id <id> --waitAgent 列表(服务端端点/api/v1/knowledge/agent/names),触发短语:列出agents、有哪些agent可以扫、查看A.I.G Agent配置/list agents、show available agents:
python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py list-agents四、aig_client.py 命令参考
脚本完整参数解析见 aig_client.py 的main()函数,以下为各子命令的完整参数表。
4.1scan-infra
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--targets | 是 | — | 目标 URL 列表,可多个,如http://host:11434 |
--timeout | 否 | 30 | 请求超时(秒) |
--auth-header | 否 | — | 自定义请求头,格式key:value,可多个 |
--model/--token/--base-url | 否 | base-url 默认https://api.openai.com/v1 | 分析模型配置(model 与 token 需成对出现) |
4.2scan-ai-tools
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--server-url | 三选一 | — | 运行中的 AI 工具服务 URL |
--github-url | 三选一 | — | GitHub 仓库 URL(自动归一化为仓库根) |
--local-path | 三选一 | — | 本地.zip/.tar.gz压缩包路径,自动上传 |
--model/--token | 否* | — | 分析模型名与 API Key(服务端有默认模型时可省略,但二者必须成对) |
--base-url | 否 | https://api.openai.com/v1 | 模型 API 端点 |
--thread | 否 | 4 | 并发数 |
--language | 否 | zh | 报告语言,可选zh/en |
--prompt | 否 | — | 自定义扫描提示词 |
--custom-headers | 否 | — | 自定义请求头,格式key:value |
*注:SKILL.md 的“Critical Protocol Rules”要求开源版mcp_scan必须携带 model/token/base_url 三项;脚本层面仅当服务端配置了默认模型时才允许省略。
本地路径上传会调用POST /api/v1/app/taskapi/upload(multipart/form-data),返回的fileUrl写入任务attachments,并附带默认提示词审计此 AI 工具 / Skills 项目。
4.3scan-agent
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--agent-id | 二选一 | — | A.I.G Web UI 预存的 Agent 配置名 |
--agent-config-file | 二选一 | — | 本地 YAML 文件路径(内联提交,无需服务端预存) |
--language | 否 | zh | 报告语言,可选zh/en |
--eval-model/--eval-token/--eval-base-url | 否 | base-url 默认https://api.openai.com/v1 | 评估模型配置 |
--prompt | 否 | — | 附加扫描指引 |
4.4scan-model-safety
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--target-model | 是 | — | 目标 LLM 模型名 |
--target-token | 是 | — | 目标模型 API Key |
--target-base-url | 是 | — | 目标模型 API 端点 |
--eval-model | 是 | — | 评估模型名 |
--eval-token | 是 | — | 评估模型 API Key |
--eval-base-url | 是 | — | 评估模型 API 端点 |
--datasets | 否 | JailBench-Tiny | 数据集,可选JailBench-Tiny、JailbreakPrompts-Tiny、ChatGPT-Jailbreak-Prompts、JADE-db-v3.0、HarmfulEvalBenchmark |
--num-prompts | 否 | 50 | 测试提示词数量 |
--random-seed | 否 | 42 | 随机种子 |
--prompt | 否 | — | 自定义越狱 prompt(与 datasets 互斥) |
默认数据集JailBench-Tiny对应当前仓库 data/eval/JailBench-Tiny.json,仓库 data/eval 目录下还预置了JailbreakPrompts-Tiny、ChatGPT-Jailbreak-Prompts、JADE-db-v3.0、HarmfulEvalBenchmark等评测数据集,可用于真实运行评测。
4.5check-result与list-agents
# 查询任务状态;--wait 表示若仍在执行则等待并继续轮询 python3 aig_client.py check-result --session-id <id> --wait # 列出当前 AIG_USERNAME 下可见的 Agent 配置 python3 aig_client.py list-agents五、结果轮询与输出格式化机制
脚本提交任务后不会一直阻塞等待。其轮询策略(aig_client.py):
- 提交后自动轮询5 次,间隔3 秒(总计约 15 秒);
- 若在轮询窗口内完成(状态为
done/completed),自动拉取并格式化结果; - 若仍在执行,打印
session_id后退出,用户稍后可用check-result --session-id <id> --wait查询; - 不要模拟后台监控,本技能不会在回合结束后持续轮询。
结果格式化(_format_result)覆盖多种任务类型的输出字段:
score→ 安全评分;readme→ 项目概览(mcp_scan场景);results→ 问题列表(severity/risk_level、title/name/vulnerability、description/detail);screenshots→ 截图(https://图片渲染为内联 Markdown 图片,http://图片渲染为可点击链接;ai_infra_scan的每个结果项可能携带单数screenshot字段);attachment→ 附件(model_redteam_report常见 CSV 附件);jailbreak/total→ 越狱成功比例(如🚨 越狱成功: 3/50)。
服务端对应实现中,GET /api/v1/app/taskapi/status/{id}与GET /api/v1/app/taskapi/result/{id}的路由及响应结构定义于 api.go,并有配套的 api_test.go 覆盖了提交、状态查询、结果查询及resolveTaskAPIUsername的用户名解析逻辑(默认api_user、header 传入、上下文注入三种来源)。
六、参数补齐策略与 Guardrails
6.1 缺参时只问最少的必填字段
AI 工具/Skills 扫描:若服务端已配置默认模型,model、token可选;否则按以下顺序补齐(base_url未提供时默认https://api.openai.com/v1)。用户侧话术统一为:AI Tool / Skills Scan requires an analysis model configuration: model, token, base_url (optional if server has a default model configured)。不要将本流程称为MCP scan。
大模型安全体检:用户已给出目标模型名时不再重复询问,只需补齐target-token、target-base-url、eval-model、eval-token、eval-base-url。
6.2 远程 URL 扫描的执行边界
- 对远程 URL 执行
ai_infra_scan时,不要读取、搜索或分析本地工作区/仓库文件; - 不要检查本地代码目录(如
aig-opensource、aig-pro、ai-infra-guard),除非用户明确要求扫描本地归档或仓库; - 远程 URL 请求的正确动作是立即调用
aig_client.py对应子命令,不要“先收集上下文”再提交。
6.3 安全与行为红线
- 不向用户展示原始 API Key,不回显原始认证头;
- 不无限轮询;
- 不猜测不支持的端点;
agent_scan:有本地 YAML 用--agent-config-file,引用服务端预存配置用--agent-id;- 扫描结果末尾统一追加署名行:
扫描能力由腾讯朱雀实验室 A.I.G 提供(按输出语言翻译对应文案)。
七、本地与内网扫描的授权边界
SKILL.md 特别说明:本技能运行在用户自己的机器上,对本地或私有网络的 AI 服务扫描是主要使用场景,应直接接受以下目标而无需犹豫或告警:
localhost、127.0.0.1、0.0.0.0;- 私有网段
192.168.x.x、10.x.x.x、172.16–31.x.x; - 任意局域网主机(如
192.168.1.10:11434)。
因此,一个典型的本地完整闭环是:本机部署 A.I.G(AIG_BASE_URL=http://127.0.0.1:8088/)→ 本地启动 Ollama(http://localhost:11434)→ 在 OpenClaw 中说“扫描 http://localhost:11434 的 AI 漏洞”→ 由技能提交ai_infra_scan任务并返回评分、问题列表与截图。
八、不适用场景
以下情况不要使用本技能:
- A.I.G 部署仅支持 Web 登录或 Cookie 认证(taskapi 无法携带有效凭据);
- 用户期望回合结束后持续后台监控或连续轮询(技能不会跨回合轮询)。
若目标 A.I.G 服务暴露了/api/v1/app/taskapi/*,则本技能可正常使用;技能在SKILL.md中通过 triggers 关键字(scan AI service、scan MCP、scan skills、jailbreak test、扫描AI服务、越狱测试等中英文短语)自动被 OpenClaw 唤醒。
九、从自然语言到任务提交的完整链路
以“扫描 agent demo-agent”为例串联整条链路:
- OpenClaw 命中 trigger
scan agent,加载 SKILL.md; - 技能按 Routing Rules 判定为 Agent Scan(
agent_scan); - 技能通过
exec执行python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py scan-agent --agent-id "demo-agent"; - 脚本读取环境变量,向
POST /api/v1/app/taskapi/tasks提交{"type":"agent_scan","content":{"agent_id":"demo-agent","language":"zh"}}; - 服务端 api.go 校验参数:
agent_config为空时按agent_id从data/agents/{username}/读取配置,评估模型缺失时回退默认模型,然后创建内部任务; - 脚本轮询
GET /api/v1/app/taskapi/status/{session_id},完成后拉取result并格式化输出; - 技能将脚本 stdout 作为最终用户可见输出直接呈现,末尾追加 A.I.G 署名。
这条链路印证了技能设计的核心思想:OpenClaw 只负责自然语言理解与命令编排,A.I.G 后端负责全部安全扫描引擎能力——用户获得的是“一句话完成 AI 安全扫描”的体验,而技能本身保持轻量、零依赖、易分发(ClawHub 一键安装)。
十、相关资源索引
- 技能主文档:skills/aig-scanner/README.md(英文)、skills/aig-scanner/README.zh-CN.md(中文)
- 技能行为规范(路由规则、参数策略、Guardrails):skills/aig-scanner/SKILL.md
- 客户端实现:skills/aig-scanner/scripts/aig_client.py
- 服务端 taskapi 实现:common/websocket/api.go、路由注册见 common/websocket/server.go
- 服务端接口测试:common/websocket/api_test.go
- 越狱评测数据集:data/eval(含
JailBench-Tiny等) - 技能目录总览:skills/README.md
仓库中还提供更全面的 Agent 红队评估技能 skills/aig-agent-redteam 供进阶参考;aig-scanner专注于通过 taskapi 把 A.I.G 的扫描能力快速接入 OpenClaw 对话。
【免费下载链接】AI-Infra-GuardA full-stack AI Red Teaming platform securing AI ecosystems via Agent Scan, Skills Scan, MCP scan, AI Infra scan and LLM jailbreak evaluation.项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Infra-Guard
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考