持续学习系统(Continuous Learning)

高级 Advanced 流程型 Process ⚡ Claude Code 专属 ⚡ Claude Code Optimized
10 min read · 509 lines

从会话中自动提取模式并保存为可复用技能

持续学习系统(Continuous Learning)

概述

持续学习系统是一套让 Claude Code 能从会话中自动提取可复用模式并保存为技能的机制。v1 版本通过 Stop 钩子在会话结束时批量分析;v2 版本引入"本能"(Instinct)架构,通过 PreToolUse/PostToolUse 钩子实现 100% 可靠的实时观察,并支持置信度评分、演化和跨用户共享。

---|------| | error_resolution | 特定错误的解决方式 | | user_corrections | 用户纠正行为中的模式 | | workarounds | 框架/库的变通方案 | | debugging_techniques | 有效的调试方法 | | project_specific | 项目特定的约定 |

四、钩子配置

~/.claude/settings.json 中添加:

{
  "hooks": {
    "Stop": [{
      "matcher": "*",
      "hooks": [{
        "type": "command",
        "command": "~/.claude/skills/continuous-learning/evaluate-session.sh"
      }]
    }]
  }
}

五、为什么选择 Stop 钩子?

  • 轻量级:仅在会话结束时运行一次
  • 非阻塞:不会为每条消息增加延迟
  • 完整上下文:可以访问完整的会话记录

第二部分:持续学习 v2 -- 基于本能的架构

一、v1 与 v2 对比

特性 v1 v2
观察方式 Stop 钩子(会话结束) PreToolUse/PostToolUse(100% 可靠)
分析方式 主上下文 后台代理(Haiku)
粒度 完整技能 原子级"本能"(Instinct)
置信度 0.3-0.9 加权
演化路径 直接到技能 本能 -> 聚类 -> 技能/命令/代理
共享能力 导出/导入本能

二、本能模型

本能(Instinct)是一个小型的已学习行为单元:

---
id: prefer-functional-style
trigger: "when writing new functions"
confidence: 0.7
domain: "code-style"
source: "session-observation"
---

# 偏好函数式风格

## 行动
在适当的情况下使用函数式模式而非类。

## 证据
- 观察到 5 次函数式模式偏好
- 用户于 2025-01-15 将基于类的方法纠正为函数式

本能的属性:

  • 原子性 -- 一个触发条件,一个行动
  • 置信度加权 -- 0.3 = 试探性,0.9 = 几乎确定
  • 领域标签 -- 代码风格、测试、Git、调试、工作流等
  • 证据支持 -- 追踪哪些观察创建了它

三、工作流程

会话活动
      |
      | 钩子捕获提示 + 工具使用(100% 可靠)
      v
+---------------------------------------------+
|         observations.jsonl                   |
|   (提示、工具调用、结果)                    |
+---------------------------------------------+
      |
      | 观察者代理读取(后台,Haiku)
      v
+---------------------------------------------+
|          模式检测                             |
|   - 用户纠正 -> 本能                         |
|   - 错误解决 -> 本能                         |
|   - 重复工作流 -> 本能                       |
+---------------------------------------------+
      |
      | 创建/更新
      v
+---------------------------------------------+
|         instincts/personal/                  |
|   - prefer-functional.md (0.7)              |
|   - always-test-first.md (0.9)              |
|   - use-zod-validation.md (0.6)             |
+---------------------------------------------+
      |
      | /evolve 聚类
      v
+---------------------------------------------+
|              evolved/                        |
|   - commands/new-feature.md                 |
|   - skills/testing-workflow.md              |
|   - agents/refactor-specialist.md           |
+---------------------------------------------+

四、快速开始

4.1 启用观察钩子

~/.claude/settings.json 中添加:

作为插件安装(推荐):

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "*",
      "hooks": [{
        "type": "command",
        "command": "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh pre"
      }]
    }],
    "PostToolUse": [{
      "matcher": "*",
      "hooks": [{
        "type": "command",
        "command": "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh post"
      }]
    }]
  }
}

手动安装~/.claude/skills

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "*",
      "hooks": [{
        "type": "command",
        "command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh pre"
      }]
    }],
    "PostToolUse": [{
      "matcher": "*",
      "hooks": [{
        "type": "command",
        "command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh post"
      }]
    }]
  }
}

4.2 初始化目录结构

mkdir -p ~/.claude/homunculus/{instincts/{personal,inherited},evolved/{agents,skills,commands}}
touch ~/.claude/homunculus/observations.jsonl

4.3 使用本能命令

/instinct-status     # 显示已学习的本能及置信度分数
/evolve              # 将相关本能聚类为技能/命令
/instinct-export     # 导出本能用于共享
/instinct-import     # 从他人导入本能

五、置信度评分

置信度随时间演变:

分数 含义 行为
0.3 试探性 建议但不强制
0.5 中等 在相关时应用
0.7 自动批准应用
0.9 几乎确定 核心行为

置信度提升条件:

  • 模式被反复观察到
  • 用户没有纠正建议的行为
  • 来自其他来源的类似本能表示赞同

置信度降低条件:

  • 用户明确纠正了该行为
  • 长时间未观察到该模式
  • 出现矛盾证据

初始置信度计算

观察次数 初始置信度
1-2 次 0.3(试探性)
3-5 次 0.5(中等)
6-10 次 0.7(强)
11+ 次 0.85(非常强)

置信度调整规则

  • 每次确认观察:+0.05
  • 每次矛盾观察:-0.1
  • 每周无观察(衰减):-0.02

六、为什么用钩子而非技能进行观察?

"v1 依赖技能来观察。技能是概率性的 -- 根据 Claude 的判断,约 50-80% 的时间会触发。v2 使用钩子进行观察(100% 可靠),本能作为已学习行为的原子单位。"

钩子 100% 确定性地触发,这意味着:

  • 每次工具调用都被观察
  • 没有模式被遗漏
  • 学习是全面的

七、文件结构

~/.claude/homunculus/
+-- identity.json           # 你的档案、技术水平
+-- observations.jsonl      # 当前会话观察
+-- observations.archive/   # 已处理的观察
+-- instincts/
|   +-- personal/           # 自动学习的本能
|   +-- inherited/          # 从他人导入的本能
+-- evolved/
    +-- agents/             # 生成的专家代理
    +-- skills/             # 生成的技能
    +-- commands/           # 生成的命令

第三部分:相关命令

/learn -- 提取可复用模式

在会话中解决了非平凡问题时手动运行,提取值得保存的模式。

提取类型

  1. 错误解决模式 -- 发生了什么错误?根因是什么?如何修复的?是否可复用?
  2. 调试技术 -- 非显而易见的调试步骤、有效的工具组合
  3. 变通方案 -- 库的怪癖、API 限制、版本特定修复
  4. 项目特定模式 -- 发现的代码库约定、架构决策

输出格式

# [描述性模式名称]

**提取日期:** [日期]
**上下文:** [适用场景简述]

## 问题
[本模式解决什么问题 -- 要具体]

## 解决方案
[模式/技术/变通方案]

## 示例
[代码示例(如适用)]

## 何时使用
[触发条件 -- 什么情况应该激活此技能]

注意事项

  • 不要提取平凡的修复(拼写错误、简单语法错误)
  • 不要提取一次性问题(特定 API 故障等)
  • 聚焦于在未来会话中能节省时间的模式
  • 保持技能聚焦 -- 每个技能一个模式

/learn-eval -- 带质量评估的提取

扩展 /learn,在写入任何技能文件之前增加质量门禁和保存位置决策。

保存位置决策

  • 全局~/.claude/skills/learned/):跨 2 个以上项目通用的模式(Bash 兼容性、LLM API 行为、调试技术等)
  • 项目级.claude/skills/learned/):项目特定的知识(特定配置文件的怪癖、项目特定架构决策等)
  • 拿不准时选择全局(从全局迁移到项目级比反方向容易)

质量评估维度

维度 1 分 3 分 5 分
具体性 仅有抽象原则,无代码示例 有代表性代码示例 丰富示例覆盖所有用法
可操作性 不清楚该做什么 主要步骤可理解 立即可操作,覆盖边界情况
范围适配 太宽泛或太狭窄 基本合适,有边界模糊 名称、触发条件和内容完美对齐
非冗余性 与另一个技能几乎相同 有些重叠但有独特视角 完全独特的价值
覆盖度 仅覆盖目标任务的一小部分 主要情况覆盖,常见变体缺失 主要情况、边界情况和陷阱全覆盖
  • 对每个维度打 1-5 分
  • 如果任何维度得分 1-2,改进草稿并重新打分,直到所有维度 >= 3
  • 向用户展示评分表和最终草稿

/instinct-status -- 显示本能状态

显示所有已学习的本能及置信度分数,按领域分组。

Instinct 状态
==================

## 代码风格 (4 个本能)

### prefer-functional-style
触发条件: 编写新函数时
行动: 使用函数式模式而非类
置信度: ████████░░ 80%
来源: session-observation | 最后更新: 2025-01-22

## 测试 (2 个本能)

### test-first-workflow
触发条件: 添加新功能时
行动: 先写测试,再实现
置信度: █████████░ 90%
来源: session-observation

---
总计: 9 个本能 (4 个个人, 5 个继承)
观察者: 运行中 (最后分析: 5 分钟前)

/instinct-export -- 导出本能

导出本能为可共享格式,适用于:团队共享、迁移到新机器、贡献项目约定。

/instinct-export                           # 导出所有个人本能
/instinct-export --domain testing          # 仅导出测试领域本能
/instinct-export --min-confidence 0.7      # 仅导出高置信度本能

隐私保护

导出包含:触发模式、行动、置信度分数、领域、观察计数

导出不包含:实际代码片段、文件路径、会话记录、个人标识符

/instinct-import -- 导入本能

从队友、Skill Creator 或其他来源导入本能。

/instinct-import team-instincts.yaml
/instinct-import https://github.com/org/repo/instincts.yaml
/instinct-import --from-skill-creator acme/webapp

合并策略

  • 重复项:高置信度优先,合并证据,更新时间戳
  • 冲突项:默认跳过,标记待审查,由用户手动决定

/evolve -- 演化本能

分析本能并将相关本能聚类为高层结构:

演化目标 条件
命令(Command) 本能描述用户主动调用的操作
技能(Skill) 本能描述自动触发的行为
代理(Agent) 本能描述复杂的多步骤流程
/evolve                    # 分析所有本能并建议演化
/evolve --domain testing   # 仅演化测试领域的本能
/evolve --dry-run          # 预览不实际创建
/evolve --threshold 5      # 需要 5 个以上相关本能才聚类

第四部分:观察者代理(Observer Agent)

后台运行的代理,使用 Haiku 模型分析会话观察以检测模式并创建本能。

运行条件

  • 会话活动超过 20 次工具调用后
  • 用户运行 /analyze-patterns
  • 按可配置间隔定时运行(默认 5 分钟)

模式检测

1. 用户纠正

当用户的后续消息纠正了 Claude 的先前操作:

  • "不,用 X 代替 Y"
  • "实际上,我的意思是..."
  • 立即撤销/重做模式

-> 创建本能:"做 X 时,优先选择 Y"

2. 错误解决

当错误之后跟随修复:

  • 工具输出包含错误
  • 接下来的几次工具调用修复了它

-> 创建本能:"遇到错误 X 时,尝试 Y"

3. 重复工作流

当相同的工具序列被多次使用:

  • 相同的工具序列和类似的输入
  • 总是一起变更的文件模式

-> 创建工作流本能:"做 X 时,按 Y、Z、W 步骤操作"

4. 工具偏好

当某些工具被一致地偏好使用:

  • 总是在 Edit 前使用 Grep
  • 优先使用 Read 而非 Bash cat

-> 创建本能:"需要 X 时,使用工具 Y"

重要准则

  1. 保守创建:仅为明确模式创建本能(3 次以上观察)
  2. 保持具体:窄触发条件优于宽触发条件
  3. 追踪证据:始终记录哪些观察导致了该本能
  4. 尊重隐私:永远不包含实际代码片段,仅包含模式
  5. 合并相似:如果新本能与现有本能相似,更新而非重复创建

向后兼容

v2 与 v1 完全兼容:

  • 现有的 ~/.claude/skills/learned/ 技能仍然有效
  • Stop 钩子仍然运行(但现在也为 v2 提供数据)
  • 渐进迁移路径:可以并行运行两者

隐私保护

  • 观察数据保留在本地机器上
  • 本能(模式)可以导出
  • 不共享实际代码或对话内容
  • 您控制导出的内容

基于本能的学习:通过每次观察,教会 Claude 你的模式。

相关技能 Related Skills