SkillScope:AI Skill 质量体检工具从入门到实战
·
前言
随着 AI Agent 生态的快速发展,越来越多的开发者开始构建自己的 Skill / MCP / Prompt 项目。然而,目前缺乏统一的质量标准来评估这些项目的安全性和可靠性。本文将详细介绍开源工具 SkillScope 的设计理念、核心功能及实战使用方法。
- GitHub 仓库:https://github.com/JuneDylan/SkillScope
- 许可证:Apache-2.0
- Python 版本:3.9+
一、SkillScope 是什么?
SkillScope 是一个专为 AI Agent / Skill / MCP / Prompt 项目设计的质量体检与自动修复工具,核心类比是 “AI Skill 领域的 Lighthouse”。
它从 6 个维度 × 30+ 子维度深度扫描,给出 0-100 的量化评分,并支持安全自动修复。
核心特性一览
| 特性 | 说明 |
|---|---|
| 六维体检 | Prompt 质量 / 安全性 / 可维护性 / 性能 / 正确性 / 兼容性 |
| 45+ 检测规则 | 覆盖 Secrets 泄露、危险函数、Prompt 注入、厂商锁定等 |
| AI Judge | DeepSeek/OpenAI 大模型语义级分析 |
| 自动修复 | 三级安全体系 (Safe / Suggested / Dangerous) |
| Web GUI | Flask + Chart.js 雷达图可视化 |
| 多格式报告 | Console / JSON / SARIF 2.1.0 / HTML |
| CI 集成 | GitHub Actions + SARIF 对接 Code Scanning |
二、安装与快速上手
2.1 安装
# 基础版
pip install skillscope
# 含 AI 增强(需 DEEPSEEK_API_KEY 或 OPENAI_API_KEY)
pip install skillscope[ai]
# 含 Web GUI
pip install skillscope[gui]
# 全部功能
pip install skillscope[all]
2.2 基本使用
# 扫描本地目录
skillscope scan ./my-skill
# 扫描单文件
skillscope scan ./system_prompt.md
# 生成 SARIF 报告
skillscope scan ./my-skill --format sarif --output report.sarif
# 生成 HTML 报告
skillscope scan ./my-skill --format html --output report.html
# 应用安全级别的自动修复
skillscope scan ./my-skill --fix safe --apply-fixes
# 启用 AI Judge
skillscope scan ./my-skill --ai-enabled
# 启动 Web GUI
skillscope gui
三、六维评估体系详解
3.1 维度总览
| 维度 | 标识 | 权重 | 子维度数 | 关键检测项 |
|---|---|---|---|---|
| Prompt 质量 | P | 20% | 4 | Prompt 注入、Token 效率、角色定义清晰度、指令特异性 |
| 安全性 | S | 25% | 7 | 12 种 Secrets、14 种危险函数、CVE 依赖、MCP 权限等 |
| 可维护性 | X | 15% | 5 | README 质量、测试覆盖、版本管理、docstring、圈复杂度 |
| 性能 | F | 15% | 4 | Token 成本估算、循环内 API 调用、同步阻塞、流式输出 |
| 正确性 | C | 15% | 6 | 异常处理、类型注解、幻觉诱导词、输出验证等 |
| 兼容性 | M | 10% | 4 | 7 种厂商锁定 API、协议版本、平台锁定、编码兼容 |
3.2 安全性维度(权重最高 25%)
安全性是 SkillScope 最核心的维度,包含 7 个子维度:
Secrets 泄露检测(12 种模式):
# patterns.py 中定义的检测模式
SECRET_PATTERNS = {
"openai_api_key": {
"pattern": r"sk-[a-zA-Z0-9]{20,}",
"severity": "critical",
},
"aws_access_key": {
"pattern": r"AKIA[A-Z0-9]{16}",
"severity": "critical",
},
# ... 共 12 种
}
危险函数检测(14 种):
| 函数 | 风险 | 安全替代 |
|---|---|---|
eval() |
代码注入 | ast.literal_eval() |
exec() |
任意代码执行 | 重构为函数调用 |
pickle.loads() |
反序列化攻击 | json.loads() |
yaml.load() |
不安全反序列化 | yaml.safe_load() |
subprocess.call() |
命令注入 | subprocess.run(shell=False) |
| … | … | … |
Prompt 注入检测(5 种模式):
# 危险:f-string 拼接用户输入
prompt = f"分析以下内容:{user_input}"
# 安全:使用占位符 + 参数化
prompt = "分析以下内容:{input}"
3.3 Prompt 质量维度
Prompt 质量维度从 4 个子维度评估:
- Prompt 注入风险:检测 f-string / .format() / % 格式化等拼接方式
- Token 效率:估算 Prompt 的 Token 消耗,检测冗余内容
- 角色定义清晰度:检查是否有明确的角色设定和行为边界
- 指令特异性:检测模糊指令(“灵活处理”"根据情况"等)
四、自动修复引擎
4.1 三级安全体系
SkillScope 的修复引擎遵循"安全优先"原则:
class FixSafety(str, Enum):
SAFE = "safe" # 确定性高,无副作用
SUGGESTED = "suggested" # 建议但需确认
DANGEROUS = "dangerous" # 可能改变语义,必须人工审核
4.2 修复示例
Secrets 替换(Safe 级别):
# 修复前
openai_api_key = "sk-abc123def456ghi789jkl012mno345pqr678stu901vwx234yz567"
# 修复后
import os
openai_api_key = os.environ.get("OPENAI_API_KEY", "")
危险函数替换(Suggested 级别):
# 修复前
result = eval(user_data)
# 修复后
import ast
result = ast.literal_eval(user_data)
生成 .gitignore(Safe 级别):
自动生成包含 __pycache__/、.env、*.pyc 等标准条目的 .gitignore 文件。
4.3 使用方式
# 只预览可修复项(不修改文件)
skillscope scan ./my-skill --fix safe
# 应用 safe 级别修复到文件系统
skillscope scan ./my-skill --fix safe --apply-fixes
# 预览 suggested 级别(含 safe)
skillscope scan ./my-skill --fix suggested
五、AI Judge(LLM-as-a-Judge)
5.1 为什么需要 AI Judge?
确定性规则能捕获格式问题和已知模式,但无法理解语义。例如:
- “如果不确定,请编造一个合理的答案” —— 幻觉诱导,但规则难以穷举所有变体
- “请根据用户的需求灵活处理” —— 模糊指令,需要上下文理解
5.2 两个 AI Judge
| AI Judge | 评估内容 |
|---|---|
| PromptQualityJudge | 语义清晰度、指令特异性、注入风险(上下文感知) |
| HallucinationJudge | 幻觉诱导表述、矛盾指令、事实性约束缺失 |
5.3 配置与使用
# 设置 API Key
export DEEPSEEK_API_KEY=sk-xxx
# 扫描时启用
skillscope scan ./my-skill --ai-enabled
5.4 优雅降级
AI Judge 的关键设计是优雅降级:
- API 不可用时自动回退到确定性分析
- 超时控制:默认 30s,可自定义
- 自动重试:失败后最多重试 2 次,指数退避
- 结果标记:AI Judge 发现的问题标记
source: "ai_judge",与确定性结果区分
六、Web GUI 可视化界面
skillscope gui
# 浏览器自动打开 http://127.0.0.1:8501
GUI 功能包括:
- 输入 Skill 路径,一键扫描
- Chart.js 雷达图展示六维评分
- 问题清单按严重级别分组(Critical / Warning / Info)
- 修复预览与一键应用
- 下载 HTML 报告
七、CI/CD 集成
7.1 GitHub Actions
name: SkillScope Audit
on: [push, pull_request]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: pip install skillscope
- run: skillscope scan . --fail-threshold 70 --format sarif --output skillscope.sarif
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: skillscope.sarif
7.2 CI 门禁
# 评分低于 70 分时返回非零退出码
skillscope scan . --fail-threshold 70
7.3 pre-commit hook
repos:
- repo: local
hooks:
- id: skillscope
name: SkillScope Audit
entry: skillscope scan . --fail-threshold 70
language: system
pass_filenames: false
八、配置系统
8.1 生成配置文件
skillscope config --init
生成 skillscope.yaml:
version: "1.0"
preset: general
dimensions:
P:
enabled: true
weight: 0.20
threshold: 70
S:
enabled: true
weight: 0.25
threshold: 80
output_format: console
fail_threshold: 70
parallel: true
max_workers: 4
8.2 三级配置优先级
- YAML 文件:
skillscope.yaml(项目级) - 预设:
presets/open-source/general.yaml(通用默认) - 环境变量:
SKILLSCOPE_*(最高优先级)
export SKILLSCOPE_PRESET=general
export SKILLSCOPE_PARALLEL=true
export SKILLSCOPE_AI_ENABLED=true
九、技术架构
skillscope/
├── core/
│ ├── engine.py # 混合分析引擎(确定性 + AI)
│ ├── models.py # Pydantic v2 数据模型
│ ├── config.py # 三级配置加载
│ ├── loader.py # 并行文件扫描 + Token 估算
│ └── registry.py # 分析器动态注册表
├── analyzers/ # 6 维度分析器
│ ├── prompt.py # Prompt 质量
│ ├── security.py # 安全扫描(AST + 正则)
│ ├── maintainability.py # 可维护性
│ ├── performance.py # 性能
│ ├── correctness.py # 正确性
│ └── compatibility.py # 兼容性
├── ai_judges/ # LLM-as-a-Judge
│ ├── prompt_judge.py # Prompt 质量 AI Judge
│ └── hallucination_judge.py # 幻觉风险 AI Judge
├── fixers/ # 自动修复引擎
│ ├── security_fixer.py # 安全修复器
│ └── prompt_fixer.py # Prompt 修复器
├── reporters/ # 多格式报告
│ ├── console.py # Lighthouse 风格终端输出
│ ├── sarif.py # SARIF 2.1.0
│ └── html_reporter.py # Chart.js 雷达图
└── gui/ # Flask Web GUI
└── app.py
关键设计决策:
- 插件注册表:
registry.auto_discover()动态发现分析器,社区可扩展 - 并行分析:
ThreadPoolExecutor多维度并行,3-5x 提速 - 增量缓存:基于文件哈希,重复扫描秒级完成
- 混合分析:确定性规则为主(快速、可靠),AI Judge 为辅(语义理解)
十、实战案例
案例 1:检测并修复 API Key 泄露
$ skillscope scan ./my-tool --fix safe --apply-fixes
🔴 Critical: Secrets泄露
检测到 OpenAI API Key (main.py:3)
💡 修复: 替换为 os.environ.get("OPENAI_API_KEY", "")
✅ 已应用 1 个 safe 级别补丁
案例 2:检测 Prompt 注入漏洞
$ skillscope scan ./my-prompt-skill
🟠 Warning: Prompt注入
f-string 拼接用户输入 (system_prompt.md:8)
💡 使用参数化模板替代字符串拼接
案例 3:CI 门禁
$ skillscope scan . --fail-threshold 80
Overall Score: 72/100
❌ CI 门禁失败: 评分 72 < 阈值 80
十一、总结
SkillScope 的核心价值:
- 全面:6 维度 × 30+ 子维度,覆盖安全、质量、性能、兼容性
- 可操作:不只是发现问题,还能自动修复(三级安全体系)
- 可集成:SARIF + GitHub Actions + pre-commit,融入开发流程
- 可扩展:插件化架构,社区可自定义维度和规则
- 智能:AI Judge 语义级分析,弥补确定性规则的盲区
GitHub: https://github.com/JuneDylan/SkillScope
欢迎 Star、Fork、贡献规则和预设!
如果觉得有用,请点赞收藏,有问题欢迎评论区讨论。
更多推荐



所有评论(0)