跳转到内容

连续学习与 Instinct 模型

连续学习与 Instinct 模型

学习目标

读完本章后,你将能够:

  • 理解 Hook 驱动观察与 Skill 驱动观察的触发率差异(100% vs ~50-80%)
  • 设计原子化 Instinct 模型(触发器 + 动作 + 置信度 + 领域标签)
  • 实现置信度评分的增减机制
  • 设计项目作用域隔离的 Instinct 存储架构
  • 理解 Instinct 演化管线:观察 → 模式检测 → 聚类 → 技能/命令/代理

前置知识


1. 为什么需要连续学习

问题定义

AI 编码代理在每次会话中都会积累模式:用户的编码偏好、项目约定、常见的错误与规避策略。如果没有连续学习机制,每次新会话都是”从零开始”,用户需要反复重申相同的偏好。

两种观察模式的对比

维度Hook 驱动观察Skill 驱动观察
触发率100%(确定性)~50-80%(概率性)
实现方式PreToolUse / PostToolUse 钩子Agent 自主判断是否调用 Skill
覆盖范围每次工具调用都被记录取决于 Agent 的技能激活判断
延迟极低(同步或异步后台)中等(需要 Agent 推理轮次)
适用场景全面的模式捕获特定场景的上下文感知学习

Hook 驱动的观察是连续学习的基础设施层 —— 它保证不遗漏任何模式。Skill 驱动的观察可以作为补充,捕获需要更高上下文理解的微妙模式。

2. Instinct 模型

2.1 什么是 Instinct

Instinct(本能)是一个原子化的已学习行为,表示一条从会话中提炼的可复用模式:

---
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

Instinct 的五个核心属性

属性说明示例
Atomic(原子性)一个触发器,一个动作”写新函数时 → 使用函数式风格”
Confidence-weighted(置信度加权)0.3 ~ 0.9,表示确信程度0.3 = 试探,0.9 = 确定
Domain-tagged(领域标签)分类标签,用于过滤和聚类code-style / testing / git
Evidence-backed(证据支撑)追踪产生该 Instinct 的观察记录”5 次观察 + 1 次用户纠正”
Scope-aware(作用域感知)project(项目级)或 global(全局级)React hooks → project,输入验证 → global

2.2 置信度评分系统

置信度随时间动态演化:

评分变化规则

事件置信度变化
模式被重复观察到+0.1 ~ +0.2
用户未纠正建议的行为+0.05
相似 Instinct 从其他来源确认+0.05
用户明确纠正行为-0.2 ~ -0.3
模式长期未被观察到-0.05 / 周期
出现矛盾证据-0.1

阈值行为

分数含义行为
0.3试探性仅建议,不自动应用
0.5中等在相关场景中参考应用
0.7自动批准应用
0.9几乎确定核心行为,几乎总是应用

3. 架构与数据流

3.1 连续学习管线

3.2 存储架构:项目作用域隔离

${XDG_DATA_HOME:-~/.local/share}/ecc-homunculus/
├── identity.json # 用户画像、技术等级
├── projects.json # 注册表: 项目 hash → 名称/路径/远程
├── observations.jsonl # 全局观察(回退)
├── instincts/
│ ├── personal/ # 全局自动学习的 Instinct
│ └── inherited/ # 全局导入的 Instinct
├── evolved/
│ ├── agents/ # 全局生成的 Agent
│ ├── skills/ # 全局生成的 Skill
│ └── commands/ # 全局生成的 Command
└── projects/
└── a1b2c3d4e5f6/ # 项目 hash(来自 git 远程 URL)
├── project.json # 项目元数据
├── observations.jsonl # 项目级观察
├── instincts/
│ ├── personal/ # 项目专属 Instinct
│ └── inherited/ # 项目导入的 Instinct
└── evolved/ # 项目级生成的技能

为什么选择 XDG 数据目录而非 ~/.claude/

  • Claude Code 的敏感路径守卫会阻止后台 Agent 写入 ~/.claude/ 下的某些路径
  • XDG 标准目录(~/.local/share/)是用户数据的约定位置
  • 支持从旧位置迁移(scripts/migrate-homunculus.sh

3.3 项目检测

系统通过以下优先级自动检测当前项目:

  1. CLAUDE_PROJECT_DIR 环境变量(最高优先级)
  2. git remote get-url origin → 哈希生成可移植项目 ID
  3. git rev-parse --show-toplevel → 使用仓库路径(机器特定)
  4. 全局回退 → 若无项目检测,Instinct 归入全局作用域

项目 ID 是一个 12 字符的哈希值(如 a1b2c3d4e5f6),同一仓库在不同机器上生成相同 ID。

4. Instinct 晋升机制

4.1 自动晋升标准

当满足以下条件时,项目级 Instinct 可晋升为全局:

  • 同一 Instinct ID 在 2+ 个项目中出现
  • 平均置信度 ≥ 0.8

4.2 作用域决策指南

模式类型作用域示例
语言/框架约定project”使用 React hooks”、“遵循 Django REST 模式”
文件结构偏好project”测试放在 __tests__/”、“组件在 src/components/“
代码风格project”使用函数式风格”、“偏好 dataclass”
安全实践global”验证用户输入”、“清理 SQL”
通用最佳实践global”先写测试”、“始终处理错误”
工具工作流global”编辑前先 Grep”、“读取后再写入”

5. 陷阱与对策

5.1 跨项目污染

问题:项目 A 的 React 模式被错误应用到项目 B 的 Python 代码中。

对策:项目作用域隔离。每个项目的 Instinct 存储在独立的 projects/<hash>/ 目录下,仅在对应项目中激活。

5.2 过度拟合个人习惯

问题:某个偶然的编码习惯被提升为高置信度 Instinct,导致不必要的自动应用。

对策

  • 置信度阈值:低置信度(<0.7)仅建议,不自动应用
  • 矛盾证据检测:当用户行为与 Instinct 冲突时降低置信度
  • 定期评估:/evolve 命令审查 Instinct 的有效性和适用性

5.3 Observer 成本过高

问题:每次工具调用都触发观察分析,消耗大量 Token。

对策

  • Observer 使用 Haiku 模型(最低成本)
  • 异步后台执行(不阻塞主会话)
  • 最小观察数阈值(默认 20 条才触发分析)
  • 可配置的观察间隔(默认 5 分钟)

6. 设计取舍

为什么用 Hook 而非 Skill 做观察?

v1 依赖 Skill 自主观察,但 Skill 是概率性的 —— 触发率约 50-80%,取决于 Agent 的自主判断。Hook 是确定性的,100% 触发。这意味着:

  • 每次工具调用都被观察
  • 不会遗漏任何模式
  • 学习是全面的

为什么 Instinct 是原子化的?

早期的连续学习方案尝试捕获完整的”会话模式”,但完整的模式过于复杂:

  • 难以聚类(大对象之间相似度高)
  • 难以演化(一个模式包含多个行为)
  • 难以调试(不知道哪个部分导致了问题)

原子化 Instinct 将每个行为拆分为最小的”触发器 → 动作”对,使得:

  • 聚类更精确(相似触发器自然归组)
  • 演化更灵活(一组 Instinct 可以组合成 Skill 或 Command)
  • 调试更直接(每个 Instinct 独立追踪置信度)

为什么置信度而非布尔开关?

简单的”已学习 / 未学习”二元模型无法处理:

  • 新模式的试探阶段
  • 矛盾证据出现时的降级
  • 不同来源的确认叠加

置信度评分提供了一个连续的、可逆的评分系统,能够优雅地处理这些场景。

参考来源

  • Claude Code Hooks 文档
  • ReAct 模式:Yao et al., “ReAct: Synergizing Reasoning and Acting in Language Models”, arXiv:2210.03629, 2022
  • XDG Base Directory Specification