序言:为什么你的代码安全总在“下次一定”?
在软件开发的世界里,代码安全扫描就像是体检,人人都知道重要,但真正能坚持下来的却寥寥无几。你是否也遇到过这样的场景:
上个月我接手一个老项目,提交 PR 前习惯性跑了下安全扫描,结果傻眼了:20+ 个 Critical 漏洞,30+ 个 High 风险。问之前的同事,答曰“知道啊,但是太多了不知道从哪修起,就先放着了”。
这种“安全债”的积累,往往源于流程的繁琐和重复:手动跑工具、分析报告、编写修复方案、起草 PR……每一步都需要耗费大量心力。当工具报告堆满屏幕,开发者很容易产生“算了,下次再说”的心理。
幸运的是,随着大模型(LLM)技术的飞速发展,我们有了更智能、更高效的自动化解决方案。本文将深入对比AI自动化领域的三大主流“武器”:传统 Prompt、Claude Skills 和 模型上下文协议(MCP),并以代码安全自动化为例,展示如何用它们彻底告别“下次一定”。
AI自动化三大武器:Skills vs. Prompt vs. MCP
在代码安全自动化场景中,我们期望AI能像一个经验丰富的安全工程师一样,接收指令、调用工具、分析结果并给出行动建议。实现这一目标,有三种主要的AI交互模式。
1. 传统 Prompt:一次性的“口头指令”
传统 Prompt 是最基础的交互方式。你将所有指令、背景信息、期望的输出格式,甚至工具的使用方法,一次性全部输入给大模型。
- • 优点: 简单直接,无需任何配置,适用于一次性或临时的任务。
- • 缺点: 重复性高,每次执行相同任务都需要重新输入或复制粘贴长篇指令;上下文冗余,指令本身会占用大量的上下文窗口(Token),增加了成本和延迟;缺乏结构化,指令和逻辑混杂在一起,难以维护和迭代。
2. Claude Skills:固化的“作业指导书”
Claude Skills 是 Anthropic 推出的一种将复杂工作流固化、模块化的机制。你可以将一套完整的指令、工具调用脚本、输出格式等封装在一个 SKILL.md 文件中,并给它一个简洁的名称和描述。
Claude 在会话开始时只会读取 Skills 的名称和描述(几十个 Token),当用户的请求匹配到某个 Skill 时,才会加载完整的指令内容。
- • 核心优势: 持久化和复用。指令只需编写一次,就可以在 Claude.ai、Claude Code、API 等所有支持 Skills 的环境中使用。它通过延迟加载机制,有效节省了上下文 Token,提高了效率。
- • 在安全自动化中的体现: 将“检测项目类型 -> 运行 Bandit/Semgrep -> 解析 JSON 报告 -> 生成 Markdown 报告”这一复杂流程,固化为一个可随时调用的 security-scan 技能。
3. MCP(Model Context Protocol):标准化的“外部协作”
MCP(Model Context Protocol,模型上下文协议)则代表了更宏大的愿景。它是一种标准化协议,旨在为大模型(LLM)与各种外部系统和工具之间建立双向、结构化的连接[1]。
MCP 的目标是让 LLM 能够像操作系统一样,通过统一的接口与 IDE、Git 仓库、数据库、外部 API 等进行高效、安全的交互。
- • 核心优势: 外部集成和标准化。它不局限于模型内部的指令,而是将模型的“手”伸向了外部世界,实现了真正的Agent-to-Tool和Agent-to-Agent协作。
- • 与 Skills 的区别: Skills 是本地化、模型内的指令和脚本执行(在安全沙箱中),而 MCP 是外部化、跨系统的通信协议。在代码安全场景中,MCP 可以让 LLM 直接与公司的内部漏洞管理系统、代码仓库的 API 进行交互,而不仅仅是运行本地扫描脚本。
三者对比一览表
序言:为什么你的代码安全总在“下次一定”?
在软件开发的世界里,代码安全扫描就像是体检,人人都知道重要,但真正能坚持下来的却寥寥无几。你是否也遇到过这样的场景:
上个月我接手一个老项目,提交 PR 前习惯性跑了下安全扫描,结果傻眼了:20+ 个 Critical 漏洞,30+ 个 High 风险。问之前的同事,答曰“知道啊,但是太多了不知道从哪修起,就先放着了”。
这种“安全债”的积累,往往源于流程的繁琐和重复:手动跑工具、分析报告、编写修复方案、起草 PR……每一步都需要耗费大量心力。当工具报告堆满屏幕,开发者很容易产生“算了,下次再说”的心理。
幸运的是,随着大模型(LLM)技术的飞速发展,我们有了更智能、更高效的自动化解决方案。本文将深入对比AI自动化领域的三大主流“武器”:传统 Prompt、Claude Skills 和 模型上下文协议(MCP),并以代码安全自动化为例,展示如何用它们彻底告别“下次一定”。
AI自动化三大武器:Skills vs. Prompt vs. MCP
在代码安全自动化场景中,我们期望AI能像一个经验丰富的安全工程师一样,接收指令、调用工具、分析结果并给出行动建议。实现这一目标,有三种主要的AI交互模式。
1. 传统 Prompt:一次性的“口头指令”
传统 Prompt 是最基础的交互方式。你将所有指令、背景信息、期望的输出格式,甚至工具的使用方法,一次性全部输入给大模型。
- • 优点: 简单直接,无需任何配置,适用于一次性或临时的任务。
- • 缺点: 重复性高,每次执行相同任务都需要重新输入或复制粘贴长篇指令;上下文冗余,指令本身会占用大量的上下文窗口(Token),增加了成本和延迟;缺乏结构化,指令和逻辑混杂在一起,难以维护和迭代。
2. Claude Skills:固化的“作业指导书”
Claude Skills 是 Anthropic 推出的一种将复杂工作流固化、模块化的机制。你可以将一套完整的指令、工具调用脚本、输出格式等封装在一个 SKILL.md 文件中,并给它一个简洁的名称和描述。
Claude 在会话开始时只会读取 Skills 的名称和描述(几十个 Token),当用户的请求匹配到某个 Skill 时,才会加载完整的指令内容。
- • 核心优势: 持久化和复用。指令只需编写一次,就可以在 Claude.ai、Claude Code、API 等所有支持 Skills 的环境中使用。它通过延迟加载机制,有效节省了上下文 Token,提高了效率。
- • 在安全自动化中的体现: 将“检测项目类型 -> 运行 Bandit/Semgrep -> 解析 JSON 报告 -> 生成 Markdown 报告”这一复杂流程,固化为一个可随时调用的 security-scan 技能。
3. MCP(Model Context Protocol):标准化的“外部协作”
MCP(Model Context Protocol,模型上下文协议)则代表了更宏大的愿景。它是一种标准化协议,旨在为大模型(LLM)与各种外部系统和工具之间建立双向、结构化的连接[1]。
MCP 的目标是让 LLM 能够像操作系统一样,通过统一的接口与 IDE、Git 仓库、数据库、外部 API 等进行高效、安全的交互。
- • 核心优势: 外部集成和标准化。它不局限于模型内部的指令,而是将模型的“手”伸向了外部世界,实现了真正的Agent-to-Tool和Agent-to-Agent协作。
- • 与 Skills 的区别: Skills 是本地化、模型内的指令和脚本执行(在安全沙箱中),而 MCP 是外部化、跨系统的通信协议。在代码安全场景中,MCP 可以让 LLM 直接与公司的内部漏洞管理系统、代码仓库的 API 进行交互,而不仅仅是运行本地扫描脚本。
三者对比一览表

AI自动化三大武器概念对比

实战:用 Claude Skills 搭建代码安全自动化流水线
Skills 的出现,让代码安全自动化变得触手可及。它将繁琐的“跑工具、看报告”过程,简化为一句简单的“帮我检查代码安全”。
1. Skills 的工作原理
一个 Skills 的工作流是高度结构化的,确保了每次执行的稳定性和一致性。

Claude Skills 代码安全自动化工作流
2. 创建 Security Scan Skill
我们将“代码安全扫描、报告生成、PR 描述起草”这三个步骤固化为一个 security-scan Skill。
第一步:定义 Skill 结构
Skill 本质上是一个文件夹,包含一个核心文件 SKILL.md 和可选的辅助脚本。
~/.claude/skills/security-scan/
├── SKILL.md # 核心指令和逻辑
└── scripts/
└── scan.sh # 实际执行扫描的脚本
第二步:编写 Skill.md (核心指令)
Skillmd 的 YAML 头定义了 Skill 的触发条件,正文则详细指导 Claude 的行为。
--- name: security-scan description: Run security scans on code repositories and generate vulnerability reports. Use when user asks to check security, scan for vulnerabilities, or needs a security audit. --- # Security Scan Skill ## 你的职责 帮用户执行代码安全扫描,整理漏洞报告,给出修复建议。 ## 工作流程 1. **检测项目类型**:检查是否有 requirements.txt、go.mod 等文件。 2. **运行扫描脚本**:执行 `scripts/scan.sh`,它会根据项目类型运行 Bandit、Semgrep、Trivy 等工具。 3. **解析结果**:读取生成的 JSON 报告,按严重程度分类。 4. **生成报告**:用 Markdown 格式整理结果,包括问题描述、风险和修复建议。 ## 报告格式示例 (节选) ```markdown # 安全扫描报告 ## Critical Issues ### [Bandit] auth.py:45 **问题**:使用了硬编码密码 **风险**:密码可能被攻击者轻易获取 **修复建议**:使用环境变量或密钥管理服务存储密码 ...
PR 描述模板
当用户需要创建 PR 时,使用以下模板:
## Security Fix ... ### 修复内容 - 移除了硬编码的敏感信息 - 修复了 SQL 注入漏洞 ...
**第三步:编写 `scripts/scan.sh` (工具调用)** 这个脚本是 Skills 强大能力的核心,它在 Claude 的安全沙箱中执行,负责调用外部工具。 ```bash #!/bin/bash # ... (此处省略详细脚本内容,详见原始文档) # 脚本功能:检测 Python/Go 项目,调用 Bandit/pip-audit/gosec/Semgrep/Trivy 等工具,并将结果输出为 JSON 报告。 # ...
3. 自动化实战:从“一键扫描”到“智能修复”
通过 Skills,整个流程被极大地简化,但同时保留了人机协作的灵活性,以应对真实世界中的复杂情况。
- 1. 触发增量扫描: 开发者在本地修改了 user_api.py 和 db_utils.py 两个文件,准备提交 PR。他不需要全量扫描,只需在 Claude Code 中输入:“针对我本次修改的文件,跑一下安全扫描”。
- • Skills 内部逻辑: scan.sh 脚本通过 git diff 识别出变更文件,并只对这些文件执行 Semgrep 和 Bandit 的增量扫描。
- 2. AI 智能分析与误报处理: Claude 自动匹配 security-scan Skill,执行扫描并解析报告。
- • 扫描结果: 发现 user_api.py 中存在一个 High 风险的 SQL 注入(Semgrep 报告),以及 tests/test_auth.py 中存在一个 Low 风险的硬编码密码(Bandit 报告)。
- • Claude 的输出: Claude 根据 Skill 中预设的“已知误报列表”规则(例如,忽略测试文件中的硬编码密码),自动过滤了 Low 风险的误报,只聚焦于真正的 High 风险问题。
- • 报告摘要: Claude 输出结构化的报告摘要,重点突出 SQL 注入问题,并给出详细的修复建议(如使用 ORM 或参数化查询)。
- 3. 人机协作修复: 开发者根据 Claude 的建议,在 user_api.py 中将字符串拼接改为参数化查询。
- 4. 二次验证与 PR 起草: 修复完成后,开发者输入:“我已修复,请帮我验证并生成 PR 描述”。
- • 二次验证: Claude 再次对 user_api.py 执行增量扫描,确认 SQL 注入问题已消失。
- • 生成 PR: Claude 自动套用 Skill 中预设的 PR 模板,生成专业的提交信息,内容包括:修复了 High 风险的 SQL 注入问题、影响文件、验证方式(二次扫描通过)等,可以直接用于 Git 提交。
实战总结: 这种流程不再是简单的“工具调用”,而是AI驱动的智能工作流。Skills 负责固化流程、处理工具细节和过滤噪音,开发者只需专注于高价值的修复工作,极大地提高了安全修复的效率和准确性。
进阶思考:Skills 与 MCP 的未来融合
虽然 Skills 和 MCP 在设计理念上有所不同,但它们并非互斥,而是代表了 AI 自动化能力的两个维度:
- • Skills: 专注于本地化、模型内的复杂任务编排和工具调用。它解决了“如何高效、重复地执行一套固定流程”的问题。
- • MCP: 专注于外部化、跨系统的标准化数据和上下文传输。它解决了“如何让大模型安全、高效地与企业级系统集成”的问题。
在未来的代码安全自动化中,我们可以预见两者将深度融合:
- 1. Skills 作为执行单元: 一个高级的 Skill 可以被设计为“执行一次全栈安全审计”。
- 2. MCP 作为连接桥梁: 这个 Skill 不仅在本地沙箱中运行 Semgrep,还会通过 MCP 协议,将扫描结果实时同步到 Jira 缺陷管理系统、企业内部的知识库,甚至触发另一个 Agent(通过 A2A 协议)去通知安全团队。
