持续学习系统(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 -- 提取可复用模式
在会话中解决了非平凡问题时手动运行,提取值得保存的模式。
提取类型
- 错误解决模式 -- 发生了什么错误?根因是什么?如何修复的?是否可复用?
- 调试技术 -- 非显而易见的调试步骤、有效的工具组合
- 变通方案 -- 库的怪癖、API 限制、版本特定修复
- 项目特定模式 -- 发现的代码库约定、架构决策
输出格式
# [描述性模式名称]
**提取日期:** [日期]
**上下文:** [适用场景简述]
## 问题
[本模式解决什么问题 -- 要具体]
## 解决方案
[模式/技术/变通方案]
## 示例
[代码示例(如适用)]
## 何时使用
[触发条件 -- 什么情况应该激活此技能]
注意事项
- 不要提取平凡的修复(拼写错误、简单语法错误)
- 不要提取一次性问题(特定 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"
重要准则
- 保守创建:仅为明确模式创建本能(3 次以上观察)
- 保持具体:窄触发条件优于宽触发条件
- 追踪证据:始终记录哪些观察导致了该本能
- 尊重隐私:永远不包含实际代码片段,仅包含模式
- 合并相似:如果新本能与现有本能相似,更新而非重复创建
向后兼容
v2 与 v1 完全兼容:
- 现有的
~/.claude/skills/learned/技能仍然有效 - Stop 钩子仍然运行(但现在也为 v2 提供数据)
- 渐进迁移路径:可以并行运行两者
隐私保护
- 观察数据保留在本地机器上
- 仅本能(模式)可以导出
- 不共享实际代码或对话内容
- 您控制导出的内容
基于本能的学习:通过每次观察,教会 Claude 你的模式。