从指令到闭环:构建AI助手全自动技能生态系统的实践之路
引言
用 Claude Code 一段时间后,你会发现一个尴尬的问题:它的内置能力很强,但总有些场景覆盖不到。每次遇到新领域,要么手动写 Prompt,要么临时上网搜。更难受的是——这次搜到的优质提示词,下次还得重新搜。知识不沉淀,经验不复用。
我花了几个晚上,在 Claude Code 的技能系统之上搭建了一套全自动闭环生态。核心思路很简单:让 AI 助手在遇到自己搞不定的任务时,自动去外部”学习”、自动把学到的东西”打包”成永久技能、自动纳入下一次调度的候选池。
一句话概括这条链路:
指令下发 → 主 Skill 调度 → 本地匹配 → 无匹配则自动拉取 prompts.chat 提示词 → 生成并保存为本地子 Skill → 纳入调度池 → 长期迭代优化
下面详细拆解每一步的设计与实现。
一、架构总览:一个主入口,多重能力池
整个系统分为三层:
1 | ┌──────────────────────────────────────────────┐ |
设计上借鉴了 Python 的 __init__.py 包管理模式——主文件只做导入和分发,具体实现都在子模块里。这种模式的好处是:入口永远只有一个,用户永远不需要记住”该用哪个技能”。
二、调度核心:语义匹配 + 优先级路由
用户的每一个请求,都会经过三个阶段:
2.1 语义分析
首先提取意图和关键词。不做复杂的 NLP,基于关键词命中 + 语义相似就足够:
- 关键词命中率(60分):请求中的关键词命中子Skill注册的匹配词的比例
- 语义相似度(30分):请求意图与子Skill功能描述的语义匹配程度
- 上下文相关性(10分):结合对话历史和当前工作目录
2.2 优先级遍历
按优先级从高到低遍历所有子Skill:
| 优先级 | 类别 | 示例 |
|---|---|---|
| 10 | 核心日常工具 | Hexo博客、Git管理、前端开发、系统工具 |
| 5 | 专项能力 | 网络搜索、数据处理、文案写作 |
| 1 | 通用兜底 | 闲聊、问答、建议 |
这是关键设计点:优先级提前,高频场景优先匹配。写博客的指令来了,先拿 hexo-blog-master 去匹配,不会跑到通用对话那里。
2.3 多Skill协作
复杂任务不局限单个Skill,支持三种协作模式:
- 串行:”写一篇文章并发布” → 先调
writing写内容,再调hexo-blog-master发布,最后git-helper备份 - 并行:”同时检查博客状态和Git状态” →
hexo-blog-master和git-helper并行执行 - 嵌套:子Skill内部可以调用更低优先级的Skill(深度≤3层)
三、核心创新:自动扩库闭环
这是整个系统最核心的部分。传统 AI 助手遇到”不会”的任务时,要么硬着头皮用通用能力凑合,要么告诉用户”我做不到”。闭环机制改变了这一点。
3.1 触发条件
当一轮匹配走完,所有已注册子Skill的匹配度都 < 80 分时,系统判定为”无对应能力”,自动进入闭环。
3.2 外部检索
1 | 告知用户:"本地无匹配能力,正在从 prompts.chat 检索并自动创建新Skill" |
为什么不直接用 Google?因为 prompts.chat 上沉淀的是经过社区验证的结构化提示词,质量比原始搜索结果高得多。筛选这一步至关重要——宁缺毋滥,低质量的Skill比没有Skill更糟糕。
3.3 标准化封装
检索到最优提示词后,按 Claude Code 的 Skill 标准格式封装:
1 | --- |
命名规则遵循”见名知意”原则——比如 Docker运维助手、Python测试工具,用户和管理者一眼就能看懂。
优先级分配逻辑:
- 核心高频(10):编程语言、框架、开发工具等日常高频场景
- 专项中频(5):特定领域工具、运维、测试等
- 低频通用(1):小众工具、一次性任务等
3.4 即刻生效
新Skill创建完成后,立即用它处理当前用户请求。用户感知不到”等待安装”的过程——从触发检索到任务完成,整体体验是连续的。
1 | 新Skill创建完成 |
3.5 长期迭代优化
闭环不止于”创建”,更在于”维护”:
- 沉淀优先:同一个场景出现第二次,直接走本地已沉淀的Skill,不再重复检索
- 质量自检:某个子Skill连续3次执行效果差、匹配度低 → 自动标记为”待优化”
- 反馈驱动升级:用户反馈”这个Skill不行” → 自动重新检索 prompts.chat 替换
- 去重合并:定期扫描注册表,功能重复的Skill合并能力、保留最优版本
这样形成了一个正向循环:用得越多,能力越强,匹配越准。
四、容错体系:三层降级链
没有哪个系统是100%可靠的。为此设计了三层降级:
1 | 调用子Skill |
关键设计:最后一层永远是主Skill自己。这意味着用户的请求永远不会被丢弃——哪怕所有子Skill都挂了,主Skill用自己的通用能力去处理,同时向用户报告完整的错误链。
五、热更新:不停机的技能管理
所有管理操作通过自然语言指令完成,直接修改配置文件:
| 操作 | 指令示例 |
|---|---|
| 新增 | “添加新Skill:Docker助手,功能:容器管理,优先级:10” |
| 删除 | “删除Skill:旧版翻译助手” |
| 修改 | “更新Skill:Git管理,新功能:增加 submodule 支持” |
| 查看 | “查看所有Skill” |
| 调优先级 | “调整优先级:数据处理,新优先级:10” |
| 启停 | “停用Skill:网络搜索助手” / “启用Skill:网络搜索助手” |
停用不等于删除——从调度池中跳过,但保留注册信息,随时可以一键恢复。
每次启动时还会自检:遍历注册表中所有子Skill,检查对应的 SKILL.md 文件是否存在、frontmatter 中的 name 字段是否匹配。不可用的Skill会被标记并跳过。
六、技能发现:不只是自建,还能”借用”
除了自动扩库(从 prompt 生成新Skill),系统还内置了外部技能发现能力——当用户明确想找某个功能时,可以检索 Claude Code 插件生态中已有的技能并安装。
与自动扩库的区别:
| 维度 | 外部技能发现 | 自动扩库 |
|---|---|---|
| 触发 | 用户明确说”帮我找个XX技能” | 匹配度<80时自动触发 |
| 来源 | Claude Code 生态已有插件 | prompts.chat 提示词 |
| 产物 | 安装现成Skill | 从提示词生成全新Skill |
| 自动化 | 按需手动 | 全自动 |
两条路径互补:自动扩库解决”没有能力”的问题,外部发现解决”想用现成的”的问题。
七、边界控制:什么能做,什么不能做
自动扩库意味着系统会”自己生长”,但这需要明确的边界:
- 单次限一:一次任务只创建1个新Skill,不批量生成。避免一次”失控”污染整个注册表
- 领域限定:仅检索编程、开发、运维、写作、数据、博客、工具类内容。娱乐、违规类一概过滤
- 质量门禁:低评分提示词直接拒绝,不为了”填坑”降低标准
- 永久保存:所有新Skill写入本地
skills/目录,重启不丢失
这些限制看起来很保守,但正是这种保守让系统可以放心地自动化。没有边界的自动化是灾难。
八、实战走查:一次完整的闭环
假设用户说了一句:”帮我把这个 Docker 容器日志接入 Grafana 做监控面板”。
第一轮——本地匹配:
系统遍历注册表:Hexo博客?不匹配。Git管理?不匹配。前端开发?不匹配…所有子Skill匹配度都低于80。
第二轮——自动扩库:
- 告知用户:
【本地无匹配能力,正在从 prompts.chat 检索】 - 调用 prompts.chat 插件,搜索 “Docker Grafana 监控 日志”
- 筛选到一条评分9.2的提示词,主题是”DevOps监控仪表盘搭建”
- 封装为
DevOps监控助手,优先级设为5(专项中频) - 写入
skills/devops-monitoring/SKILL.md - 录入子Skill注册表
第三轮——当场执行:
新创建的 DevOps监控助手 立即被调用,按提示词中的步骤指导用户完成 Grafana 数据源配置、面板创建、日志查询等操作。
第四轮——后续复用:
三天后用户又问了一个 Grafana 相关的问题。这次系统直接命中 DevOps监控助手,匹配度 92,不再触发检索。用户感受到的只是”AI 助手记得上次怎么做的”。
九、设计理念总结
回头看整个系统,有几个原则贯穿始终:
1. 入口唯一,路由透明。 用户永远只面对一个入口,不关心背后的调度逻辑。这是最好的用户体验——你不需要知道有多少个齿轮在转,只需要知道方向盘在你手里。
2. 能力自生长,但不失控。 自动扩库让系统从”静态工具”变成”活的生态”。但每次只增加一个Skill、严格的领域过滤、质量门禁——这些约束保证了生长是有序的。
3. 沉淀 > 搜索。 每次都上网搜是低效的。第一次搜完变成本地Skill,第二次直接复用。知识资产的积累是复利效应。
4. 优雅降级,永不丢失请求。 三层降级链保证了一个原则:用户说了话,就一定有人回应。最差的情况是主Skill自己兜底,同时把问题记录下来。
5. 做减法比做加法更需要勇气。 去重合并、质量自检、反馈驱动替换——系统不仅在生长,也在新陈代谢。不健康的Skill会被自动淘汰。
结语
这套系统从 v1.0 的简单调度,到 v2.0 的模块化架构,再到 v3.0 的自动扩库闭环,每一步都在往”更少的用户操作、更多的自动化”方向走。
最终目标是:你只需要描述你想做什么,系统自己想办法去做——做不了的,自己去学,学完再做。 这才是 AI 助手该有的样子。
如果你也在用 Claude Code,又在折腾自己的技能体系,希望这篇文章能给你一些启发。欢迎交流讨论。