语义链接系统

📎 引用文件

本文引用的文件 - agent/src/memory/semantic_links.py - agent/src/memory/search_index.py - agent/src/memory/persistent.py - agent/src/memory/hierarchy.py - agent/src/memory/compression.py - agent/src/session/search.py

目录

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

简介

本文件面向 Vibe-Trading 的“语义链接系统”,系统性说明跨会话记忆中的实体关系识别与构建、上下文关联、知识图谱(以文件侧车 + FTS5 索引形式)构建、链接权重计算、相似度度量与相关性排序机制;并覆盖跨会话记忆召回策略、自动链接发现与动态更新、链接质量评估、冲突解决与版本控制,以及语义搜索的实现与应用场景。

该系统由三层能力组成: - 持久化记忆层:基于 Markdown 前元数据与层级目录组织记忆条目,提供重要性衰减、去重、压缩等能力。 - 语义链接层:通过 BM25 相似度在记忆条目间自动发现并维护关系,并以 .relations.json 侧车文件存储。 - 检索增强层:使用 SQLite FTS5 对记忆和会话消息建立倒排索引,实现 O(log n) 全文检索与相关性排序。

项目结构

语义链接系统主要位于 agent/src/memory 与 agent/src/session 两个子系统中: - memory:负责持久化记忆、层级路由、BM25 语义链接、FTS5 记忆索引、压缩归档。 - session:负责跨会话消息的 FTS5 索引与检索,支撑跨会话语义召回。

graph TB subgraph "记忆子系统" PM["PersistentMemory<br/>持久化记忆"] HIER["MemoryHierarchy<br/>层级路由"] SL["SemanticLinker<br/>BM25 语义链接"] SI["MemorySearchIndex<br/>FTS5 记忆索引"] COMP["CompressionPipeline<br/>三级压缩"] end subgraph "会话子系统" SS["SessionSearchIndex<br/>FTS5 会话索引"] end PM --> HIER PM --> SL PM --> SI PM --> COMP SS --> PM

图表来源 - agent/src/memory/persistent.py:196-637 - agent/src/memory/hierarchy.py:34-436 - agent/src/memory/semantic_links.py:158-372 - agent/src/memory/search_index.py:113-481 - agent/src/memory/compression.py:160-353 - agent/src/session/search.py:60-365

章节来源 - agent/src/memory/persistent.py:196-637 - agent/src/memory/hierarchy.py:34-436 - agent/src/memory/semantic_links.py:158-372 - agent/src/memory/search_index.py:113-481 - agent/src/memory/compression.py:160-353 - agent/src/session/search.py:60-365

核心组件

章节来源 - agent/src/memory/persistent.py:196-637 - agent/src/memory/semantic_links.py:158-372 - agent/src/memory/search_index.py:113-481 - agent/src/session/search.py:60-365 - agent/src/memory/hierarchy.py:34-436 - agent/src/memory/compression.py:160-353

架构总览

下图展示从“新增/更新记忆”到“语义链接发现与索引更新”的端到端流程,以及“跨会话检索”如何借助会话索引与记忆索引协同工作。

sequenceDiagram participant User as "用户/Agent" participant PM as "PersistentMemory" participant HIER as "MemoryHierarchy" participant SL as "SemanticLinker" participant SI as "MemorySearchIndex" participant SS as "SessionSearchIndex" User->>PM : add(name, content, type) PM->>HIER : route_entry(type, slug.md) HIER-->>PM : path PM->>PM : 写入frontmatter与正文 PM->>SL : discover_links(新条目tokens, 全量entries) SL-->>PM : links[(target,score)] PM->>SL : save_relations(path, links) PM->>SI : index_entry(id,title,desc,keywords,body) Note over PM,SS : 后续检索时,可结合会话索引进行跨会话召回

图表来源 - agent/src/memory/persistent.py:462-578 - agent/src/memory/hierarchy.py:70-90 - agent/src/memory/semantic_links.py:179-230 - agent/src/memory/search_index.py:207-239 - agent/src/session/search.py:137-192

详细组件分析

实体关系抽取与链接权重计算(BM25)

flowchart TD Start(["开始"]) --> Tokenize["分词(标题+描述+正文)"] Tokenize --> BuildCorpus["构建语料(排除自身)"] BuildCorpus --> ComputeIDF["计算IDF"] ComputeIDF --> ScoreEach["逐条计算BM25分数"] ScoreEach --> Filter{"分数>=阈值?"} Filter -- 否 --> Skip["跳过"] Filter -- 是 --> Keep["保留"] Keep --> Sort["按分数降序排序"] Sort --> Cap{"超过最大出边?"} Cap -- 是 --> Trim["截断至top-k"] Cap -- 否 --> End(["结束"]) Trim --> End Skip --> End

图表来源 - agent/src/memory/semantic_links.py:63-150 - agent/src/memory/semantic_links.py:179-230

章节来源 - agent/src/memory/semantic_links.py:63-150 - agent/src/memory/semantic_links.py:179-230 - agent/src/memory/semantic_links.py:321-344

上下文关联与知识图谱构建

graph LR A["记忆A(.md)"] --- B[".relations.json(A)"] B --> |links| C["记忆B(.md)"] B --> |links| D["记忆D(.md)"] C -.wikilink.-> E["[[hex-id]] 显式引用"]

图表来源 - agent/src/memory/semantic_links.py:232-319 - agent/src/memory/persistent.py:418-437

章节来源 - agent/src/memory/semantic_links.py:232-319 - agent/src/memory/persistent.py:418-437

跨会话记忆召回策略

sequenceDiagram participant Q as "查询" participant SS as "SessionSearchIndex" participant SI as "MemorySearchIndex" participant PM as "PersistentMemory" Q->>SS : search(query) SS-->>Q : 匹配会话列表(含snippet/rank) Q->>SI : search(query) SI-->>Q : 匹配记忆条目(含rank) Q->>PM : find_relevant(query) PM-->>Q : 结果(可包含链接扩展)

图表来源 - agent/src/session/search.py:216-267 - agent/src/memory/search_index.py:252-302 - agent/src/memory/persistent.py:358-437

章节来源 - agent/src/session/search.py:216-267 - agent/src/memory/search_index.py:252-302 - agent/src/memory/persistent.py:358-437

自动链接发现与动态更新

flowchart TD W["写入记忆"] --> T["提取tokens"] T --> S["BM25打分所有条目"] S --> R["筛选top-k并保存.relations.json"] D["删除记忆"] --> CL["清理.ralations.json"]

图表来源 - agent/src/memory/persistent.py:539-563 - agent/src/memory/semantic_links.py:232-281 - agent/src/memory/semantic_links.py:360-372

章节来源 - agent/src/memory/persistent.py:539-563 - agent/src/memory/semantic_links.py:232-281 - agent/src/memory/semantic_links.py:360-372

链接质量评估、冲突解决与版本控制

章节来源 - agent/src/memory/persistent.py:75-91 - agent/src/memory/persistent.py:440-461 - agent/src/memory/compression.py:336-353 - agent/src/memory/semantic_links.py:232-319 - agent/src/memory/search_index.py:304-355

语义搜索的实现与应用场景

章节来源 - agent/src/memory/search_index.py:33-61 - agent/src/memory/search_index.py:357-445 - agent/src/session/search.py:194-214 - agent/src/session/search.py:269-329

依赖关系分析

graph TB PM["PersistentMemory"] --> HIER["MemoryHierarchy"] PM --> SL["SemanticLinker"] PM --> SI["MemorySearchIndex"] PM --> COMP["CompressionPipeline"] SI -.可选.-> DB["SQLite FTS5"] SS["SessionSearchIndex"] -.可选.-> DB

图表来源 - agent/src/memory/persistent.py:539-578 - agent/src/memory/search_index.py:160-173 - agent/src/session/search.py:113-119

章节来源 - agent/src/memory/persistent.py:539-578 - agent/src/memory/search_index.py:160-173 - agent/src/session/search.py:113-119

性能考量

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

故障排查指南

章节来源 - agent/src/memory/persistent.py:539-578 - agent/src/memory/semantic_links.py:260-281 - agent/src/memory/search_index.py:160-173 - agent/src/memory/compression.py:258-290

结论

Vibe-Trading 语义链接系统通过 BM25 相似度、FTS5 倒排索引与层级目录组织,实现了高效、可扩展的跨会话记忆管理与知识图谱构建。系统在链接发现、检索性能、并发安全与降级策略方面具备工程化保障,适用于交易研究、策略复盘与知识复用等多类场景。未来可进一步引入向量相似度、图算法与可视化界面,增强关系挖掘与交互体验。

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

附录

[本节为补充信息,不直接分析具体文件]