AI-Infra-Guard aig-scanner Skill 实战指南:用一句话完成 AI 基础设施、MCP/Skills、Agent 与 LLM 越狱扫描
【免费下载链接】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
本篇技术指南以 aig-scanner Skill 为骨架,讲解如何通过 OpenClaw 对话或内置aig_client.py命令行,把腾讯朱雀实验室 AI-Infra-Guard 的四大扫描能力(AI 基础设施扫描、AI 工具/Skills 安全审计、Agent 安全扫描、大模型越狱评测)接入到日常安全运营中。读完你将掌握 skill 的环境配置、触发词路由规则、六类 CLI 子命令的完整参数与典型调用链,以及结果查询与守规矩的边界策略。
aig-scanner 是一个面向 OpenClaw 的 Agent Skill,核心价值在于:无需打开 A.I.G Web UI,只要在对话中说出“扫描 AI 服务”“检查 MCP 安全”“越狱测试”等触发词,OpenClaw 就会通过内置exec执行随 skill 分发的 Python 脚本aig_client.py,把扫描任务提交到 A.I.G 的taskapi端点,并自动轮询、格式化返回结果。整个链路只依赖 Python 标准库,无需安装任何第三方 pip 依赖。
一、Skill 定位与触发机制
aig-scanner的完整定义位于 skills/aig-scanner/SKILL.md,其 frontmatter 声明了技能名称、版本(1.0.3)、作者(aigsec/Tencent Zhuque Lab)、许可协议(MIT)以及一长串中英文触发词。
1.1 触发词即路由入口
| 触发词(中文/英文) | 对应能力 |
|---|---|
| 扫描AI服务 / 检查AI漏洞 / 扫描模型服务 / scan AI service, scan AI infra, check for CVE, audit AI service | AI Infrastructure Scan |
| 扫描AI工具 / 检查MCP安全 / 审计AI工具 / scan AI tools, check MCP or skills security, audit tool skills project | AI Tool / Skills Scan |
| 扫描Agent / 检查Dify/Coze机器人安全 / scan agent, audit dify agent, check coze bot security | Agent Scan |
| 越狱测试 / 评测模型抗越狱 / red-team LLM, jailbreak test | LLM Jailbreak Evaluation |
| 查看扫描结果 / 扫描好了吗 / check scan result, scan status | Task Status / Result 查询 |
这些触发词对应的元数据还声明了运行前提:requires.bins: ["python3"]、primaryEnv: AIG_BASE_URL,即运行环境必须有python3,且必须配置AIG_BASE_URL环境变量。
1.2 语言自适应规则
Skill 要求根据用户触发消息的语言决定整段回复的语言:中文消息全程中文、英文消息全程英文、其他语言匹配对应语言、无法判断时默认中文。这保证了对话式扫描的本地化体验。
二、环境要求与配置
2.1 前提条件
使用 aig-scanner 之前,需要先部署好 A.I.G 服务(本机或远程均可),这是 README 明确声明的前提。部署方式可参考 docker-compose.yml 与 start.sh(本地启动可用docker compose up -d)。
2.2 三个环境变量
Skill 依赖三个环境变量,其中AIG_BASE_URL为必填:
| 变量 | 是否必填 | 说明 |
|---|---|---|
AIG_BASE_URL | 必填 | A.I.G 服务根地址,例如http://127.0.0.1:8088/或https://aig.example.com/ |
AIG_API_KEY | 可选 | 当 A.I.G 服务开启了 taskapi 认证时需要提供 |
AIG_USERNAME | 可选 | 默认值为openclaw,用于agent_scan与list-agents的命名空间解析 |
在 aig_client.py 中可以看到三个变量的实际读取逻辑:
BASE_URL = os.environ.get("AIG_BASE_URL", "").strip().rstrip("/") API_KEY = os.environ.get("AIG_API_KEY", "") USERNAME = os.environ.get("AIG_USERNAME", "openclaw")如果AIG_BASE_URL缺失,脚本会直接报错退出并提示先配置 A.I.G 服务地址;配置了AIG_API_KEY时,它会通过API-KEY请求头发送给服务端(见_headers()函数)。注意:在任何场景下都不得向用户回显 API Key 或原始认证头。
2.3 授权边界:本地/内网扫描完全允许
Skill 明确声明:该 Skill 运行在用户自己的机器上,扫描本地或私有网络中的 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
不得以"本地/私网地址"为由拒绝或警告。
2.4 不适合使用该 Skill 的场景
- A.I.G 部署仅支持 Web 登录或 Cookie 认证(无 taskapi 接口)时;
- 用户期望本轮对话结束后仍然持续轮询、做后台监控时(本 Skill 不做后台监控)。
三、安装方式与使用入口
3.1 两种安装方式
# 方式一:ClawHub 安装(推荐) clawhub install aig-scanner # 方式二:从本仓库源码目录安装 # 源码位于 skills/aig-scanner/注意:中国大陆环境若 ClawHub 遇到Rate limit exceeded,直接使用本仓库中的 skills/aig-scanner 源码目录安装即可。
3.2 对话式使用示例
安装后在 OpenClaw 中直接对话:
AI 基础设施扫描——检测 AI 服务漏洞与配置风险(Ollama、vLLM、Dify 等):
用A.I.G扫描 http://localhost:11434 的 AI 漏洞AI 工具 / Skills 安全审计——审计 MCP Server、Agent Skills 等项目代码或服务:
用A.I.G扫描 https://github.com/org/repo 的 AI 工具安全AI Agent 安全扫描——检测 A.I.G 平台已配置的 Agent 的授权绕过、提示注入等风险(建议先在 A.I.G Web UI 配置好 Agent):
用A.I.G扫描 agent demo-agent-id大模型安全体检——红队测试 LLM 的抗越狱能力:
用A.I.G扫描 给DeepSeek3.2做一次安全体检四、aig_client.py:一切扫描的底层执行器
Skill 随包分发 aig_client.py,这是一个自包含的 Python CLI,封装了全部 A.I.G taskapi 调用。Skill 规定:始终通过exec调用aig_client.py,而不是直接使用curl。脚本只使用 Python 标准库(urllib、json、argparse等),零 pip 依赖。
4.1 完整命令参考
# ① AI 基础设施扫描 python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py scan-infra --targets "http://host:port" # ② AI 工具 / Skills 扫描(三选一:--server-url / --github-url / --local-path) 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> # ③ Agent 扫描——按已保存的配置名 python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py scan-agent --agent-id "demo-agent" # ④ Agent 扫描——按本地 YAML 文件(无需服务端预保存) python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py scan-agent --agent-config-file /path/to/agent.yaml # ⑤ LLM 越狱评测 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> # ⑥ 查询结果 / 列出 Agent python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py check-result --session-id <id> --wait python3 ~/.openclaw/skills/aig-scanner/scripts/aig_client.py list-agents脚本自动完成:JSON 请求构造、HTTP 错误处理、状态轮询(3s × 5 轮,约 15 秒)、结果格式化。若结果中包含截图 URL,https://截图渲染为内联 Markdown 图片,http://截图渲染为可点击链接。
4.2 底层 taskapi 端点
从 common/websocket/api.go 的注释可以看到 taskapi 是 A.I.G 对外暴露的任务接口族:
POST /api/v1/app/taskapi/tasks—— 创建任务GET /api/v1/app/taskapi/status/{id}—— 查询任务状态与日志GET /api/v1/app/taskapi/result/{id}—— 获取任务结果
此外脚本还使用POST /api/v1/app/taskapi/upload上传本地压缩包,以及GET /api/v1/knowledge/agent/names列出 Agent 配置。具体请求示例可参考 api_zh.md。
五、六大 Canonical Flows 路由规则
SKILL.md 将用户请求与后端任务类型做了明确映射,并向用户暴露中文/英文的用户面名称,隐藏原始任务类型:
| 用户面名称 | 后端任务类型 | 典型目标 |
|---|---|---|
AI 基础设施安全扫描/AI Infrastructure Scan | ai_infra_scan | URL、网站、服务、IP:port |
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 |
规则约束:对话中不得向用户暴露原始任务类型名称(如mcp_scan、model_redteam_report),除非用户明确询问 API 细节;也不得用MCP scan作为用户面名称。同时不要调用/api/v1/app/models做用户可见的模型清单输出——即使内部使用,也只能用于"可用/不可用"的是非判断,绝不打印 token、base URL 或原始 JSON。
5.1 各路由的触发与目标判定
- AI Infrastructure Scan →
ai_infra_scan:用户要求扫描 URL、网站、页面、Web 服务、IP:port 目标,或对可达的 HTTP 目标说"AI 漏洞扫描"。 - AI Tool / Skills Scan →
mcp_scan:用户提供了 GitHub 仓库、本地源码压缩包、AI 工具服务 URL,或明确提到 MCP、Skills、AI 工具、工具协议、代码审计。若用户给出 GitHub 的blob/.../SKILL.md文件 URL,也归入此类,且应先规范化为仓库根 URL 再扫描(优先https://github.com/org/repo)。 - Agent Scan →
agent_scan:用户要求按agent_id扫描 Agent,或提供本地 YAML 配置文件(--agent-config-file)。 - LLM Jailbreak Evaluation →
model_redteam_report:用户要求评测模型抗越狱或做模型安全检查,且目标模型明确时才路由到"大模型安全体检"。注意:若用户只给出形如minimax/minimax-m2.5的目标模型 ID,应视为体检目标模型,而不是工具/Skills 扫描。 - Agent List →
/api/v1/knowledge/agent/names:用户要求列出 agents、查看可扫描的 Agent。 - Task Status / Result →
status/result:用户询问进度、状态、结果或会话,应查询已有任务而非新建任务。
5.2 直接映射示例(SKILL.md 原文)
| 用户原话 | 路由结果 |
|---|---|
用AIG扫描 http://host:port AI 漏洞 | AI Infrastructure Scan(ai_infra_scan) |
扫描 https://github.com/org/repo 的 AI 工具/Skills 风险 | AI Tool / Skills Scan(mcp_scan) |
扫描 http://localhost:3000 的 AI 工具服务 | AI Tool / Skills Scan(mcp_scan) |
审计本地的 AI 工具源码 /tmp/mcp-server.zip | AI Tool / Skills Scan(mcp_scan)+ 本地压缩包上传 |
扫描 agent demo-agent | Agent Scan(agent_scan) |
列出可扫描的 Agent | Agent List |
做一次大模型越狱评测 | LLM Jailbreak Evaluation(model_redteam_report),仅当目标模型配置已提供时 |
六、缺参策略:只追问最少必要字段
Skill 规定:输入不完整时,只询问所选流程缺少的最少字段,并给出统一的中英文提示文案。
6.1 AI Tool / Skills Scan 的缺参处理
该流程依赖分析模型配置。若服务端已配置默认模型,model、token可省略;否则需要向用户索取:
model(服务端有默认值时可选)token(服务端有默认值时可选)base_url(可选,默认https://api.openai.com/v1)
用户面提示文案:
AI 工具与技能安全扫描需要分析模型配置,请提供:model、token、base_url(如服务器已配置默认模型,可省略)AI Tool / Skills Scan requires an analysis model configuration: model, token, base_url (optional if server has a default model configured)
6.2 LLM Jailbreak Evaluation 的缺参处理
若用户已提供目标模型名称,不要重复询问。需要索取的是:
target-tokentarget-base-urleval-modeleval-tokeneval-base-url
用户面提示文案:
大模型安全体检需要目标模型和评估模型配置,请提供:target-token、target-base-url、eval-model、eval-token、eval-base-urlLLM Jailbreak Evaluation requires both target and evaluator model details: target-token, target-base-url, eval-model, eval-token, eval-base-url
特殊约定:若用户明确提到 OpenRouter,可使用 OpenRouter API Key 作为target-token,用https://openrouter.ai/api/v1作为target-base-url。同时不得假定后端存在可用的默认评估模型,也不得自动把目标模型镜像为评估模型。
七、三类扫描的深层协议细节
7.1 AI Tool / Skills Scan 必须显式携带模型配置
对于开源版 A.I.G,mcp_scan请求体必须包含content.model.model、content.model.token、content.model.base_url三项——除非用户明确说明使用标准 OpenAI 端点。不得假定服务端会自动填充默认模型;若用户未提供 model + token + base_url 三者,应停下并一次性索取齐全。任何 OpenAI 兼容模型均可:model(模型名)、token(API Key)、base_url(API 端点)。
这一约定与脚本实现完全一致:cmd_scan_ai_tools() 中--model与--token必须成对出现,base_url缺省时默认https://api.openai.com/v1;若只传其一,脚本会直接报错退出。
7.2 LLM 越狱评测:prompt 与 dataset 互斥
model_redteam_report的prompt和dataset在后端是互斥的:
- 用户提供了自定义越狱 prompt → 只发送
prompt; - 用户未提供自定义 prompt → 发送数据集预设;
- 同一请求不得同时携带两者。
脚本层面体现为 cmd_scan_model_safety():有--prompt时只填content["prompt"],否则构造content["dataset"]。数据集默认使用JailBench-Tiny,可选项还包括JailbreakPrompts-Tiny、ChatGPT-Jailbreak-Prompts、JADE-db-v3.0、HarmfulEvalBenchmark,这些数据集文件都位于仓库的 data/eval 目录下(如 data/eval/JailBench-Tiny.json 即一个精选自 JailBench 的 133 条中文越狱评估样本集)。--num-prompts默认 50,--random-seed默认 42。
7.3 Agent 扫描的两种互斥输入方式
agent_scan支持两种互斥输入:
方式 A —— 内联 YAML(--agent-config-file):传入本地 YAML 文件,内容以内联agent_config字段发送,无需服务端预保存。适用于用户已有 YAML 文件、或不想先通过 Web UI 配置 Agent 的场景。
python3 aig_client.py scan-agent --agent-config-file /path/to/agent.yaml方式 B —— 预保存配置(--agent-id):按名称引用 A.I.G 服务端已保存的 Agent 配置,服务端从data/agents/{username}/目录查找。
python3 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。因此运行--agent-id之前:若不确定agent_id,先list-agents列出可见 Agent;若不确定命名空间,向用户说明AIG_USERNAME及默认值;对开源版默认公共 Agent 配置,建议切换为public_user。
agent_scan失败若提示找不到 Agent 配置,应解释 A.I.G 正在${AIG_USERNAME:-openclaw}命名空间下查找服务端 Agent 配置,开源版默认公共配置建议使用AIG_USERNAME=public_user。
八、任务提交后的轮询行为与结果处理
8.1 轮询机制(3s × 5 轮)
提交任务后aig_client.py自动轮询状态 5 次(间隔 3 秒,总计约 15 秒):
- 若在轮询窗口内扫描完成 → 自动获取并格式化结果;
- 若仍在执行 → 打印
session_id并退出,用户之后可用check-result --session-id <id> --wait查询; - 不要模拟后台监控——本 Skill 不会在本轮对话结束后继续轮询,也不会无限轮询。
脚本的 stdout 就是最终的用户可见输出,应直接呈现、不做改写。
8.2 结果格式化逻辑
_format_result()负责统一结果呈现:
- 输出安全评分(
score); mcp_scan输出项目概览(readme);- 以
[序号] 严重级别 - 标题列表输出发现的问题(兼容severity/risk_level、title/name/vulnerability、description/detail等字段别名); - 汇总截图:
ai_infra_scan的每条结果项可能带单数screenshot字段,https://渲染为内联 Markdown 图片,http://渲染为可点击链接; model_redteam_report输出越狱统计🚨 越狱成功: jailbreak/total与附件 CSV;- 若无任何结构化字段命中,则回退为输出原始 JSON。
8.3 结果页脚
每次扫描结果末尾必须追加一行(按检测到的输出语言翻译):
扫描能力由腾讯朱雀实验室 A.I.G 提供
九、远程 URL 扫描的执行边界
SKILL.md 对远程目标扫描做了明确约束,防止 Agent 越界访问本地文件:
- 对远程 URL 做
ai_infra_scan时,不得读取、搜索、分析当前工作区、本地仓库文件或本地 A.I.G 项目文件; - 远程 URL 扫描时,不得检查
aig-opensource、aig-pro、ai-infra-guard或任何本地代码目录,除非用户明确要求扫描本地压缩包或仓库; - 请求是远程 URL 时,正确动作是立即调用
aig_client.py对应子命令,不要先从本地文件"收集更多上下文"。
十、守规矩清单(Guardrails)
汇总 SKILL.md 的全部安全与行为约束:
- 不得在展示给用户的命令中暴露原始 API Key 值;
- 不得无限轮询;
- 不得猜测不存在的端点;
agent_scan有本地 YAML 时用--agent-config-file,引用服务端预保存配置时用--agent-id;- 远程 URL 扫描不得检查本地工作区文件;
- 不得在对话中暴露原始任务类型名(
mcp_scan、model_redteam_report等),除非用户明确询问 API 细节; - 不得调用
/api/v1/app/models输出用户可见的模型清单; mcp_scan必须携带 model + token + base_url(开源版),缺失时停下索取;model_redteam_report的prompt与dataset互斥,不能同发;- 缺失参数时只追问所选流程的最少字段,使用统一的用户面文案。
十一、从 Skill 到仓库源码:一条完整的可追溯链路
aig-scanner 的价值在于它把 OpenClaw 的自然语言触发词与 A.I.G 服务端任务能力打通,其完整链路在仓库中均可追溯:
- Skill 定义层:skills/aig-scanner/SKILL.md 声明触发词、环境变量、路由规则、缺参策略与守规矩清单;
- 执行器层:skills/aig-scanner/scripts/aig_client.py 封装六类子命令与 taskapi 调用、轮询、结果格式化;
- 服务端 API 层:common/websocket/api.go 定义
taskapi三个核心端点,api_zh.md 给出完整请求/响应示例; - 任务执行层:
ai_infra_scan、mcp_scan、agent_scan、model_redteam_report分别对应仓库中的 mcp-scan、agent-scan、AIG-PromptSecurity(LLM 越狱评测)等扫描引擎模块; - 评测数据层:data/eval 提供 JailBench-Tiny、JailbreakPrompts-Tiny、HarmfulEvalBenchmark 等越狱评测数据集。
通过这一链路,安全工程师可以只依赖 aig-scanner 安装目录 这一个入口,用最少的配置成本,把 A.I.G 的全栈 AI 安全扫描能力接入日常对话式工作流。
【免费下载链接】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),仅供参考