记忆存储系统

📎 引用文件

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

目录

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

简介

本文件为 Vibe-Trading 记忆存储系统的权威技术文档,聚焦分层记忆架构(工作记忆、短期记忆、长期记忆)、持久化机制、数据压缩算法、检索优化策略、语义链接构建与维护、跨会话自动召回机制、配置选项与性能调优、监控方法以及最佳实践(清理与版本管理)。该系统以纯文件为核心载体,通过可选的层级目录路由、全文索引、BM25 语义链接和三级压缩管线,实现高可用、可扩展且可观测的记忆能力。

项目结构

记忆子系统位于 agent/src/memory,围绕以下模块组织: - persistent.py:持久化入口,负责读写 .md 条目、索引 MEMORY.md、去重、重要性计算与基础检索。 - hierarchy.py:按 memory_type 分类的目录路由与扫描,支持 O(类别规模) 范围搜索与扁平兼容迁移。 - compression.py:三级压缩(raw → daily → digest),基于 TF-IDF 关键句抽取与摘要生成,并归档原文。 - semantic_links.py:基于 BM25 的语义链接发现与持久化(.relations.json),支持显式 wikilink 解析。 - lifecycle.py:质量评分、访问追踪、衰减与垃圾回收(GC);在 GC 中触发压缩。 - search_index.py:SQLite FTS5 全文索引,提供 O(log n) 检索与自动重建。 - config/env_schema.py:集中化的环境变量与开关(VT_MEMORY_*),提供 off/on/full 预设。 - config/accessor.py:线程安全的配置单例访问器。

graph TB A["PersistentMemory<br/>持久化与索引"] --> B["MemoryHierarchy<br/>目录路由"] A --> C["CompressionPipeline<br/>三级压缩"] A --> D["SemanticLinker<br/>语义链接"] A --> E["MemorySearchIndex<br/>FTS5 索引"] L["MemoryLifecycle<br/>质量/衰减/GC"] --> A L --> C subgraph "配置" CFG["EnvConfig<br/>VT_MEMORY_*"] end CFG --> A CFG --> L

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

章节来源 - agent/src/memory/persistent.py:196-637 - agent/src/config/env_schema.py:461-537

核心组件

章节来源 - agent/src/memory/persistent.py:122-143 - agent/src/memory/hierarchy.py:34-90 - agent/src/memory/compression.py:160-257 - agent/src/memory/semantic_links.py:158-231 - agent/src/memory/lifecycle.py:71-178 - agent/src/memory/search_index.py:113-206

架构总览

记忆系统采用“工作记忆(内存快照)—短期记忆(近期条目与高频访问)—长期记忆(归档/压缩/低重要性)”的分层设计: - 工作记忆:进程内缓存的 MEMORY.md 快照,用于快速注入系统提示。 - 短期记忆:最近写入或频繁访问的条目,保持 raw 级别,便于即时使用。 - 长期记忆:经 GC 判定为低重要性或长时间未访问的条目,进入 archive 或压缩至 daily/digest。

sequenceDiagram participant U as "调用方" participant PM as "PersistentMemory" participant HL as "MemoryHierarchy" participant SL as "SemanticLinker" participant SI as "MemorySearchIndex" participant LC as "MemoryLifecycle" U->>PM : add(name, content, type) PM->>HL : route_entry(type, slug.md) HL-->>PM : path PM->>PM : 写入frontmatter+body PM->>SI : index_entry(id,title,desc,body) PM->>SL : discover_links(...) SL-->>PM : links PM->>PM : _update_index() Note over PM,SL : 可选:FTS5 索引与语义链接

图表来源 - agent/src/memory/persistent.py:462-578 - agent/src/memory/hierarchy.py:70-90 - agent/src/memory/semantic_links.py:179-231 - agent/src/memory/search_index.py:207-241

详细组件分析

持久化与索引(PersistentMemory)

flowchart TD Start(["添加记忆"]) --> Dup{"是否重复?"} Dup --> |是| Block["拒绝写入"] Dup --> |否| Route["路由到目录"] Route --> Write["写入 frontmatter + body"] Write --> Index["更新 MEMORY.md"] Index --> FTS{"FTS5 启用?"} FTS --> |是| AddIdx["index_entry"] FTS --> |否| SkipIdx["跳过"] AddIdx --> Links{"链接启用?"} SkipIdx --> Links Links --> |是| Discover["discover_links"] Links --> |否| End(["完成"]) Discover --> End

图表来源 - agent/src/memory/persistent.py:440-578 - agent/src/memory/search_index.py:207-241 - agent/src/memory/semantic_links.py:179-231

章节来源 - agent/src/memory/persistent.py:122-143 - agent/src/memory/persistent.py:196-307 - agent/src/memory/persistent.py:358-438 - agent/src/memory/persistent.py:462-578

分层目录路由(MemoryHierarchy)

classDiagram class MemoryHierarchy { +base_dir Path +route_entry(memory_type, filename) Path +scan_all() Path[] +scan_category(category) Path[] +rebuild_index(entries) void +prune_search_scope(query_tokens, category_filter) Path[] +migrate_flat_entry(file_path, memory_type) Path? }

图表来源 - agent/src/memory/hierarchy.py:34-90 - agent/src/memory/hierarchy.py:145-198 - agent/src/memory/hierarchy.py:200-379 - agent/src/memory/hierarchy.py:381-436

章节来源 - agent/src/memory/hierarchy.py:34-90 - agent/src/memory/hierarchy.py:145-198 - agent/src/memory/hierarchy.py:200-379 - agent/src/memory/hierarchy.py:381-436

三级压缩(CompressionPipeline)

flowchart TD S(["开始"]) --> Check{"是否需要压缩?"} Check --> |否| End(["结束"]) Check --> |是| Archive["归档原文"] Archive --> Level{"目标级别"} Level --> |daily| Daily["关键句抽取"] Level --> |digest| Digest["关键词摘要"] Daily --> Retention["估计保留率"] Digest --> Retention Retention --> End

图表来源 - agent/src/memory/compression.py:168-193 - agent/src/memory/compression.py:194-257 - agent/src/memory/compression.py:258-353

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

语义链接(SemanticLinker)

sequenceDiagram participant Q as "查询条目" participant SL as "SemanticLinker" participant DB as ".relations.json" Q->>SL : discover_links(entry_title, tokens, corpus) SL->>SL : compute_idf(corpus) SL->>SL : compute_bm25_score(tokens, doc_tokens, idf, avg_dl) SL-->>Q : [(target_file, score)] Q->>DB : save_relations(path, links)

图表来源 - agent/src/memory/semantic_links.py:73-151 - agent/src/memory/semantic_links.py:179-231 - agent/src/memory/semantic_links.py:232-319 - agent/src/memory/semantic_links.py:321-372

章节来源 - agent/src/memory/semantic_links.py:158-372

生命周期管理(MemoryLifecycle)

flowchart TD A(["运行GC"]) --> Scan["扫描所有条目"] Scan --> Score["计算importance"] Score --> Decide{"低于阈值?"} Decide --> |是| Action{"归档/删除"} Decide --> |否| Next["下一个条目"] Action --> Compress{"压缩启用?"} Compress --> |是| Trigger["apply_compression"] Compress --> |否| Next Trigger --> Next Next --> Done(["结束"])

图表来源 - agent/src/memory/lifecycle.py:183-273 - agent/src/memory/lifecycle.py:275-318 - agent/src/memory/lifecycle.py:323-421

章节来源 - agent/src/memory/lifecycle.py:71-178 - agent/src/memory/lifecycle.py:183-421

全文检索(MemorySearchIndex)

sequenceDiagram participant PM as "PersistentMemory" participant SI as "MemorySearchIndex" participant DB as "SQLite FTS5" PM->>SI : index_entry(id,title,desc,keywords,body) SI->>DB : INSERT OR REPLACE (memories) DB-->>SI : 触发器写入 fts PM->>SI : search(query) SI->>DB : MATCH query DB-->>SI : results SI-->>PM : MemoryMatch[]

图表来源 - agent/src/memory/search_index.py:147-196 - agent/src/memory/search_index.py:207-241 - agent/src/memory/search_index.py:252-303 - agent/src/memory/search_index.py:304-356

章节来源 - agent/src/memory/search_index.py:113-481

依赖关系分析

graph LR CFG["EnvConfig.memory"] --> PM["PersistentMemory"] CFG --> LC["MemoryLifecycle"] PM --> HI["MemoryHierarchy"] PM --> SI["MemorySearchIndex"] PM --> SL["SemanticLinker"] LC --> CP["CompressionPipeline"]

图表来源 - agent/src/config/env_schema.py:461-537 - agent/src/memory/persistent.py:196-637 - agent/src/memory/lifecycle.py:71-421

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

性能考量

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

故障排查指南

章节来源 - agent/src/memory/search_index.py:160-173 - agent/src/memory/search_index.py:252-303 - agent/src/memory/semantic_links.py:232-319 - agent/src/memory/compression.py:258-334 - agent/src/memory/lifecycle.py:183-202 - agent/src/memory/persistent.py:41-73

结论

Vibe-Trading 记忆存储系统通过分层架构与可选的高级特性(目录路由、FTS5 索引、语义链接、三级压缩),在保证数据一致性与可恢复性的前提下,实现了高效、可扩展且可观测的记忆能力。合理配置与调优可在不同规模与负载下取得良好平衡。建议在生产环境逐步启用 Tier 2 特性,并结合 GC 与压缩策略进行容量治理。

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

附录

配置选项与环境变量

章节来源 - agent/src/config/env_schema.py:461-537

监控与可观测性

章节来源 - agent/src/memory/compression.py:324-334 - agent/src/memory/semantic_links.py:232-319 - agent/src/memory/search_index.py:160-173 - agent/src/memory/lifecycle.py:300-318

最佳实践

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