记忆生命周期管理

📎 引用文件

本文引用的文件 - agent/src/memory/lifecycle.py - agent/src/memory/compression.py - agent/src/memory/persistent.py - agent/src/memory/hierarchy.py - agent/src/memory/search_index.py - agent/src/config/env_schema.py - agent/src/config/accessor.py - agent/tests/test_memory_lifecycle.py

目录

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

简介

本文件系统性说明记忆系统的生命周期管理,覆盖记忆的创建、激活(访问追踪)、休眠(重要性衰减)与销毁(归档/删除),并详解自动垃圾回收机制(访问频率统计、时间衰减算法、存储空间监控)。进一步阐述记忆压缩策略(文本压缩、去重合并、格式优化)、迁移与版本管理(数据格式升级、兼容性处理、备份恢复),并提供生命周期监控工具(状态查询、性能分析、故障诊断)以及配置示例与最佳实践。

项目结构

记忆系统由多个模块协作完成: - 持久化存储与索引:persistent.py - 生命周期管理:lifecycle.py - 压缩流水线:compression.py - 层级目录路由:hierarchy.py - 全文检索索引:search_index.py - 配置开关与环境变量:env_schema.py, accessor.py

graph TB A["PersistentMemory<br/>持久化存储与索引"] --> B["MemoryLifecycle<br/>质量评分/衰减/GC"] A --> C["CompressionPipeline<br/>三级压缩(raw/daily/digest)"] A --> D["MemoryHierarchy<br/>按类型分层目录"] A --> E["MemorySearchIndex<br/>SQLite FTS5 全文检索"] B --> C A --> |"可选: 语义链接"| F["SemanticLinker(外部模块)"] A --> |"可选: FTS5 索引"| E

图表来源 - agent/src/memory/persistent.py:196-637 - agent/src/memory/lifecycle.py:71-421 - agent/src/memory/compression.py:160-353 - agent/src/memory/hierarchy.py:34-436 - agent/src/memory/search_index.py:113-481

章节来源 - agent/src/memory/persistent.py:196-637 - agent/src/memory/lifecycle.py:71-421 - agent/src/memory/compression.py:160-353 - agent/src/memory/hierarchy.py:34-436 - agent/src/memory/search_index.py:113-481

核心组件

章节来源 - agent/src/memory/persistent.py:196-637 - agent/src/memory/lifecycle.py:71-421 - agent/src/memory/compression.py:160-353 - agent/src/memory/hierarchy.py:34-436 - agent/src/memory/search_index.py:113-481 - agent/src/config/env_schema.py:411-546

架构总览

记忆从创建到销毁的关键路径如下: - 创建:PersistentMemory.add() 写入带前元数据的Markdown文件,更新MEMORY.md索引,可选写入FTS5索引与语义链接。 - 激活:调用track_access()增加access_count与last_accessed;搜索时根据importance加权排序。 - 休眠:compute_importance()依据quality_score、access_count与days_since_last_access计算重要性,启用衰减时按指数衰减。 - 销毁:run_gc()评估阈值,执行archive或delete,并触发压缩;压缩后原子写回frontmatter与正文。

sequenceDiagram participant App as "应用" participant PM as "PersistentMemory" participant LC as "MemoryLifecycle" participant CP as "CompressionPipeline" participant FS as "文件系统" App->>PM : add(name, content, type) PM->>FS : 写入 .md (含frontmatter) PM-->>App : 返回路径 App->>LC : track_access(entry) LC->>FS : 更新 access_count / last_accessed App->>LC : run_gc(dry_run=False) LC->>PM : list_entries() LC->>LC : compute_importance(qs, ac, days) alt 低于归档阈值 LC->>FS : 移动到 archive/ else 低于删除阈值且允许删除 LC->>FS : 复制至 archive/ 并删除原文件 end LC->>CP : should_compress(level, last_accessed, now) CP-->>LC : target_level? alt 需要压缩 LC->>CP : apply_compression(path, body, keywords, target) CP->>FS : 归档原始文件 CP-->>LC : compressed_body LC->>FS : 原子替换 .md (更新 frontmatter + body) end

图表来源 - agent/src/memory/persistent.py:462-578 - agent/src/memory/lifecycle.py:183-379 - agent/src/memory/compression.py:168-334

详细组件分析

记忆创建与激活

flowchart TD Start(["开始"]) --> Add["add(name, content, type)"] Add --> Sanitize["清洗/截断内容"] Sanitize --> WriteFile["写入 .md 文件"] WriteFile --> UpdateIndex["更新 MEMORY.md 索引"] UpdateIndex --> OptionalFTS{"是否启用FTS5?"} OptionalFTS --> |是| IndexFTS["index_entry(...)"] OptionalFTS --> |否| End1["结束"] IndexFTS --> End1 End1 --> TrackAccess["track_access(entry)"] TrackAccess --> UpdateFM["更新 access_count / last_accessed"] UpdateFM --> End2["结束"]

图表来源 - agent/src/memory/persistent.py:462-578 - agent/src/memory/lifecycle.py:164-178

章节来源 - agent/src/memory/persistent.py:462-578 - agent/src/memory/lifecycle.py:164-178

记忆休眠与重要性衰减

flowchart TD S(["输入: quality_score, access_count, days_since_last_access"]) --> Decay{"是否启用衰减?"} Decay --> |否| ReturnQS["返回 quality_score"] Decay --> |是| Ret["计算 retention = exp(-λ * days)"] Ret --> Bonus["计算 access_bonus = min(0.3, access_count*0.1)"] Bonus --> Raw["raw = quality_score * (retention + access_bonus)"] Raw --> Clamp["clamp(raw, 0, 1)"] Clamp --> I["返回 importance"]

图表来源 - agent/src/memory/persistent.py:75-92 - agent/src/memory/lifecycle.py:112-158

章节来源 - agent/src/memory/persistent.py:75-92 - agent/src/memory/lifecycle.py:112-158

自动垃圾回收机制

flowchart TD GStart(["run_gc(dry_run)"]) --> List["list_entries()"] List --> ForEach{"遍历条目"} ForEach --> AgeCheck{"age_days >= MIN_AGE_DAYS?"} AgeCheck --> |否| Next["下一个条目"] AgeCheck --> |是| Imp["compute_importance(qs, ac, days)"] Imp --> Threshold{"imp < DELETE_THRESHOLD 且 ENABLE_DELETE?"} Threshold --> |是| ActionDel["action=delete"] Threshold --> |否| ArchCheck{"imp < ARCHIVE_THRESHOLD?"} ArchCheck --> |是| ActionArch["action=archive"] ArchCheck --> |否| Next ActionDel --> Exec{"dry_run?"} ActionArch --> Exec Exec --> |是| Log["记录日志"] Exec --> |否| DoAction["执行归档/删除"] DoAction --> Rebuild["_rebuild_index()"] Rebuild --> Compress{"是否启用压缩?"} Compress --> |是| CPipeline["should_compress -> apply_compression -> _write_compressed"] Compress --> |否| Next Log --> Next Next --> |更多| ForEach Next --> |结束| GEnd(["结束"])

图表来源 - agent/src/memory/lifecycle.py:183-379 - agent/src/memory/compression.py:168-334

章节来源 - agent/src/memory/lifecycle.py:183-379 - agent/src/memory/compression.py:168-334

记忆压缩策略

classDiagram class CompressionPipeline { +should_compress(compression_level, last_accessed, now) str? +compress_to_daily(content, keywords) str +compress_to_digest(daily_content, keywords) str +archive_original(entry_path) Path? +apply_compression(entry_path, content, keywords, target_level) str? +estimate_retention(original, compressed) float }

图表来源 - agent/src/memory/compression.py:160-353

章节来源 - agent/src/memory/compression.py:160-353

记忆迁移与版本管理

章节来源 - agent/src/memory/hierarchy.py:92-143 - agent/src/memory/hierarchy.py:381-436 - agent/src/memory/persistent.py:222-307 - agent/src/memory/compression.py:258-291

生命周期监控工具

章节来源 - agent/src/memory/persistent.py:309-438 - agent/src/memory/search_index.py:252-302 - agent/src/memory/lifecycle.py:300-318

依赖关系分析

graph LR P["PersistentMemory"] --> L["MemoryLifecycle"] L --> C["CompressionPipeline"] P --> H["MemoryHierarchy"] P --> S["MemorySearchIndex"] L --> |"可选"| SL["SemanticLinker"] P --> |"可选"| SL

图表来源 - agent/src/memory/persistent.py:196-637 - agent/src/memory/lifecycle.py:71-421 - agent/src/memory/compression.py:160-353 - agent/src/memory/hierarchy.py:34-436 - agent/src/memory/search_index.py:113-481

章节来源 - agent/src/memory/persistent.py:196-637 - agent/src/memory/lifecycle.py:71-421

性能考量

[本节为通用指导,无需特定文件引用]

故障排查指南

章节来源 - agent/src/memory/lifecycle.py:300-318 - agent/src/memory/search_index.py:160-173 - agent/src/memory/persistent.py:41-73

结论

记忆生命周期管理通过质量评分、访问追踪、重要性衰减与垃圾回收形成闭环,结合三级压缩与层级路由显著提升存储效率与检索性能。FTS5全文检索与语义链接进一步增强可用性。通过环境变量灵活控制功能开关,配合归档与原子写保障数据安全与可恢复性。建议在生产环境逐步启用Tier 2特性,并结合监控与日志持续优化。

[本节为总结,无需特定文件引用]

附录:配置与最佳实践

章节来源 - agent/src/config/env_schema.py:411-546 - agent/tests/test_memory_lifecycle.py:313-330