分层记忆架构

📎 引用文件

本文引用的文件 - persistent.py - hierarchy.py - lifecycle.py - compression.py - search_index.py - semantic_links.py - test_memory_lifecycle.py

目录

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

简介

本文件为 Vibe-Trading 的分层记忆架构提供系统化、可操作的文档。该架构将“工作记忆”“短期记忆”“长期记忆”以三层设计实现: - 工作记忆(Tier 1):当前会话内快速读写、去重与索引快照,面向低延迟检索与上下文注入。 - 短期记忆(Tier 2):基于文件的持久化存储,支持分类路由、全文检索、语义链接与压缩归档。 - 长期记忆(Tier 3):生命周期管理驱动的衰减、回收与归档,确保容量可控与知识保鲜。

文档覆盖各层级存储策略、数据流转机制、生命周期管理、迁移算法、容量限制、优先级排序、配置参数、性能指标与调优建议,并给出典型使用模式与最佳实践。

项目结构

记忆子系统位于 agent/src/memory,核心模块如下: - persistent.py:持久化内存的实体、写入、读取、搜索入口与基础索引。 - hierarchy.py:按 memory_type 分类的目录路由与扫描优化。 - lifecycle.py:质量评分、重要性衰减、垃圾回收与压缩触发。 - compression.py:三级压缩管线(raw → daily → digest),保留关键信息。 - search_index.py:SQLite FTS5 全文检索索引,支持 CJK 分词与自动重建。 - semantic_links.py:BM25 语义关联发现与侧车文件维护。

graph TB A["应用/Agent"] --> B["PersistentMemory<br/>写入/读取/搜索"] B --> C["MemoryHierarchy<br/>分类路由"] B --> D["MemorySearchIndex<br/>FTS5 全文检索"] B --> E["SemanticLinker<br/>语义关联"] B --> F["MemoryLifecycle<br/>质量/衰减/GC"] F --> G["CompressionPipeline<br/>压缩归档"] B --> H["文件系统<br/>.md 条目 + 索引"] D --> I["SQLite DB<br/>memory_index.db"] G --> J["archive/<br/>原始备份"]

图表来源 - persistent.py:196-637 - hierarchy.py:34-436 - search_index.py:113-481 - semantic_links.py:158-372 - lifecycle.py:71-421 - compression.py:160-353

章节来源 - persistent.py:196-637 - hierarchy.py:34-436 - search_index.py:113-481 - semantic_links.py:158-372 - lifecycle.py:71-421 - compression.py:160-353

核心组件

章节来源 - persistent.py:122-637 - hierarchy.py:34-436 - lifecycle.py:71-421 - compression.py:160-353 - search_index.py:113-481 - semantic_links.py:158-372

架构总览

分层记忆通过“写路径”和“读路径”协同工作: - 写路径:应用调用 PersistentMemory.add(),根据配置选择是否走 hierarchy 路由;写入 .md 文件并更新 MEMORY.md 索引;可选地更新 FTS5 索引与语义链接。 - 读路径:find_relevant() 优先尝试 FTS5 检索,失败或无结果时回退到 token 加权匹配;若启用语义链接,扩展相关条目。 - 生命周期:周期性 GC 评估重要性,触发归档/删除(默认仅归档);对老化条目触发压缩,降低体积并保留关键信息。

sequenceDiagram participant App as "应用" participant PM as "PersistentMemory" participant MH as "MemoryHierarchy" participant SI as "MemorySearchIndex" participant SL as "SemanticLinker" participant FS as "文件系统" App->>PM : add(name, content, type) PM->>MH : route_entry(type, slug.md) MH-->>PM : path PM->>FS : 写入 frontmatter + body PM->>SI : index_entry(id, title, desc, keywords, body) PM->>SL : discover_links & save_relations PM-->>App : path App->>PM : find_relevant(query) PM->>SI : search(query) alt FTS5 命中 SI-->>PM : matches PM-->>App : entries else 回退 PM->>PM : token 加权匹配 PM->>SL : load_relations & expand PM-->>App : entries end

图表来源 - persistent.py:462-578 - persistent.py:358-438 - hierarchy.py:70-90 - search_index.py:207-302 - semantic_links.py:179-230

详细组件分析

工作记忆(Tier 1):会话内快速存取与快照

章节来源 - persistent.py:207-220 - persistent.py:440-460 - persistent.py:609-637

短期记忆(Tier 2):持久化存储、分类路由、检索与压缩

flowchart TD Start(["GC 周期"]) --> Scan["扫描所有条目"] Scan --> Age{"超过最小年龄?"} Age -- 否 --> Next["跳过"] Age -- 是 --> Imp["计算重要性<br/>quality/access/访问时间"] Imp --> Threshold{"低于归档阈值?"} Threshold -- 是 --> Archive["移动到 archive/"] Threshold -- 否 --> Compress{"是否应压缩?"} Compress -- 是 --> Level{"目标级别"} Level -- daily --> Daily["TF-IDF 句子抽取"] Level -- digest --> Digest["关键词摘要"] Compress -- 否 --> End(["结束"]) Archive --> Rebuild["重建索引"] Daily --> Rebuild Digest --> Rebuild Rebuild --> End

图表来源 - lifecycle.py:183-273 - compression.py:168-353 - persistent.py:630-637

章节来源 - hierarchy.py:70-176 - search_index.py:252-302 - persistent.py:358-438 - compression.py:194-353

长期记忆(Tier 3):生命周期管理与知识保鲜

classDiagram class MemoryLifecycle { +reinforce(name, event, source) bool +track_access(entry) void +run_gc(dry_run) list -_execute_gc_action(entry, action) void -_append_gc_log(actions, dry_run) void -_write_compressed(entry, compressed_body, target_level) void -_update_frontmatter_field(path, field, value) void } class PersistentMemory { +add(...) Path +find_relevant(query) List +remove(name) bool +list_entries() List } class CompressionPipeline { +should_compress(level, last_accessed, now) str? +apply_compression(path, content, keywords, level) str? +archive_original(path) Path? } MemoryLifecycle --> PersistentMemory : "封装/调用" MemoryLifecycle --> CompressionPipeline : "触发压缩"

图表来源 - lifecycle.py:71-421 - persistent.py:196-637 - compression.py:160-353

章节来源 - lifecycle.py:71-421 - persistent.py:80-92

检索与语义增强

章节来源 - search_index.py:33-94 - search_index.py:207-302 - semantic_links.py:73-150 - semantic_links.py:179-372

依赖关系分析

graph LR PM["PersistentMemory"] --> HI["MemoryHierarchy"] PM --> SI["MemorySearchIndex"] PM --> SL["SemanticLinker"] LC["MemoryLifecycle"] --> PM LC --> CP["CompressionPipeline"] SI --> DB["SQLite (FTS5)"] SL --> FS[".relations.json"] PM --> FS2[".md 文件 + 索引"]

图表来源 - persistent.py:196-637 - lifecycle.py:71-421 - search_index.py:113-481 - semantic_links.py:158-372

章节来源 - persistent.py:196-637 - lifecycle.py:71-421 - search_index.py:113-481 - semantic_links.py:158-372

性能考量

[本节为通用性能讨论,无需特定文件引用]

故障排查指南

章节来源 - lifecycle.py:300-318 - search_index.py:160-173 - compression.py:258-291 - semantic_links.py:232-281

结论

Vibe-Trading 的分层记忆架构通过工作记忆、短期记忆与长期记忆的清晰分工,实现了高效、可靠、可扩展的记忆管理。其核心优势包括: - 分层优化:工作记忆低延迟、短期记忆强检索与压缩、长期记忆保真与容量控制。 - 灵活配置:通过环境变量开关功能特性,适配不同场景需求。 - 健壮性:原子写入、文件锁、归档与回退机制保障数据安全。 - 可观测性:日志与指标便于监控与调优。

建议在生产环境中启用 FTS5、语义链接与压缩,并结合业务负载调整 GC 阈值与压缩策略,以获得最佳性能与资源利用率。

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

附录

配置参数与环境变量

章节来源 - lifecycle.py:35-53 - search_index.py:1-9 - hierarchy.py:1-7 - compression.py:1-7

容量限制与阈值

章节来源 - lifecycle.py:92-98 - persistent.py:21-33

迁移与兼容性

章节来源 - hierarchy.py:92-143 - hierarchy.py:381-436

测试与验证

章节来源 - test_memory_lifecycle.py:80-200