记忆压缩

📎 引用文件

本文引用的文件 - compression.py - lifecycle.py - persistent.py - hierarchy.py - search_index.py - semantic_links.py - env_schema.py - test_memory_gc.py - test_tier2_integration.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录:参数调优与最佳实践

简介

本文件系统性阐述 Vibe-Trading 中“记忆压缩”的工作原理与实现细节。该机制通过三级压缩管线(原始 raw → 每日 daily → 摘要 digest),在长对话或长期记忆场景下,自动提取关键信息、去除冗余内容,并以可恢复的归档方式保存原文,从而在控制上下文体积的同时保持语义完整性。压缩由生命周期调度触发,结合重要性衰减、访问频率等指标进行决策;同时与分层目录、全文检索、语义链接等子系统协同工作,确保压缩后的记忆仍可被高效检索与关联。

项目结构

记忆压缩相关代码位于 agent/src/memory 目录下,并与配置、持久化、搜索、层级路由等模块协作: - 压缩管线:compression.py - 生命周期调度:lifecycle.py - 持久化存储与元数据:persistent.py - 层级目录路由:hierarchy.py - 全文检索索引:search_index.py - 语义链接:semantic_links.py - 环境配置开关:env_schema.py - 测试用例:test_memory_gc.py、test_tier2_integration.py

graph TB subgraph "记忆子系统" A["PersistentMemory<br/>持久化与扫描"] B["CompressionPipeline<br/>三级压缩"] C["MemoryHierarchy<br/>分类目录路由"] D["MemorySearchIndex<br/>FTS5检索"] E["SemanticLinker<br/>BM25语义链接"] end subgraph "调度与配置" F["MemoryLifecycle<br/>GC与压缩触发"] G["EnvConfig<br/>VT_MEMORY_* 开关"] end A --> C A --> D A --> E F --> A F --> B F --> G B --> A

图表来源 - lifecycle.py:200-273 - compression.py:160-353 - persistent.py:196-307 - search_index.py:113-303 - semantic_links.py:158-231 - hierarchy.py:34-176

章节来源 - lifecycle.py:200-273 - compression.py:160-353 - persistent.py:196-307

核心组件

章节来源 - compression.py:160-353 - lifecycle.py:200-273 - persistent.py:196-307 - hierarchy.py:34-176 - search_index.py:113-303 - semantic_links.py:158-231

架构总览

压缩流程由生命周期驱动,结合环境变量开关决定是否执行。整体时序如下:

sequenceDiagram participant LC as "MemoryLifecycle" participant PM as "PersistentMemory" participant CP as "CompressionPipeline" participant FS as "文件系统" LC->>PM : list_entries() PM-->>LC : 条目列表(含last_accessed, compression_level) LC->>CP : should_compress(level, last_accessed, now) alt 需要压缩 LC->>CP : apply_compression(entry_path, content, keywords, target) CP->>FS : archive_original(原子复制) CP->>CP : compress_to_daily / compress_to_digest CP-->>LC : compressed_content LC->>FS : _write_compressed(原子写入frontmatter+body) else 不需要压缩 LC-->>LC : 跳过 end

图表来源 - lifecycle.py:200-273 - compression.py:168-334

详细组件分析

压缩管线 CompressionPipeline

flowchart TD Start(["开始"]) --> CheckLevel["读取当前压缩级别与最后访问时间"] CheckLevel --> Decide{"是否需要压缩?"} Decide -- 否 --> End(["结束"]) Decide -- 是 --> Archive["归档原文(原子复制)"] Archive --> Compress{"目标级别"} Compress -- daily --> Daily["句子切分→IDF→Top-K+首尾→拼接"] Compress -- digest --> Digest["词频×IDF→Top-N术语→要点摘要"] Daily --> Retention["估算保留率(Jaccard)"] Digest --> Retention Retention --> WriteBack["写回压缩内容与更新frontmatter"] WriteBack --> End

图表来源 - compression.py:60-154 - compression.py:194-256 - compression.py:258-334

章节来源 - compression.py:60-154 - compression.py:168-334

生命周期调度 MemoryLifecycle

sequenceDiagram participant LC as "MemoryLifecycle" participant PM as "PersistentMemory" participant CP as "CompressionPipeline" participant FS as "文件系统" LC->>PM : list_entries() loop 遍历条目 LC->>LC : 计算importance(质量分数, 访问次数, 最近访问时间) alt importance < 归档阈值 LC->>FS : 移动到archive/ else importance < 删除阈值且允许删除 LC->>FS : 删除(归档备份) end opt 开启压缩且非dry_run LC->>CP : should_compress(...) alt 需要压缩 LC->>CP : apply_compression(...) CP->>FS : archive_original() CP-->>LC : compressed_body LC->>FS : _write_compressed(原子写回) end end end

图表来源 - lifecycle.py:200-273 - lifecycle.py:323-379

章节来源 - lifecycle.py:200-273 - lifecycle.py:323-379

持久化与元数据 PersistentMemory

章节来源 - persistent.py:75-99 - persistent.py:440-453 - persistent.py:462-578

层级目录 MemoryHierarchy

章节来源 - hierarchy.py:34-176 - hierarchy.py:200-379

全文检索 MemorySearchIndex

章节来源 - search_index.py:113-303 - search_index.py:357-445

语义链接 SemanticLinker

章节来源 - semantic_links.py:158-231 - semantic_links.py:321-372

依赖关系分析

graph LR Env["EnvConfig(VT_MEMORY_*)"] --> Life["MemoryLifecycle"] Life --> Comp["CompressionPipeline"] Life --> Perm["PersistentMemory"] Comp --> FS["文件系统(archive/)"] Perm --> Index["MemorySearchIndex"] Perm --> Links["SemanticLinker"] Perm --> Hier["MemoryHierarchy"]

图表来源 - env_schema.py:426-498 - lifecycle.py:200-273 - compression.py:160-353 - persistent.py:196-307

章节来源 - env_schema.py:426-498 - lifecycle.py:200-273

性能考量

[本节为通用指导,不直接分析具体文件]

故障排查指南

章节来源 - test_memory_gc.py:175-200 - test_tier2_integration.py:234-235 - search_index.py:147-173 - semantic_links.py:232-319

结论

记忆压缩通过“分级压缩 + 重要性评估 + 原子归档”的组合策略,在长对话与长期记忆中实现了高保留率的体积缩减。其设计兼顾了可恢复性、检索效率与系统稳定性,并通过环境变量灵活开关,适配不同部署场景。配合层级目录、全文检索与语义链接,压缩后的记忆依然具备高可用性与强关联性。

[本节为总结性内容,不直接分析具体文件]

附录:参数调优与最佳实践

章节来源 - compression.py:23-39 - compression.py:194-256 - lifecycle.py:200-273 - persistent.py:75-99 - search_index.py:25-27 - env_schema.py:426-498