教 Claude Code 自动学习并构建其专属技能库

作者
  • avatar
    姓名
    Nino
    职业
    Senior Tech Editor

在上一篇文章中,我们讨论了将 Claude Code 的内存划分为四个层级的架构。作为后续,本文将深入探讨一个更具进化的设定:一个让 Claude Code 能够自主发现“可复用规程”并随时间推移不断积累技能的自我复制环境。

在运行该系统几个月后,我的 ~/.claude/skills/auto/ 目录下已经拥有了 64 个自动生成的技能。这些技能涵盖了从复杂的调试步骤到特定框架的配置优化,极大地提升了开发效率。为了支撑这种高频率的自动化交互,稳定且低延迟的 API 接入至关重要,这也是我选择 n1n.ai 作为底层支撑的原因。

核心痛点:LLM 会话的“健忘症”

Claude Code 虽然强大,但在跨会话工作时往往会忘记“上次是怎么解决这个问题的”。无论是修复 launchd 的 exit 78 错误,还是使用 png-to-ico 制作图标的特定参数,亦或是 Next.js 中缩减 RSC 负载的具体步骤——这些本应解决一次就记住的规程,往往在每次新会话中都要从头推导。

虽然我们可以手动编写 CLAUDE.md,但这种“谁发现谁记录”的模式很难长期坚持。因此,我决定将这项工作交给 Claude 自己。通过 n1n.ai 提供的稳定 API 链路,我们可以构建一个自动化的“捕获与提炼”机制。

双层技能生成架构设计

为了平衡实时响应和长期维护的质量,我将技能生成分为两个层级:

层级触发时机成本执行主体
会话内生成 (Tier 1)工作期间随时触发免费/实时Claude 本身(遵循 CLAUDE.md 指令)
夜间批处理 (Tier 2)每日凌晨 3:30消耗 Max 配额skill-harvest.sh (headless 模式)

第一层:会话内的即时响应

CLAUDE.md 中,我加入了一段关于“技能自我生成”的指令。其核心逻辑在于:发现价值,但严禁乱造。我们通过四个明确的触发器来限制生成行为:

  1. 完成了一个需要 > 5 次工具调用的非自明任务。
  2. 在遇到死胡同或错误后,找到了行之有效的回避方案。
  3. 用户对你的方法进行了修正(为了避免重复同样的错误)。
  4. 发现了可复用的命令序列或工作流。

如果不设置这些限制,Claude 会把每一行代码都变成一个“技能”,导致技能库迅速充满噪音。

第二层:夜间自动收割机

有些技能在会话中可能被遗漏,因此需要 skill-harvest.sh 脚本在后台进行“扫尾”。其工作流程如下:

  1. 读取水印:查看 .harvest-watermark 记录的上一次处理位置。
  2. 提取差异:从 raw/conversations/*.md 提取自上次以来的对话增量。
  3. 模式识别:利用 claude -p(无头模式)分析日志,仅采纳出现频率 > 5 次的模式。在处理这种大规模文本分析时,n1n.ai 的高并发处理能力表现优异。
  4. 去重校验:根据 kebab-case 命名与现有的 64 个技能进行比对。
  5. 结构化输出:生成包含 Frontmatter、规程(Procedure)、陷阱(Pitfalls)和验证(Verification)三个部分的 SKILL.md 文件。

命名空间隔离与生命周期管理

自动生成的技能不应与手写技能混在一起。我将它们存放在 ~/.claude/skills/auto/ 下。这样做有两个好处:

  • 防止误删npx skills update -g 只管理 lock 文件注册的技能,存放在 auto/ 下的技能不会被日常更新抹除。
  • 精准治理:后续的清理脚本(Curator)只针对 author: auto 的文件生效。

技能清理员 (The Curator)

为了防止技能库“腐烂”,我设置了每周运行一次的 skill-curate.sh

  • 自动降级:30 天未被调用的技能,状态改为 stale
  • 自动归档:90 天未调用的技能,移动至 .archive/(不删除,可恢复)。
  • 合并建议:如果发现两个技能描述高度相似,会在 .curator-proposals.md 中生成合并建议,由人工最终裁定。

运行数据观察:生成曲线的奥秘

观察 created: 日期的分布,我发现了一个有趣的现象:在系统引入的前三天(5/28–5/30),系统爆发式地生成了 28 个技能。这符合直觉——那些长期积累在对话中但未被“语言化”的规程在初期被集中释放。随后,生成速度降至每天 1 个左右。

这种“先爆发后平稳”的曲线证明了设计的有效性:它既能快速补齐历史欠账,又不会在后期因为过度生成而导致系统臃肿。

避坑指南与专家提示

  1. Token 瓶颈:在运行无头收割任务时,由于系统提示词(System Prompt)非常长,务必设置 MAX_THINKING_TOKENS=10000。如果需要处理极长上下文的日志,建议通过 n1n.ai 调用 Claude 3.5 Sonnet 等长上下文模型。
  2. 睡眠问题launchd 默认在 Mac 睡眠时不会唤醒任务。建议使用 pmset repeat wakeorrt 设置定时唤醒,确保凌晨 3:30 的任务准时执行。
  3. 模糊去重:目前仅靠 kebab-name 去重是不够的。进阶方案是使用 Embedding 对技能描述进行相似度计算,这可以进一步减少重复技能的产生。
  4. 精简配置:无头模式启动时会加载所有 MCP 服务,这会导致启动变慢。建议为收割脚本准备一份独立的、精简版的配置文件。

总结

通过将技能生成分为“会话内实时捕获”和“夜间异步提炼”,我们为 Claude Code 构建了一个能够自我进化的“大脑”。这不仅减少了重复劳动,更让 AI 真正成为了一个理解你工作习惯的长期合伙人。在构建此类复杂代理系统时,选择像 n1n.ai 这样稳定且功能丰富的 API 平台,是确保系统长期可靠运行的基石。

n1n.ai 获取免费 API 密钥。