强烈推荐收藏AI Skill 机制全解从 CLAUDE.md 到生产级 Skill——原理、边界、对比、实战一次讲透Claude Code 有个神奇的目录叫.claude里面放一个CLAUDE.mdAI 的能力瞬间变强。OpenClaw 更进一步用SKILL.md把一套指令工具知识打包成一个可复用的插件。这篇文章扒开 Skill 机制从文件结构讲到加载机制再对比 MCP Server 和 Function Calling最后给你一个生产级 Skill 的完整写法。一、起源一条 CLAUDE.md 的进化史1.1 最开始往 System Prompt 塞东西System_Prompt 你是 Python 专家。 项目使用 FastAPI SQLAlchemy PostgreSQL。 代码风格类型标注必须完整函数必须有 docstring。 测试用 pytest覆盖率不能低于 80%。 问题很明显System Prompt 越来越长每次请求都得多烧几百 Token。更糟的是——换一个项目这些规则要全部重写。1.2 进化 1CLAUDE.md —— 项目级指令文件Claude Code 引入了.claude/CLAUDE.md# 项目背景 这是一个为 HarmonyOS 开发者提供 AI 辅助的工具。 ## 技术栈 - 后端Python 3.11 FastAPI Milvus - 前端Next.js 14 TypeScript - LLMMiMo API 为主DeepSeek 为备 ## 代码规范 - 所有 API 接口必须有 Pydantic 模型 - 错误处理不能吞异常 - 数据库操作放 service 层router 只做路由Claude Code 在每次对话开始时自动加载这个文件注入到上下文中。你不需要每次解释项目背景。1.3 进化 2SKILL.md —— 可复用的能力包OpenClaw 把 CLAUDE.md 的思想推向下一层Skill 指令怎么用 工具能做什么 知识知道什么一个 Skill 是一个独立的目录包含my-skill/ ├── SKILL.md # 核心指令知识工具声明 ├── scripts/ # 可执行脚本 │ └── deploy.sh └── examples/ # 使用示例 └── usage.md二、原理Skill 到底是什么2.1 三层结构Skill │ ┌─────────────────┼─────────────────┐ ▼ ▼ ▼ 指令层 工具层 知识层 (Instructions) (Tools) (Knowledge) │ │ │ AI 的「人设」 能做什么 知道什么 行为规范 可调用的脚本/API 领域知识/最佳实践2.2 Skill 加载机制# Skill 加载的伪代码classSkillLoader:defload(self,skill_dir:str)-dict:skill{}# 1. 解析 SKILL.mdwithopen(f{skill_dir}/SKILL.md)asf:skill[instructions]f.read()# 2. 发现可执行工具ifos.path.exists(f{skill_dir}/scripts):skill[tools]self._scan_scripts(f{skill_dir}/scripts)# 3. 加载示例和知识ifos.path.exists(f{skill_dir}/examples):skill[examples]self._load_examples(f{skill_dir}/examples)returnskilldefinject(self,skill:dict,system_prompt:str)-str:把 Skill 注入到 System Promptreturnf{system_prompt}## 加载的 Skill:{skill[name]}{skill[instructions]}## 可用工具{self._format_tools(skill[tools])}核心机制Skill 不是一个运行时的插件系统而是在对话开始时把内容注入 System Prompt。这是一种「编译时注入」而不是「运行时加载」。三、Skill vs MCP Server vs Function Calling这是最容易被混淆的地方维度SkillMCP ServerFunction Calling是什么指令 知识 工具声明工具接入协议LLM 的推理能力谁执行AI 按指令自己写代码/调工具你的代码执行工具LLM 输出结构化调用可复用性✅ 跨项目复用✅ 跨 AI 应用复用❌ 每次重新定义运行位置上下文注入独立进程LLM 内部适合领域知识 行为规范外部 API/工具接入单次工具调用关系Skill 可以声明 MCP 工具MCP 给 Skill 提供工具能力MCP 底层的调用格式一个完整的能力体系 Skill指令 知识 ├── 调用 Function Calling让 LLM 自己选工具 └── 声明 MCP Server 连接让外部服务提供工具 └── MCP Server 内部用 Function Calling 格式返回四、实战写一个生产级 Skill4.1 场景CSDN 文章发布 Skill# CSDN Article Publisher Skill ## 触发条件 当用户说「发文章」「发布到 CSDN」「推送到博客」时自动激活。 ## 工作流程 1. 确认文章标题和内容已经准备好 2. 用 CSDN API 保存到草稿箱 3. 返回文章链接供用户预览 4. 用户确认后才正式发布 ## 代码规范 - 使用项目已有的 src/publish/service.py 中的 publish 函数 - 不要重新实现 CSDN API 调用 - 文章内容必须用 Markdown 格式 ## 安全规则 - 发布前必须让用户预览确认 - 不在用户不知情的情况下修改已发布文章 - 用户的 CSDN Cookie 不在日志中打印 ## 示例 用户帮我把这篇文章发到 CSDN AI好的我先确认一下标题和内容... [展示预览] 确认发布吗4.2 Skill 的测试策略importpytestdeftest_skill_triggers_on_keywords():测试 Skill 在正确关键词下激活trigger_phrases[发文章,发布到 CSDN,推送到博客]skillload_skill(csdn-publisher)forphraseintrigger_phrases:assertskill.should_activate(phrase),f应在 {phrase} 时激活deftest_skill_respects_confirm_rule():测试 Skill 遵守发布前确认规则skillload_skill(csdn-publisher)responseskill.execute(发布这篇文章到 CSDN)assert确认inresponse,必须要求用户确认assert预览inresponse.lower()orpreviewinresponse.lower()五、Skill 设计的黄金法则5.1 单一职责# ❌ 一个 Skill 干三件事 ## CSDN GitHub Email Publisher # ✅ 一个 Skill 干一件事 ## CSDN Article Publisher5.2 指令越具体AI 越靠谱# ❌ 模糊 写代码时注意质量 # ✅ 精确 所有函数必须有 type hints返回类型不能省略。如果返回 None 必须写 - None。所有公开函数必须有 docstring包含参数说明和返回值说明。5.3 给例子比给规则有效## 输出格式要求 ✅ 好的回复 标题Python 异步编程入门 标签Python, 异步, asyncio 内容Markdown 格式的文章 ❌ 不好的回复 我来帮你写一篇关于 Python 的文章...没有格式六、总结概念一句话CLAUDE.md给 AI 的项目说明书SKILL.md给 AI 的能力插件包Skill vs MCPSkill 是知识指令MCP 是工具接入协议Skill vs FCSkill 是预设能力FC 是即时工具调用设计原则单一职责 精确指令 给例子 安全边界Skill 的本质把人类专家的最佳实践编码成 AI 能理解的指令。好的 Skill 不是告诉 AI「你是什么」而是告诉 AI「在这种情况下你应该怎么做」。 下一篇《Function Calling 内部原理LLM 怎么「学会」用工具》——从 Special Token 注入到 Tool Choice 内部决策。标签#Skill #ClaudeCode #AI插件 #Agent #MCP #程序员必读
AI Skill机制:从工作流引擎到自动化执行框架
强烈推荐收藏AI Skill 机制全解从 CLAUDE.md 到生产级 Skill——原理、边界、对比、实战一次讲透Claude Code 有个神奇的目录叫.claude里面放一个CLAUDE.mdAI 的能力瞬间变强。OpenClaw 更进一步用SKILL.md把一套指令工具知识打包成一个可复用的插件。这篇文章扒开 Skill 机制从文件结构讲到加载机制再对比 MCP Server 和 Function Calling最后给你一个生产级 Skill 的完整写法。一、起源一条 CLAUDE.md 的进化史1.1 最开始往 System Prompt 塞东西System_Prompt 你是 Python 专家。 项目使用 FastAPI SQLAlchemy PostgreSQL。 代码风格类型标注必须完整函数必须有 docstring。 测试用 pytest覆盖率不能低于 80%。 问题很明显System Prompt 越来越长每次请求都得多烧几百 Token。更糟的是——换一个项目这些规则要全部重写。1.2 进化 1CLAUDE.md —— 项目级指令文件Claude Code 引入了.claude/CLAUDE.md# 项目背景 这是一个为 HarmonyOS 开发者提供 AI 辅助的工具。 ## 技术栈 - 后端Python 3.11 FastAPI Milvus - 前端Next.js 14 TypeScript - LLMMiMo API 为主DeepSeek 为备 ## 代码规范 - 所有 API 接口必须有 Pydantic 模型 - 错误处理不能吞异常 - 数据库操作放 service 层router 只做路由Claude Code 在每次对话开始时自动加载这个文件注入到上下文中。你不需要每次解释项目背景。1.3 进化 2SKILL.md —— 可复用的能力包OpenClaw 把 CLAUDE.md 的思想推向下一层Skill 指令怎么用 工具能做什么 知识知道什么一个 Skill 是一个独立的目录包含my-skill/ ├── SKILL.md # 核心指令知识工具声明 ├── scripts/ # 可执行脚本 │ └── deploy.sh └── examples/ # 使用示例 └── usage.md二、原理Skill 到底是什么2.1 三层结构Skill │ ┌─────────────────┼─────────────────┐ ▼ ▼ ▼ 指令层 工具层 知识层 (Instructions) (Tools) (Knowledge) │ │ │ AI 的「人设」 能做什么 知道什么 行为规范 可调用的脚本/API 领域知识/最佳实践2.2 Skill 加载机制# Skill 加载的伪代码classSkillLoader:defload(self,skill_dir:str)-dict:skill{}# 1. 解析 SKILL.mdwithopen(f{skill_dir}/SKILL.md)asf:skill[instructions]f.read()# 2. 发现可执行工具ifos.path.exists(f{skill_dir}/scripts):skill[tools]self._scan_scripts(f{skill_dir}/scripts)# 3. 加载示例和知识ifos.path.exists(f{skill_dir}/examples):skill[examples]self._load_examples(f{skill_dir}/examples)returnskilldefinject(self,skill:dict,system_prompt:str)-str:把 Skill 注入到 System Promptreturnf{system_prompt}## 加载的 Skill:{skill[name]}{skill[instructions]}## 可用工具{self._format_tools(skill[tools])}核心机制Skill 不是一个运行时的插件系统而是在对话开始时把内容注入 System Prompt。这是一种「编译时注入」而不是「运行时加载」。三、Skill vs MCP Server vs Function Calling这是最容易被混淆的地方维度SkillMCP ServerFunction Calling是什么指令 知识 工具声明工具接入协议LLM 的推理能力谁执行AI 按指令自己写代码/调工具你的代码执行工具LLM 输出结构化调用可复用性✅ 跨项目复用✅ 跨 AI 应用复用❌ 每次重新定义运行位置上下文注入独立进程LLM 内部适合领域知识 行为规范外部 API/工具接入单次工具调用关系Skill 可以声明 MCP 工具MCP 给 Skill 提供工具能力MCP 底层的调用格式一个完整的能力体系 Skill指令 知识 ├── 调用 Function Calling让 LLM 自己选工具 └── 声明 MCP Server 连接让外部服务提供工具 └── MCP Server 内部用 Function Calling 格式返回四、实战写一个生产级 Skill4.1 场景CSDN 文章发布 Skill# CSDN Article Publisher Skill ## 触发条件 当用户说「发文章」「发布到 CSDN」「推送到博客」时自动激活。 ## 工作流程 1. 确认文章标题和内容已经准备好 2. 用 CSDN API 保存到草稿箱 3. 返回文章链接供用户预览 4. 用户确认后才正式发布 ## 代码规范 - 使用项目已有的 src/publish/service.py 中的 publish 函数 - 不要重新实现 CSDN API 调用 - 文章内容必须用 Markdown 格式 ## 安全规则 - 发布前必须让用户预览确认 - 不在用户不知情的情况下修改已发布文章 - 用户的 CSDN Cookie 不在日志中打印 ## 示例 用户帮我把这篇文章发到 CSDN AI好的我先确认一下标题和内容... [展示预览] 确认发布吗4.2 Skill 的测试策略importpytestdeftest_skill_triggers_on_keywords():测试 Skill 在正确关键词下激活trigger_phrases[发文章,发布到 CSDN,推送到博客]skillload_skill(csdn-publisher)forphraseintrigger_phrases:assertskill.should_activate(phrase),f应在 {phrase} 时激活deftest_skill_respects_confirm_rule():测试 Skill 遵守发布前确认规则skillload_skill(csdn-publisher)responseskill.execute(发布这篇文章到 CSDN)assert确认inresponse,必须要求用户确认assert预览inresponse.lower()orpreviewinresponse.lower()五、Skill 设计的黄金法则5.1 单一职责# ❌ 一个 Skill 干三件事 ## CSDN GitHub Email Publisher # ✅ 一个 Skill 干一件事 ## CSDN Article Publisher5.2 指令越具体AI 越靠谱# ❌ 模糊 写代码时注意质量 # ✅ 精确 所有函数必须有 type hints返回类型不能省略。如果返回 None 必须写 - None。所有公开函数必须有 docstring包含参数说明和返回值说明。5.3 给例子比给规则有效## 输出格式要求 ✅ 好的回复 标题Python 异步编程入门 标签Python, 异步, asyncio 内容Markdown 格式的文章 ❌ 不好的回复 我来帮你写一篇关于 Python 的文章...没有格式六、总结概念一句话CLAUDE.md给 AI 的项目说明书SKILL.md给 AI 的能力插件包Skill vs MCPSkill 是知识指令MCP 是工具接入协议Skill vs FCSkill 是预设能力FC 是即时工具调用设计原则单一职责 精确指令 给例子 安全边界Skill 的本质把人类专家的最佳实践编码成 AI 能理解的指令。好的 Skill 不是告诉 AI「你是什么」而是告诉 AI「在这种情况下你应该怎么做」。 下一篇《Function Calling 内部原理LLM 怎么「学会」用工具》——从 Special Token 注入到 Tool Choice 内部决策。标签#Skill #ClaudeCode #AI插件 #Agent #MCP #程序员必读