Skip to content

feat(role-persona): 记忆系统全面改进 - Observer模式/Pending优化/[0x]清理/双向对话 #72

Description

@Dwsy

背景

通过对 claude-subconscious 的深度拆解分析,发现 pi-zero 记忆系统在工程性(本地可审查、分层过滤、使用驱动验证)上全面胜出,但在记忆主动性双向交互方面存在可改进空间。

本 issue 汇总了 4 个相关但独立的改进点,可按优先级分阶段实施。


架构分析摘要

维度 claude-subconscious (Letta) pi-zero (role-persona)
存储后端 Letta 云端 API + SQLite 本地 Markdown 文件 + LanceDB
记忆层数 8 flat blocks (单层, 硬限 30000 chars) Daily -> Pending -> Consolidated -> Knowledge (四层)
验证机制 Agent 主观判断 Pending 层使用驱动验证 (score >= 0.5 -> promote)
检索能力 fetchAgent() 网络请求 (10s timeout) 关键词 + 标签 + 向量 hybrid RRF 融合 (本地零延迟)
可审查性 需通过 Letta API git diff 可直接审查,本地回滚
主动探索 Sub Agent 可 Read/Grep/Glob 读代码 无独立 Agent,被动记录
双向对话 Claude <-> Sub Agent 双向交流 单向:只能写入和读取

改进 1:引入 Observer Agent(观察者模式)【高优先级】

问题

当前记忆引擎是被动记录——只能提取对话中的显式信息。如果用户说"我刚改了 auth.ts 的 token 逻辑",记忆系统只记下了这句话,但不理解 auth.ts 实际长什么样、为什么改、上下文是什么

方案

引入一个轻量 Observer Agent,类似 claude-subconscious 的 Subconscious Agent 设计,但定位为只读助手

  1. 用户会话 -> transcript 发送到 Observer Agent
  2. Observer Agent 有 Read/Grep/Glob 只读权限
  3. 自动读取相关代码文件理解上下文
  4. 生成"上下文感知"的高质量记忆条目
  5. 通过 knowledge tool 写入 pi-zero 知识库

技术实现

  • 使用 @letta-ai/letta-code-sdk 或类似 SDK 启动独立进程
  • 仅开放 Read/Grep/Glob/web_search 工具(read-only 模式)
  • 处理 transcript 后,通过 extension tool 写入 memory/knowledge
  • 异步运行,不阻塞主 Agent 会话

预期收益

  • 记忆从"被动录音"升级为"主动理解"
  • 记忆质量提升:有代码上下文的记忆远比孤立的句子有价值
  • 可发现用户未明确表达的模式和架构决策

改进 2:Pending 精确 Promote 机制【中优先级】

当前问题

Session 启动时随机 promote 1-2 条 pending 记忆(Math.ceil(Math.random() * 2)),这不是真正的"使用驱动验证",而是 warm-cache 策略。

方案设计

引入三维评分模型替代随机 promote:

promote_score = 检索频率 x 0.4 + 语义相关性 x 0.35 + (1 - 年龄衰减) x 0.25

定期 consolidate 时批量决策:
  score >= 0.6 -> promote -> consolidated
  score < 0.3 -> discard
  0.3 <= score < 0.6 -> 给 LLM 判断

实施步骤

  1. 在 pending record 中增加 accessCount 字段
  2. 修改 searchRoleMemory 中的 autoPromotePending 逻辑
  3. consolidateRoleMemory 中增加 pending 批量处理
  4. 移除 session start 的随机 promote

改进 3:[0x] 区定期清理【低优先级但高 ROI】

现状

consolidated.md 的 # Learnings (New) 区堆积了 120+ 条 [0x] 从未被使用的记忆。这些条目写入后从未被检索到,占用认知空间但无价值。

清理规则

在 consolidate 时增加自动清理逻辑:

  • 年龄 > 30 天 -> 自动移入 events 归档
  • 年龄 7-30 天 -> LLM 判断是否值得保留
  • 年龄 < 7 天 -> 保留,等待验证

实施

修改 consolidateRoleMemory() 函数,增加 zero-used 清理逻辑,保持向后兼容。


改进 4:双向对话记忆机制【创新特性】

概念

允许 Agent 对记忆进行反馈和修正,实现"与记忆对话":

memory({
  action: "converse",
  target: "learning-id-or-query",
  converseAction: "confirm" | "reject" | "discuss" | "amend",
  content: "这条记忆不够准确,实际情况是..."
})

操作类型

  • confirm — 确认某条 pending/consolidated 记忆准确 -> reinforce + 标记 verified
  • reject — 标记记忆不准确 -> 移入 daily log 并注明原因
  • discuss — 对记忆发表看法 -> 写入 daily 作为讨论记录
  • amend — 修正记忆内容 -> 调用 update 逻辑并记录变更

收益

  • 记忆准确性提升:Agent 可以自我纠正
  • 可追溯性:所有修改变动都有记录
  • 与 claude-subconscious 的双向对话能力对齐

实施优先级建议

改进 优先级 复杂度 预期收益 实施难度
[0x] 区清理 P0 立即减少 120+ 噪声条目 1
Observer Agent P1 记忆质量质的飞跃 4
Pending 精确 promote P2 验证机制真正闭环 2
双向对话记忆 P3 自我纠正能力 3

相关文件

  • extensions/role-persona/memory-md.ts — 核心记忆存储引擎
  • extensions/role-persona/memory-llm.ts — LLM 提取与整理
  • extensions/role-persona/memory-vector.ts — LanceDB 向量搜索
  • extensions/role-persona/memory-tags.ts — 标签系统与遗忘曲线
  • extensions/role-persona/index.ts — 主扩展编排层
  • extensions/role-persona/memory-extraction-rules.ts — 可推导信息过滤
  • skills/memory-knowledge-distiller/SKILL.md — 记忆到知识蒸馏

备注

  • 本 issue 基于对 claude-subconscious (Letta) 的深度拆解分析
  • 所有改进保持向后兼容
  • Observer Agent 实现可参考 @letta-ai/letta-code-sdk 的 resumeSession 模式
  • 建议分项实施,按优先级逐步推进

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions