Skip to content

Weiran71/evo-memory

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧬 智能体自进化(Agent Self-Evolution)

一套为 AI Agent 设计的自进化记忆系统,让智能体在持续对话中自主学习、积累经验、避免重蹈覆辙。

OpenClaw License


为什么需要这个?

现有的 AI Agent 记忆方案(如 ClawHub 上的 self-improving-agent)存在几个核心问题:

问题 现有方案 我们的方案
晋升规则死板 "7天内使用3次才升级"——低频但致命的原则会被遗漏 按知识性质分层,重要原则永不降级
分类全自动不可控 Agent 自动升降级,用户无法介入 Agent 自主分类 + 用户批量审阅
反思成本高 回放整段 session 历史,token 翻倍 实时捕获信号,定时只读笔记综合,成本降两个数量级
只学错误不学成功 只捕获纠正和失败 同时捕获成功模式和用户满意信号
知道做什么不知道为什么 条目只记 WHAT 每条带 WHY(原因)+ GENERALIZE(泛化规律),支持举一反三
无法衡量效果 没有统计,不知道记忆有没有用 内置引用追踪和进化趋势度量

核心架构

graph TB
    subgraph 对话层["🗣️ 对话过程"]
        User[用户消息] --> AgentWork[Agent 正常工作]
        AgentWork --> Response[回复用户]
    end

    subgraph 捕获层["📡 信号捕获(双层机制)"]
        User -->|每条消息| HookLayer["🔧 Hook 自动层<br/>关键词检测<br/>命令失败检测"]
        AgentWork -->|语义理解| AgentLayer["🧠 Agent 自觉层<br/>理解具体纠正内容<br/>识别偏好和成功模式"]
        HookLayer -->|粗信号| Pending["📋 pending.jsonl<br/>信号临时队列"]
        AgentLayer -->|细信号| Pending
    end

    subgraph 记忆层["💾 两层记忆架构"]
        L1["🏛️ L1 原则层<br/>principles.md<br/>━━━━━━━━━━━━━<br/>永远加载 · 上限1000条<br/>永不自动降级<br/>漏掉会导致犯错的知识"]
        L2["📚 L2 经验层<br/>patterns/*.md<br/>━━━━━━━━━━━━━<br/>语义匹配按需加载<br/>7个领域文件<br/>特定场景下的操作经验"]
        Index["🔍 index.md<br/>语义索引"]
    end

    subgraph 触发层["⚡ 反思触发"]
        ExplicitTrigger["👤 用户显式触发<br/>'记住' / '反思' / '不对'<br/>━━━━━━━━━━━━━<br/>跳过 pending<br/>直接写入 L1/L2"]
        TimerTrigger["⏰ 定时综合<br/>pending ≥ 5条<br/>或超过 24h<br/>━━━━━━━━━━━━━<br/>生成反思报告<br/>Agent 自主分类<br/>用户批量审阅"]
    end

    subgraph 统计层["📊 统计追踪"]
        CitationLog["citation-log.jsonl<br/>引用日志"]
        Summary["summary.json<br/>按需生成统计报告"]
    end

    %% 触发流
    User -->|"记住/反思/不对"| ExplicitTrigger
    Pending -->|"攒够5条/超24h"| TimerTrigger
    ExplicitTrigger --> L1
    ExplicitTrigger --> L2
    TimerTrigger --> L1
    TimerTrigger --> L2
    TimerTrigger --> Index

    %% 加载流
    L1 -->|每次会话自动加载| AgentWork
    Index -->|会话开始语义匹配| L2
    L2 -->|匹配命中则加载| AgentWork

    %% 事前预防
    L1 -.->|"事前预防:有坑先提醒"| AgentWork
    L2 -.->|"事前预防:有坑先提醒"| AgentWork

    %% 统计
    Response -->|会话结束批量写入| CitationLog
    CitationLog -->|用户说'统计'| Summary

    style L1 fill:#1a5276,stroke:#2980b9,color:#fff
    style L2 fill:#145a32,stroke:#27ae60,color:#fff
    style Pending fill:#7d6608,stroke:#f1c40f,color:#fff
    style ExplicitTrigger fill:#922b21,stroke:#e74c3c,color:#fff
    style TimerTrigger fill:#6c3483,stroke:#8e44ad,color:#fff
    style HookLayer fill:#424949,stroke:#95a5a6,color:#fff
    style AgentLayer fill:#424949,stroke:#95a5a6,color:#fff
Loading

关键设计策略

策略 1:按知识性质分层,而非按使用频率

这条经验如果在需要时没被加载,会导致犯错或失败吗?
├─ 会 → L1(永远加载,永不降级)
└─ 不会,只是效率低 → L2(语义匹配按需加载)

拿不准?→ 默认放 L1(宁可多加载,不可漏)

为什么:频率不代表重要性。"一年只用一次的安全规则"比"天天用的格式偏好"更重要。

策略 2:实时捕获 + 定时综合(不回放 Session)

❌ 旧方案:对话结束 → 回放 3 小时 session → 找信号(25,000+ tokens)
✅ 我们的:对话中随手记 → 定时只读笔记综合(200-500 tokens)

token 成本降低两个数量级。类似"开会时随手记要点"vs"会后重听录音"。

策略 3:双层信号捕获

可靠性 精度 作用
Hook 自动层 高(不依赖 Agent) 低(关键词匹配) 保底,确保不遗漏
Agent 自觉层 中(可能忘) 高(语义理解) 精确,提供具体内容

两层互补:Hook 层捕获"用户可能在纠正",Agent 层补充"具体纠正了什么"。

策略 4:Agent 自主分类,用户批量审阅

  • 不逐条问用户(避免决策疲劳)
  • Agent 按规则自主分类 L1/L2
  • 定期反思报告中列出分类结果,用户扫一眼确认/调整
  • 拿不准时默认放 L1(误入 L1 浪费少量 token,误入 L2 可能漏加载导致犯错)

策略 5:用户显式触发跳过缓冲

用户明确说"记住/不对/反思"时,直接写入 L1/L2,不经 pending 缓冲。 隐式信号(Agent 自己发现的)才走 pending → 定时综合流程。

策略 6:成本优化

优化点 效果
L2 会话级一次性匹配 不逐轮重复,整个会话只匹配一次
Hook 只在命中时输出 未命中完全静默,零 token
citation-log 批量写入 会话结束一次写入,省 4-9 次 tool call
summary.json 按需生成 不自动更新,用户说"统计"时才计算

L1 条目格式

### P042: 提供商名禁用 "qwen"
category: 配置
source: 2026-03-06 排障得出
why: "qwen" 会触发内置插件自动劫持配置,属于"命名冲突触发内置行为"的通用模式
generalize: 配置自定义命名时,避免使用任何与内置插件同名的名称
---
使用 "qwen" 作为提供商名会触发内置插件劫持,导致 4008 错误。用 "aliyun" 替代。

每条带 why(为什么)和 generalize(泛化规律),支持举一反三。

L2 条目格式

## 技能安装后不显示的排查流程
context: 当安装技能、调试技能加载、clawhub install 后技能列表看不到时
tags: [技能, 安装, clawhub, skills, 不显示]
source: 2026-03-10
---
1. 检查是否在 workspace/skills/skills/ 目录
2. 检查 SKILL.md 的 YAML front matter
3. 检查 metadata 字段是否为空

context 字段用自然语言描述"什么时候该加载我",Agent(LLM)直接做语义匹配。


项目结构

self-evolution/
├── SKILL.md                  # 技能主文件(Agent 每次会话加载的完整规则)
├── _meta.json                # 元数据
├── config.yaml               # 可配置项(阈值、上限、检查周期)
│
├── principles.md             # L1: 永久原则(≤1000条,每次会话自动加载)
├── pending.jsonl             # 信号临时队列(综合后清空)
│
├── patterns/                 # L2: 经验层(语义匹配按需加载)
│   ├── index.md              # 语义索引(会话开始时匹配用)
│   ├── config.md             # 配置类经验
│   ├── skills.md             # 技能类经验
│   ├── multi-agent.md        # 多代理协作经验
│   ├── debug.md              # 排障经验
│   ├── research.md           # 调研分析经验
│   ├── general.md            # 通用经验
│   └── other.md              # 未分类(兜底)
│
├── stats/                    # 统计系统
│   ├── citation-log.jsonl    # 引用日志
│   └── reports/              # 阶段性分析报告
│
├── hooks/                    # Hook 脚本
│   ├── signal-detector.sh    # 用户消息关键词检测
│   ├── error-detector.sh     # 命令失败检测
│   └── bootstrap.js          # 启动时注入 SKILL.md
│
├── setup.md                  # 安装指南
└── design/                   # 设计文档
    ├── DESIGN.md             # 完整设计方案 v1.1
    ├── ROLLOUT.md            # 三阶段部署策略
    └── TODO.md               # 待办项 + 讨论记录(20条决策)

安装

方式 A:从 ClawHub 安装(推荐)

clawhub install evo-memory

方式 B:从源码安装

git clone https://github.com/Weiran71/evo-memory.git
cp -r evo-memory ~/.openclaw/workspace/skills/skills/self-evolution

2. 部署 bootstrap hook

mkdir -p ~/.openclaw/hooks/self-evolution
cp ~/.openclaw/workspace/skills/skills/self-evolution/hooks/bootstrap.js \
   ~/.openclaw/hooks/self-evolution/handler.js

cat > ~/.openclaw/hooks/self-evolution/HOOK.md << 'EOF'
---
name: self-evolution
description: "Injects self-evolution skill during agent bootstrap"
metadata: {"openclaw":{"emoji":"🧬","events":["agent:bootstrap"]}}
---
# Self-Evolution Bootstrap Hook
EOF

openclaw hooks enable self-evolution

3. 重启并验证

openclaw gateway restart
sleep 3
openclaw hooks list | grep self-evolution   # 应显示 ✓ ready
openclaw skills list | grep self-evolution  # 应显示 ✓ ready

4. 测试

# 验证 bootstrap 注入
openclaw agent --agent main --message "你有没有加载 self-evolution 技能?"

# 验证 L1 写入
openclaw agent --agent main --message "记住:这是测试原则"

# 检查写入结果
cat ~/.openclaw/workspace/self-evolution/principles.md

配置项

# config.yaml
pending_threshold: 5           # pending 积累多少条信号后触发综合
max_silent_hours: 24           # pending 不为空时,最长静默多少小时后强制综合
report_style: detailed         # 反思报告风格:detailed / brief
l1_limit: 1000                 # L1 原则层条目上限
freshness_check_interval: 30d  # L1 原则保鲜检查周期

与现有方案对比

维度 ivangdavila/self-improving pskoett/self-improving-agent 本方案
分层依据 频率(7天3次) 无分层 知识性质
HOT 容量 100 行 无限制 1000 条
晋升机制 自动(频率驱动) 手动 Agent 自主 + 用户审阅
降级机制 30天不用降级 L1 永不降级
匹配方式 项目名/目录名 语义匹配
信号捕获 Agent 自觉 手动 Hook + Agent 双层
反思触发 Agent 判断任务完成 手动 实时捕获 + 定时综合
成功模式 不捕获 不捕获 捕获
WHY 字段 每条带 why + generalize
统计追踪 引用统计
事前预防 执行前检查记忆
token 成本 高(回放 session) 低(手动) 极低(读 pending)
部署风险 替换式 独立 旁挂零风险

设计决策记录

完整的设计讨论过程记录在 design/TODO.md 中,包含 20 条关键决策(D01-D20),涵盖:

  • 为什么按知识性质分层而非频率
  • 为什么用语义匹配而非 Embedding
  • 为什么实时捕获而非回放 Session
  • L1/L2 边界模糊时怎么处理
  • 反思报告如何避免决策疲劳
  • Hook 在 OpenClaw 中的兼容性限制
  • 6 项成本优化措施

路线图

  • 两层记忆架构(L1 原则 + L2 经验)
  • 实时信号捕获 + 定时综合
  • Bootstrap hook 强制加载
  • 引用统计系统
  • Hook 自动捕获层(等 OpenClaw 支持 message:received 事件)
  • 保鲜检查(30天周期验证 L1 条目)
  • 矛盾检测(写入时检查语义冲突)
  • 学习速度度量(纠正频率趋势、重犯率)

License

MIT

About

🧬 智能体自进化 - AI Agent 自进化记忆系统,两层记忆架构 + 双层信号捕获 + 实时反思

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages