Skip to content

About

Cache-friendly paged memory for LLM sessions: page lifecycle under prefix-stability discipline, an append-only fold mechanism for staleness, and a hash-chained audit of user deletions that keeps hashes but not content.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

PPBExt-Memory

一句话:把会话记忆做成"页",页的生命周期受前缀稳定性纪律约束,所有记忆维护决策 落证据链——并在偏好演化场景里实测了三种失效策略的三角张力(回答质量 / 追问可答 / 缓存代价),折叠 + LLM 语义判定是唯一在三个维度都不差的方案(回答正确率 1.00 实测)。

作者:Saycho-Finally(独立研究者) | AI 使用声明见 AI_DISCLOSURE.md | License: MIT | 核心零依赖 | Python ≥3.10(依赖 DecisionCore 时自动启用审计)


三条设计约束(从实测批判继承)

  1. 页库 append-only:页只追加不修改——前缀稳定的前提
  2. 折叠不删除:失效通过追加"折叠页"声明旧页终止——staleness 的 append-only 解, 审计链完整(能回答"这条记忆何时被谁改的")
  3. 组装确定性:页序 = 内容的函数(kind 固定序 → page_id 排序),与加载历史无关

实测:staleness 折叠的三维对照(12 轮偏好演化)

场景:用户偏好演化(重复/精化/改口/回退/并行/收敛),四策略对照:

策略 回答正确率 追问可答率 前缀重合 折叠页 审计
naive(全追加) 0.75 1.00 0.68 0 0
delete(物理删除) 0.92 0.11 0.63 0 0
fold + 字符判定 0.50 1.00 0.75 0 12
fold + LLM 判定 1.00 0.67 0.73 4 12

五个结论:

  1. 折叠机制强依赖语义判定器:字符级相似度对"喜欢 React" vs "改用 Svelte" 这类 语义相反、字面零重叠的偏好演化完全无感——折叠零触发(原始数据 fold_pages=0), 该策略落回"全追加"式的记忆组成。 待解释的异常(2026-10-07 复核):既然折叠零触发,fold_char 本应与 naive (0.75)等价,但实测只有 0.50。差异来源未定,可能是判定调用替换了原答案来源、 或审计路径改变了下游行为。在解释清楚之前不把它当作"退化为 naive"(旧版正文 误把 0.50 标为 naive 的分数,表本身无误)。

  2. "回答正确"与"可追问"是两个分离的属性:delete 回答正确率 0.92 但追问可答仅 0.11 ——它用审计换正确率

  3. 折叠 + LLM 判定是唯一三个维度都不差的方案(1.00 / 0.67 / 0.73)

  4. 缓存代价的诚实记录:折叠引起的组装重排会削弱字符级前缀重合(v0.1 实测 0.57); v0.2 的"原位占位"在字符级指标上无改善(0.52)——折叠点在字符级必然断裂

  5. 块级命中率已可测(v0.4):结论 4 留下的"块级收益需专门指标测量"已补上, 见 memorycore/cache_metric.py。口径按 provider 的物理语义—— 不完整的尾块不入分母(它本就不可缓存)——所以两个口径必须合看:

    现象 判读
    块级高 + 字符级低 损失落在不可缓存的尾部,属正常开销
    块级骤降 缓存边界本身被动过(缓存杀手)

    同时报告 partial_tail(结构性不可缓存尾长)与 tail_waste(因块粒度而浪费的字符数), 并提供 HitRateTracker 做会话级汇总(均值 / 前缀被破坏次数 / 低命中轮次)。

仓库结构

memorycore/    核心库(pages 页库+折叠 / composer 确定性组装 / controller 四操作决策
               / cache_metric 块级命中率 / audit 删除审计链)
experiments/   staleness 实验(离线四策略 + LLM 侧三维验证)
results/       实验原始数据(两份 JSON)
tests/         46 项测试全过(核心 16 + 块级指标与审计链 30)
SPEC.md        立项分析与设计(含领域查新与差异化定位)
reports/实验报告_staleness折叠三维对照_2026-10-04.md  完整实验报告(离线 + LLM 侧)

差异化定位(与已有方案的关系)

三层记忆(MemGPT/Letta)、显式记忆操作(AgeMem)、摘要压缩(LangChain/LlamaIndex)、 事实抽取(Mem0/Zep)——组件级均有成熟方案。本仓库的增量是交集:

  • 记忆分页 × 前缀缓存纪律(先行方案不处理缓存兼容;本仓库的组装器把三定律的 确定性纪律落到记忆侧)
  • 记忆维护 × 决策审计(折叠/更新决策经 DecisionCore 落 DecisionRecord:谁、何时、 依据什么改了记忆)

MCP server(可选形态)

本项目同时提供 MCP(Model Context Protocol)server 形态——任何支持 MCP 的 agent 客户端可直接把记忆作为工具调用:

python mcp_server.py        # stdio JSON-RPC

暴露六个工具:memory_ingest(写入/更新,自动 ADD/UPDATE/NOOP)、memory_recall (组装有效记忆 + 前缀稳定性指标)、memory_fold(折叠失效,审计链保留)、 memory_list(用户可见视图)、memory_delete(内容物理删除,仅留不含内容的事件)、 memory_audit(删除审计导出:哈希链 + chain_ok 校验结果,content_retained=false 表示审计未变相留存被删内容)。 零依赖实现(纯 stdio JSON-RPC),冒烟测试随仓库(initialize / tools/list / tools/call)。

快速上手

from memorycore import MemoryController, MemoryPage, MemoryStore, PageKind, PromptComposer

store = MemoryStore("memory.jsonl")
ctl = MemoryController(store)                      # 可选:dc=DecisionCore() 启用审计
ctl.ingest(PageKind.PREFERENCE, "偏好中文回复")      # ADD / UPDATE / FOLD / NOOP 自动决策
ctl.fold("<page_id>", reason="偏好已更新")           # 显式失效(append-only)

comp = PromptComposer(kind_budgets={"preference": 400, "fact": 800})
r = comp.compose(store.active_pages(), folded_pages=[p for p in store.pages if p.lifecycle == "folded"])
print(r.text, r.prefix_overlap, r.stable)          # 组装 + 前缀稳定性自检

已知局限

  • 降级判定器(字符级 Jaccard)不适用于语义演化场景——生产用法应注入嵌入或 LLM 判定(similarity_fn 可插拔)
  • 删除审计链与记忆库同存储:它能证明"删除事件未被顺带改动、序列可复核", 不能对抗能重写整个存储的对手——参考哈希必须位于记忆写入者够不到的信任域 才算完整性(2026 年记忆投毒防御讨论中的公开批评,见 reports/外部对照_查新_2026-10-06.md; 外生锚点与 boot 时校验是记录在案的缓解方向,未实现)
  • "折叠即取代"的概念已有工程先例(2026 年记忆安全实践把"旧事实标记 superseded" 列为防御层之一);本仓库的增量在折叠策略的三维代价实测与前缀稳定性处理, 不在该概念本身。商用记忆产品(如 Novyx)已内置哈希链审计与时间回滚。
  • 跨会话身份不在本仓库范围(需应用层认证)
  • 时间抽象("偏好从 X 演化到 Y,历史推理用 X")只做了基础支持(折叠链可回溯)

引用的先行者

  • MemGPT / Letta(三层记忆 + 显式操作)、Mem0(事实抽取)、Zep(双时态图)、 LangMem(后台抽取)、Stanford ACE(增量 playbook)、AgeMem(记忆操作工具化)
  • LoCoMo / LongMemEval / BEAM(记忆评测基准)
  • 本仓库的实验设计与数据:见 reports/实验报告_staleness折叠三维对照_2026-10-04.md

贡献与引用

About

Cache-friendly paged memory for LLM sessions: page lifecycle under prefix-stability discipline, an append-only fold mechanism for staleness, and a hash-chained audit of user deletions that keeps hashes but not content.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages