第 25 课:持续学习 — Instinct 提取与演化

所属阶段:第五阶段「进阶能力」(第 23-27 课) 前置条件:第 9 课(Skill 编写)、第 10 课(Hook) 本课收获:从会话中提取一个 Instinct,理解持续学习系统的完整架构


一、本课概述

到目前为止,ECC 的所有知识(Skill、Rule、Agent)都是预先定义好的。但有一类知识无法预先定义 --- 你个人的编码习惯、项目的特殊约定、团队的隐含规范。

ECC 的持续学习系统解决的就是这个问题:

  1. Instinct 模型 --- 什么是 Instinct,它和 Skill 有什么区别
  2. 记忆三件套 --- 为什么记忆不会自动保存,需要哪三个组件
  3. 学习时机 --- 学习发生在 Stop Hook 中(而不是 UserPromptSubmit)
  4. 命令链 --- 从提取到演化的完整命令
  5. v1 vs v2 差异 --- 持续学习系统的演进

这是 ECC 中最有"AI 味道"的一个系统 --- 让你的 AI 助手真正地"学习"。


二、Instinct 模型

2.1 什么是 Instinct

Instinct(本能)是持续学习系统的原子单元。每个 Instinct 代表一个从会话中观察到的行为模式:

yaml 复制代码
---
id: prefer-functional-style
trigger: "when writing new functions"
confidence: 0.7
domain: "code-style"
source: "session-observation"
scope: project
project_id: "a1b2c3d4e5f6"
project_name: "my-react-app"
---

# Prefer Functional Style

## Action
Use functional patterns over classes when appropriate.

## Evidence
- Observed 5 instances of functional pattern preference
- User corrected class-based approach to functional on 2025-01-15

2.2 Instinct 的五个属性

属性 说明 示例
原子性 一个触发条件,一个动作 "写函数时 → 用函数式风格"
置信度 0.3-0.9 的权重 0.3=试探性,0.9=近乎确定
领域标签 所属领域分类 code-style, testing, git, debugging
证据链 创建该 Instinct 的观察记录 "观察到 5 次偏好函数式"
作用域 project(默认)或 global React 模式仅限 React 项目

2.3 Instinct vs Skill vs Rule

维度 Instinct Skill Rule
来源 自动从会话中提取 人工编写或从 Instinct 演化 人工编写
粒度 原子级(一个动作) 完整工作流 约束条件
置信度 有(0.3-0.9) 无(默认可信) 无(强制执行)
生命周期 可能被丢弃 持久存在 持久存在
作用域 项目级或全局 全局 通用/语言特定

类比

  • Instinct = 你的直觉("我觉得这样写更好") --- 可能对也可能错
  • Skill = 你的技能("我知道怎么做 TDD") --- 经过验证的能力
  • Rule = 你的纪律("代码必须有测试") --- 不可违反的约束

三、记忆不自动保存的三件套

一个关键认知:Claude Code 不会自动记住上一次会话的内容。 每次新会话都是一张白纸。

要让 AI 助手"学习",你需要三个组件协同工作:

3.1 三件套架构

vbnet 复制代码
┌─────────────────────────────────────────────┐
│              持续学习三件套                    │
│                                              │
│  1. Stop Hook(提取)                        │
│     │ 会话结束时,分析对话内容               │
│     │ 提取行为模式,创建 Instinct            │
│     ↓                                        │
│  2. PreCompact Hook(保存)                  │
│     │ 上下文压缩前,保存重要观察              │
│     │ 防止因上下文窗口满而丢失学习材料        │
│     ↓                                        │
│  3. continuous-learning Skill(存储+演化)    │
│     │ 管理 Instinct 的存储、评分、聚合        │
│     │ 将高置信度 Instinct 演化为 Skill/Agent │
│                                              │
└─────────────────────────────────────────────┘

3.2 为什么学习在 Stop Hook 中发生

不是 UserPromptSubmit(用户输入时) --- 那会导致每次提问都有延迟。

而是 Stop Hook(会话结束时) --- 原因:

时机 优点 缺点
UserPromptSubmit 实时学习 增加每次交互延迟
PostToolUse 工具级别观察 过于频繁,噪音大
Stop(会话结束) 不影响交互体验 需要等到会话结束
PreCompact 压缩前保存 只在上下文满时触发

v2 的改进是同时使用 PreToolUse/PostToolUse 做实时观察 (用 Haiku 在后台运行,不阻塞),Stop Hook 做总结提取


四、Instinct 生命周期

4.1 从观察到演化的完整流程

markdown 复制代码
会话观察(Stop Hook / PostToolUse)
    ↓
模式提取(分析对话中的重复行为)
    ↓
创建 Instinct(初始置信度 0.3-0.5)
    ↓
置信度评分(每次再次观察 → 置信度上升)
    ↓
    ├── 低置信度(<0.4)→ 丢弃(TTL 30 天后自动清理)
    ├── 中置信度(0.4-0.6)→ 继续观察
    └── 高置信度(>0.7)→ 保存
         ↓
    聚合(相关 Instinct 聚类)
         ↓
    演化为 Skill / Command / Agent

4.2 置信度评分机制

置信度不是固定的,它会随着观察而变化:

ini 复制代码
首次观察:           confidence = 0.3(试探性)
第 2 次同类观察:    confidence = 0.5(有迹象)
第 3 次同类观察:    confidence = 0.65(有模式)
第 5 次同类观察:    confidence = 0.8(近乎确定)
用户明确纠正:       confidence += 0.15(强信号)
用户否定:           confidence -= 0.2(负信号)

4.3 项目作用域(v2.1 新增)

v2.1 引入了项目作用域,解决了一个关键问题:跨项目污染。

arduino 复制代码
❌ v2.0 的问题:
  在 React 项目中学到 "use hooks for state"
      ↓
  在 Go 项目中也建议 "use hooks"  ← 这没有意义

✅ v2.1 的解决:
  React 项目的 Instinct → 只在 React 项目中生效
  Go 项目的 Instinct → 只在 Go 项目中生效
  "always validate input" → 提升为全局 Instinct

项目检测基于 git remote URL 或仓库路径。当同一个 Instinct 在 2 个以上项目中被观察到,可以将其提升(promote)为全局 Instinct。


五、命令链

ECC 提供了完整的命令链来管理持续学习:

命令 功能 典型使用场景
/learn 手动触发学习,从当前会话提取 Instinct 完成一次有价值的会话后
/instinct-status 查看所有 Instinct 的状态和置信度 了解学到了什么
/instinct-export 导出 Instinct 到文件 备份或分享
/instinct-import 从文件导入 Instinct 导入团队共享的 Instinct
/evolve 将高置信度 Instinct 演化为 Skill/Command/Agent 定期维护

5.1 命令使用示例

bash 复制代码
# 步骤 1:完成一次开发会话后,触发学习
# /learn

# 步骤 2:查看提取到了什么
# /instinct-status

# 输出示例:
# Project: my-react-app (a1b2c3d4)
# ┌──────────────────────────────┬────────┬───────────┐
# │ Instinct                     │ Conf.  │ Domain    │
# ├──────────────────────────────┼────────┼───────────┤
# │ prefer-functional-style      │ 0.70   │ code-style│
# │ always-check-null-first      │ 0.55   │ debugging │
# │ use-early-return             │ 0.80   │ code-style│
# │ test-edge-cases-first        │ 0.45   │ testing   │
# └──────────────────────────────┴────────┴───────────┘

# 步骤 3:高置信度 Instinct 演化为 Skill
# /evolve

5.2 instinct-cli.py

底层工具 instinct-cli.py 提供了更细粒度的控制:

bash 复制代码
# 查看所有项目的 Instinct 统计
python3 skills/continuous-learning-v2/scripts/instinct-cli.py projects

# 将项目 Instinct 提升为全局
python3 skills/continuous-learning-v2/scripts/instinct-cli.py promote <instinct-id>

# 清理超过 30 天的低置信度 Instinct
python3 skills/continuous-learning-v2/scripts/instinct-cli.py prune

六、v1 vs v2 差异

持续学习系统经历了两个大版本的演进:

特性 v1 v2 / v2.1
观察方式 Stop Hook(仅会话结束) PreToolUse/PostToolUse(实时)+ Stop
分析执行 在主上下文中(占用 Token) 后台 Agent(Haiku,不占主上下文)
学习粒度 直接生成完整 Skill 原子 Instinct → 聚合 → 演化
置信度 0.3-0.9 加权
演化路径 直接写 Skill Instinct → 聚类 → Skill/Command/Agent
分享机制 Export/Import Instinct
作用域 全局 项目级 + 全局(v2.1)
跨项目 污染风险 隔离(v2.1)

6.1 为什么 v2 更好

v1 的核心问题:

  1. 占用主上下文 --- 学习分析消耗 Token,影响当前任务
  2. 粒度太粗 --- 直接生成 Skill,容易产生质量不高的 Skill
  3. 无置信度 --- 一次观察就当作"确定的",容易学错
  4. 全局污染 --- React 的习惯被应用到 Go 项目

v2 的设计思路:

  1. 后台运行 --- 用 Haiku(便宜、快速)在后台分析
  2. 原子粒度 --- 先学小的(Instinct),积累够了再聚合
  3. 置信度过滤 --- 观察次数不够就不当真
  4. 项目隔离 --- 不同项目不同知识库

七、存储结构

Instinct 存储在 ~/.claude/homunculus/ 目录中:

perl 复制代码
~/.claude/homunculus/
├── projects.json                    # 项目注册表
├── observations.jsonl               # 全局观察日志
├── instincts/                       # 全局 Instinct
│   ├── personal/                    # 个人观察提取的
│   └── inherited/                   # 导入的
├── evolved/                         # 全局演化产物
└── projects/
    ├── <project-hash-1>/
    │   ├── instincts/
    │   │   ├── personal/
    │   │   └── inherited/
    │   ├── evolved/
    │   └── observations.jsonl
    └── <project-hash-2>/
        └── ...

注意homunculus(小人)是持续学习系统的内部代号,你在目录结构中会频繁看到这个词。


八、本课练习

练习 1:阅读 continuous-learning-v2 Skill(15 分钟)

bash 复制代码
cat skills/continuous-learning-v2/SKILL.md

回答问题:

  • v2.1 新增了哪两个命令?(提示:promote 和 projects)
  • 项目检测基于什么?(提示:git remote URL)

练习 2:执行 /learn 并查看状态(20 分钟)

这是本课最重要的练习。

  1. 在 Claude Code 中完成一次有意义的开发对话(至少 5 轮交互)
  2. 在会话结束前执行 /learn
  3. 执行 /instinct-status 查看提取结果

记录:

  • 提取到了几个 Instinct?
  • 置信度分布如何?
  • 有没有你不认同的 Instinct?

练习 3:理解 Instinct 生命周期(10 分钟)

用你自己的话,画出 Instinct 从"观察"到"演化为 Skill"的完整生命周期图。要包括:

  • 触发条件
  • 置信度变化
  • 丢弃条件
  • 演化条件

练习 4(选做):导出和导入

尝试导出你的 Instinct 并在另一个项目中导入:

bash 复制代码
# 导出
# /instinct-export

# 在另一个项目中导入
# /instinct-import <file-path>

观察:导入后的 Instinct 是出现在 personal/ 还是 inherited/ 目录中?


九、本课小结

你应该记住的 内容
Instinct 定义 原子级学习单元,有置信度、领域标签和作用域
记忆三件套 Stop Hook(提取)+ PreCompact Hook(保存)+ Skill(存储/演化)
学习时机 Stop Hook(不影响交互体验),v2 增加了后台实时观察
生命周期 观察 → 提取 → 评分 → 丢弃/观察/保存 → 聚合 → 演化
项目隔离 v2.1 按项目隔离 Instinct,防止跨项目污染

十、下节预告

第 26 课:Eval 驱动开发 --- 衡量 AI 行为

持续学习让 AI 变得更好,但"更好"需要衡量。下节课学习 Eval 驱动开发(EDD)--- 如何为 AI Agent 设计评估标准、运行 Eval、分析 pass@k 指标,确保 Agent 的行为是可量化、可复现的。

预习建议:思考一个问题 --- 你怎么知道你的 Agent 是变好了还是变差了?用什么指标衡量?

相关推荐
counterxing3 小时前
Agent 跑起来之后,难的是复用、观测和评测
node.js·agent·ai编程
uccs3 小时前
大模型底层机制与Agent开发
agent·ai编程·claude
counterxing4 小时前
我把 Codex 里的 Skills 做成了一个 MCP,还支持分享
前端·agent·ai编程
夜雪闻竹4 小时前
vectra 向量索引文件损坏怎么办
ai编程·向量·vectra
ZzT4 小时前
Harness 到底指什么
openai·ai编程·claude
宅小年4 小时前
AI 创业最危险的地方:太容易做出来
openai·ai编程·claude
麦客奥德彪4 小时前
Android Skills
架构·ai编程
言萧凡_CookieBoty5 小时前
一文讲清 RAG:让 AI 读懂业务知识库的核心方法
ai编程
kyriewen6 小时前
产品经理把PRD写成“天书”,我用AI半小时重写了一遍,他当场愣住
前端·ai编程·cursor
Patrick_Wilson6 小时前
知识沉淀的四层模型:从个人笔记到企业资产,让文档真正长出复利
面试·程序员·ai编程