记忆管理系统

📎 引用文件

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

目录

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

简介

本文件系统性地梳理 Vibe-Trading 的记忆管理系统,围绕“分层记忆架构、持久化机制、自动回忆、生命周期管理、存储优化”五大主题展开。系统以文件为持久化载体,通过工作记忆(进程内快照)、短期记忆(会话级索引与缓存)和长期记忆(磁盘上的 Markdown 条目)协同工作;提供基于 TF-IDF/BM25 的压缩、SQLite FTS5 全文检索、语义链接发现、以及质量衰减与垃圾回收等能力。所有功能均通过环境变量开关进行分级启用,便于在生产环境中按需裁剪。

项目结构

记忆子系统位于 agent/src/memory 下,按职责拆分为多个模块: - persistent.py:跨会话持久化核心,负责读写 .md 条目、构建 MEMORY.md 索引、基础搜索与去重 - hierarchy.py:层级目录路由与扫描,将条目按类型分目录组织,提升 O(类别规模) 范围搜索 - compression.py:三级压缩管线(原始→每日摘要→要点摘要),归档原内容并估算信息保留率 - search_index.py:SQLite FTS5 全文检索索引,支持 CJK 大模型友好分词与查询 - lifecycle.py:生命周期管理,包括质量评分、访问追踪、重要性衰减、垃圾回收与压缩触发 - semantic_links.py:基于 BM25 的语义链接发现与持久化,支持显式 wikilink 解析 - env_schema.py:统一的环境变量配置,包含记忆系统的预设与开关 - CLI memory.py:命令行入口,封装列表、查看、搜索、删除等操作

graph TB A["PersistentMemory<br/>持久化核心"] --> B["MemoryHierarchy<br/>层级目录路由"] A --> C["MemorySearchIndex<br/>FTS5 全文索引"] A --> D["SemanticLinker<br/>语义链接"] E["CompressionPipeline<br/>压缩管线"] --> A F["MemoryLifecycle<br/>生命周期管理"] --> A G["EnvConfig.memory<br/>环境开关"] --> A G --> B G --> C G --> D G --> E G --> F

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

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

核心组件

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

架构总览

记忆系统采用“工作记忆 + 短期记忆 + 长期记忆”的分层设计: - 工作记忆:进程内的 MEMORY.md 快照(snapshot),用于系统提示注入与快速读取 - 短期记忆:内存中的近期哈希去重窗口、会话级质量增量、临时搜索结果缓存 - 长期记忆:磁盘上的 .md 条目,按类型分目录组织,附带 .relations.json 语义链接与 archive 归档

sequenceDiagram participant U as "调用方" participant PM as "PersistentMemory" participant HI as "MemoryHierarchy" participant SI as "MemorySearchIndex" participant SL as "SemanticLinker" participant CL as "MemoryLifecycle" U->>PM : add(name, content, type, description) PM->>HI : route_entry(type, slug.md) HI-->>PM : path PM->>PM : 写入 frontmatter + body PM->>SI : index_entry(id, title, desc, keywords, body) PM->>SL : discover_links + save_relations PM-->>U : path U->>PM : find_relevant(query) alt FTS5 可用 PM->>SI : search(query) SI-->>PM : matches PM->>SL : load_relations(expand) PM-->>U : top results else 回退 PM->>PM : 关键词加权扫描 PM-->>U : top results end U->>CL : run_gc(dry_run=False) CL->>PM : list_entries() CL->>CL : compute_importance(...) CL->>CL : archive/delete if below thresholds CL->>PM : _rebuild_index() CL-->>U : actions log

图表来源 - persistent.py:462-578 - persistent.py:358-438 - search_index.py:207-355 - semantic_links.py:179-230 - lifecycle.py:183-273

详细组件分析

分层记忆架构与存储策略

flowchart TD Start(["写入入口"]) --> Dedup["检查去重窗口"] Dedup --> |命中| Block["拒绝写入"] Dedup --> |未命中| Route["层级路由/文件名生成"] Route --> Write["写入 frontmatter + 正文"] Write --> Index["更新 MEMORY.md 索引"] Index --> Links{"是否启用语义链接?"} Links --> |是| Discover["发现并保存 .relations.json"] Links --> |否| Done["完成"] Discover --> Done

图表来源 - persistent.py:440-578 - hierarchy.py:70-90

章节来源 - persistent.py:196-637 - hierarchy.py:34-436

持久化记忆的机制:压缩、索引构建与语义搜索

classDiagram class PersistentMemory { +add(...) +find_relevant(...) -_scan_entries() -_update_index(...) -_rebuild_index() } class MemorySearchIndex { +index_entry(...) +search(...) +rebuild_all(...) -_prepare_cjk(...) -_sanitize_fts_query(...) } class SemanticLinker { +discover_links(...) +save_relations(...) +load_relations(...) +resolve_wikilinks(...) } class CompressionPipeline { +should_compress(...) +compress_to_daily(...) +compress_to_digest(...) +archive_original(...) +apply_compression(...) } PersistentMemory --> MemorySearchIndex : "索引/搜索" PersistentMemory --> SemanticLinker : "链接发现/扩展" PersistentMemory --> CompressionPipeline : "压缩触发(由生命周期)"

图表来源 - persistent.py:196-637 - search_index.py:113-481 - semantic_links.py:158-372 - compression.py:160-353

章节来源 - compression.py:160-353 - search_index.py:113-481 - semantic_links.py:158-372 - persistent.py:358-438

自动回忆:相关性匹配、上下文注入与记忆融合

sequenceDiagram participant Q as "查询" participant PM as "PersistentMemory" participant SI as "FTS5 索引" participant SL as "语义链接" Q->>PM : find_relevant(query) alt FTS5 可用 PM->>SI : search(query) SI-->>PM : 匹配结果 PM->>SL : load_relations(扩展) SL-->>PM : 关联条目 PM-->>Q : 融合后 Top-K else 回退 PM->>PM : 关键词加权扫描 PM-->>Q : Top-K end

图表来源 - persistent.py:358-438 - search_index.py:252-302 - semantic_links.py:282-319

章节来源 - persistent.py:358-438 - search_index.py:252-302 - semantic_links.py:282-319

生命周期管理:创建、更新、删除与垃圾回收

flowchart TD GCStart["GC 启动"] --> Scan["扫描所有条目"] Scan --> AgeCheck{"年龄 > 最小天数?"} AgeCheck --> |否| Next["下一个条目"] AgeCheck --> |是| Imp["计算 importance"] Imp --> Threshold{"低于归档/删除阈值?"} Threshold --> |是| Action{"归档 or 删除"} Action --> Rebuild["重建索引"] Threshold --> |否| Next Rebuild --> Next Next --> End{"结束?"} End --> |否| Scan End --> |是| Compress{"是否启用压缩?"} Compress --> |是| Cycle["对老化条目执行压缩"] Compress --> |否| Done["完成"] Cycle --> Done

图表来源 - lifecycle.py:183-273 - lifecycle.py:275-318 - persistent.py:328-356

章节来源 - lifecycle.py:71-421 - persistent.py:328-356

层级目录与索引构建

flowchart TD Entry["新条目"] --> Type{"已知类型?"} Type --> |是| CatDir["确保分类目录存在"] Type --> |否| Root["写入根目录"] CatDir --> Path["生成路径"] Root --> Path Path --> Write["写入 .md"] Write --> Index["重建 .hierarchy.yaml"]

图表来源 - hierarchy.py:70-90 - hierarchy.py:145-176 - hierarchy.py:200-261 - hierarchy.py:313-379

章节来源 - hierarchy.py:34-436

依赖关系分析

graph LR Env["EnvConfig.memory"] --> PM["PersistentMemory"] Env --> MH["MemoryHierarchy"] Env --> SI["MemorySearchIndex"] Env --> SL["SemanticLinker"] Env --> CP["CompressionPipeline"] Env --> ML["MemoryLifecycle"] ML --> PM PM --> MH PM --> SI PM --> SL ML --> CP

图表来源 - env_schema.py:461-537 - persistent.py:196-637 - lifecycle.py:71-421

章节来源 - env_schema.py:461-537 - persistent.py:196-637 - lifecycle.py:71-421

性能考虑

[本节为通用性能建议,不直接分析具体文件]

故障排查指南

章节来源 - search_index.py:147-196 - search_index.py:252-302 - semantic_links.py:232-319 - compression.py:258-334 - lifecycle.py:183-273

结论

Vibe-Trading 的记忆管理系统以文件为核心,结合层级目录、全文索引、语义链接与压缩归档,构建了可扩展、可观测、可维护的跨会话记忆体系。通过环境变量预设与模块化开关,可在不同部署场景灵活启用功能。配合生命周期管理与性能优化策略,系统在大规模记忆场景下仍能保持高效与稳定。

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

附录:使用示例与最佳实践

章节来源 - memory.py:24-64 - env_schema.py:461-537 - semantic_links.py:321-344 - search_index.py:304-355