
今天我们把视角拉回来聊一个更贴近日常开发的话题Skill 怎么写才算「工程化」很多人写 Skill 的起点是「能用就行」——把一段 prompt 塞进 SKILL.md放到 skill 目录里AI 能加载就算是写好了。但用不了多久问题就来了文件越来越长改一处怕坏别处想复用某个子流程发现它和其他逻辑绑死了调用外部 API凭证直接写在代码里用户输入稍微「有心」一点AI 就被带偏了。写好 Skill 只是开始。工程化地写 Skill才是让 Skill 真正可靠、可维护、可传承的关键。今天这篇我从四个维度拆解 Skill 工程化怎么模块化拆分、怎么写得更准确、怎么集成外部工具、以及安全底线怎么守住。01 模块化设计什么时候该拆怎么拆先聊一个基础问题一个 Skill 写到什么时候就该拆了我给自己定了四条判断标准踩中任意一条就该动手拆分第一条超过 500 行。这是最直观的信号。一个 SKILL.md 超过 500 行AI 在加载时消耗的上下文窗口就很大加载速度也会受影响。更重要的是维护者自己读起来也吃力——找一段逻辑要在上千行里翻半天。第二条包含多个独立流程。比如一个 Skill 既处理「用户注册」又处理「订单支付」——这两个流程的调用场景完全不同用户注册用不到订单支付的逻辑却要为此付出完整的上下文代价。这种时候拆成register-user和process-payment两个独立子 Skill各自精简。第三条不同部分的改动频率不同。如果你的 Skill 里有一段「错误码对照表」每次业务接口变化都要改另一段是「系统架构说明」半年改不了一次。两部分放在一起每次改错误码都要重新测试整个 Skill 是否受影响。拆开后低频部分稳定不动高频部分独立迭代。第四条某段逻辑可以独立使用。比如 Skill 里有一段「SQL 查询安全检查」逻辑它不依赖 Skill 的其他部分而且别的 Skill 也需要同样的检查。把它拆成独立的sql-safety-check子 Skill一次写好处处复用。主 Skill 子 Skill 的编排模式拆完之后关键问题来了主 Skill 怎么编排子 Skill最推荐的做法是主 Skill 只负责编排流程子 Skill 各自独立按顺序引用 关键节点加检查点。# 主 Skilldata-pipeline## 执行流程1.data-validate -2.data-transform -3.data-load -4.data-report每个子 Skill 是独立的 SKILL.md 文件主 Skill 不包含它们的详细实现只描述调用顺序、输入输出和检查条件。这样做的好处是子 Skill 可以独立测试、独立更新主 Skill 自身的改动也只影响编排逻辑。拆分三原则实际拆分时我总结了三条原则原则一单一职责。每个 Skill 只做一件事做到极致。不要写一个叫user-management的 Skill 既管注册、又管登录、还管权限——这三个是不同的事情。原则二依赖写明。主 Skill 要在开头写明它依赖哪些子 Skill、每个子 Skill 的路径是什么。不要靠「猜测」——AI 需要明确知道去哪儿加载依赖。比如## 依赖关系---原则三子 Skill 可独立使用。这是一个很好的检验标准如果你的子 Skill 离开主 Skill 就无法运行比如依赖主 Skill 里的某个函数或上下文说明拆分不合理。子 Skill 应该有独立的输入输出契约不依赖任何「隐式上下文」。02 进阶写法让 AI 读得准不只是读得懂Skill 写完了AI 加载了但它真的能「准确执行」吗「能读」和「能准确执行」之间差的是一套工程化的写法。能用表格就用表格AI 读表格比读纯文字准确得多。这是我在实践中反复验证过的事实。比如你要描述 API 参数写成段落第一个参数是 name必填字符串类型表示用户名称第二个参数是 age选填整数类型默认值 0…AI 看到这种文字信息获取效率很低。换成表格参数类型必填默认值说明namestring是-用户名称ageint否0用户年龄emailstring是-邮箱地址tagsarray否[]标签列表AI 读表格时每个字段的约束条件被结构化地表达不容易遗漏或混淆。如果你发现 AI 反复在某段文字上犯错第一反应不是改文字描述而是把它改成表格。复杂检查写成脚本有些验证逻辑用自然语言描述会非常冗长且容易产生歧义。比如「检查文件名不能包含特殊字符不能以数字开头长度不能超过 255」——光这三个条件写成文字就很啰嗦。更好的做法是把复杂检查逻辑写成 Python/Shell 脚本Skill 里只描述「执行脚本 X 来验证」并给出执行示例。# 文件名校验脚本importimportdefvalidate_filenamename: strbooliflen255printf错误文件名长度超过255当前{len(name)}returnFalseif0printf错误文件名不能以数字开头returnFalseifr[:/\\|?*]printf错误文件名包含特殊字符returnFalsereturnTrueif__main__ifnot11在 Skill 里只需要写python validate_filename.py 文件名AI 直接执行脚本结果确定、不会产生歧义而且脚本本身也可以单独测试和版本管理。提供多种方案适配不同场景一个好的 Skill 不应该只给一种「理想方案」而是应该给出不同场景下的选项。我通常用三种模式集中式方案一个 Skill 处理全流程适合简单、稳定的场景。优点是结构简单缺点是灵活性低。分散式方案主 Skill 子 Skill适合复杂、频繁变化的场景。优点是灵活、可复用缺点是需要更多文件管理。渐进式方案先用集中式快速上线再根据实际需要逐步拆分成分散式。这是最务实的做法——不是每个 Skill 都值得一开始就设计成微服务架构。标出易错点Skill 里应该有一个专门的「⚠️ 常见陷阱」段落。把你踩过的坑、见过的问题写下来。比如## ⚠️ 常见陷阱1.**不要使用 rm -rf**trash2.**环境变量名区分大小写**DB_HOSTdb_host3.**时区问题**这些看似琐碎的提醒在实际执行中最容易被忽略、造成的影响最大。用你自己的话写不需要正式但要准确。FAQ 写到位和易错点类似FAQ 解决的是「新用户最容易迷惑的问题」。不需要很多5-8 条就够了但要覆盖高频困惑点。格式简洁即可## ❓ FAQ**Q: 为什么子 Skill 加载失败****Q: 如何调试 Skill 执行过程**echo 当前步骤: X03 MCP vs HTTP选择决策树Skill 写到一定程度必然会遇到外部集成的问题。OpenClaw 生态里这个问题的焦点是用 MCP 还是直接用 HTTP 脚本很多人的直觉是「MCP 高级HTTP 低级能用 MCP 就用 MCP」。这个理解不对。两者是不同场景下的不同工具没有绝对的好和坏。区别对比维度MCPHTTP 脚本集成方式通过 MCP Server 连接统一协议直接用 requests/curl 调用复用性一次封装跨平台跨项目复用通常绑定特定 Skill 或项目开发成本需要编写/配置 MCP Server几行 curl/python 搞定调试难度需要排查 Server 连接 协议直接看请求响应简单适用场景需要复用的核心能力一次性或低频调用典型例子企业微信 API、数据库操作某个内部 API 的特定接口选择决策树我用一个简单的决策流程来判断需要调用外部工具/API ├─ 已有 MCP Server 可用 │ └─ 是 → 优先使用 MCP零额外开发成本 │ ├─ 这个能力需要跨项目/跨平台复用 │ └─ 是 → 封装成 MCP Server一次编写处处可用 │ ├─ 只是简单的一次性调用 10 行代码 │ └─ 是 → 直接用 HTTP 脚本快速、直观 │ └─ 两者可以混用吗 └─ 完全可以。比如数据库用 MCP Server 统一管理 某个业务报表的临时查询用 HTTP 直连。混用的实际案例以 OpenClaw 的 Skill 生态为例MCP 管理核心能力企业微信的联系人查询、文档操作、会议管理都封装成了独立的 MCP Server如wecom-contact-lookup、wecom-doc。这些是高频、跨 Skill 共用的能力封装成 MCP Server 后不同 Skill 都可以通过统一的 MCP 协议调用。HTTP 脚本处理临时需求某个 Skill 需要调用一个内部的 Jenkins API 触发构建这个 API 只在这一个场景下使用。没必要为它专门写一个 MCP Server直接在 Skill 里写一个 curl 脚本调用就行。核心原则复用的封装成 MCP临时的一次性用的写脚本。不要为了「高级」而过度工程化。04 安全底线五条硬规矩前面聊的是怎么写得好、跑得准最后这部分聊怎么写得安全。Skill 安全不是可选项是必选项。以下五条是我写 Skill 时死的规矩一条都不能破。规矩一绝不硬编码凭证这是最基础也是最容易被忽视的一条。API Key、数据库密码、Token——所有这些凭证都不能出现在 Skill 文件里。错误示范_token 104_正确示范_token 从环境变量 WECOM__TOKEN 读取。如果环境变量不存在先执行 wecom get-token 获取。环境变量、Secret Manager、或者专门的凭证管理 Skill——不管用哪种方式原则只有一个代码和配置分离配置中的敏感值绝不裸奔。规矩二危险操作加显式确认涉及文件删除、数据库清空、生产环境部署等操作Skill 里必须加确认步骤。## 数据库清理流程python clean_old_records.py --dry-runpython clean_old_records.py --confirm更严格的做法是在脚本层面实现「两次确认」机制——第一次显示影响范围第二次才真正执行。不要在 Skill 里描述为「一键清理」这是坏的工程习惯。规矩三数据库操作先备份对数据库的任何修改操作DELETE、UPDATE、ALTER TABLE都要在操作前执行备份。1.pg_dump -t affected_table backup_YYYYMMDD.sql2.3.备份不是性能开销是安全底线。你永远不知道什么时候需要用上它但当需要的时候你没有代价可能无法估量。规矩四防 Prompt 注入——区分指令与数据这是 AI 编程场景下特有的安全问题。用户提供的数据比如一段代码、一篇文章、一个 URL中可能包含「伪装的指令」试图让 AI 执行不该执行的操作。核心防御策略把指令和数据严格分离。## 用户内容分析防注入1./tmp/user_content.txt2.3.4.在 Skill 层面就做好这种隔离设计比完全依赖模型自身的抗注入能力可靠得多。规矩五安全检查清单每次发布或更新 Skill 前对照这个清单做一次自查所有 API Key / Token / Password 是否通过环境变量读取危险操作是否有显式确认步骤数据库变更操作前是否有备份步骤用户提供的输入是否作为数据而非指令处理是否限制了文件操作的目录范围不要在根目录执行rm外部 URL 访问是否有限制白名单或域名过滤子 Skill 的依赖关系是否明确声明这七条花不了三分钟但它能挡住的坑可能是修复三天都修不完的。总结今天这篇从四个维度拆解了 Skill 工程化核心结论是模块化拆分有明确的判断标准超 500 行、多独立流程、不同改动频率、可独立使用——四条命中一条就该拆。拆完之后主 Skill 编排流程子 Skill 独立执行依赖写明、可独立使用。进阶写法让 AI 读得准而不是光读得懂能用表格就用表格复杂检查写成脚本提供多种方案标出易错点FAQ 到位。MCP 和 HTTP 各有所长已有 MCP Server 优先用高频复用能力封装成 MCP一次性调用直接用 HTTP 脚本。不要过度工程化。安全五条死规矩不硬编码、危险操作确认、数据库先备份、防 Prompt 注入、每次发布前对照清单自查。Skill 工程化的本质其实就是软件工程的基本功迁移到 AI 编程这个新场景里。模块化、可读性、集成设计、安全实践——这些原则一点都不新但它需要被重新连接到一个问题上你写的不是给人看的文档是给 AI 执行的规范。这个认知变了写法自然就变了。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】