Appearance
04 · RAG 与记忆
架构剖析第四篇:对话树、RAG 检索、记忆分层与写入。这是 Familiars 的"长期记忆"核心。 对应「技术架构长视频」章节 4。来源
ARCHITECTURE.md§5。
§5.1 为什么不用向量数据库(Pinecone / Weaviate / Qdrant)
- 数据量级(单用户、几千~上万 embedding)内存 + SQLite 就够;
- 免去一套服务和运维;向量存在
workspace/与familiars.db里,隐私不出本机; - 后续要换外部向量库也很直接(抽象在
memory_store层)。
§5.2 RAG 架构
- 每次构建上下文:稠密召回(bge-m3) + 时间衰减 + 树距离的组合分:
score = α·cos + e^{-β·Δt} + γ·tree_distance - embedding 由
BAAI/bge-m3提供,所有组件共用这套向量:DialogTree、AssistantRouter、RAG 稠密召回、rewriter 数据管线 → 全仓可比向量。 rewriter负责对话改写(query 重写),提升召回。
§5.3 记忆系统
| 作用域轴 | 持久化到 |
|---|---|
dialogue | workspace/agents/agent_<id>/dialogue_<n>/ |
agent | workspace/agents/agent_<id>/ |
user / identity | workspace/(USER.md、IDENTITY.md、memory layers) |
ephemeral | 每轮临时,回合结束即清除 |
类别轴:event / state / profile / procedure / directive,每类有各自的衰减常数。
- 写入链:
MemoryWriter决定什么值得记(memorizer-writer 小模型)→ 分类 → 散布到对应 scope/category 存储; memorizer 分 reader/consolidator 子模块(src/models/memorizer/),decider 可被DeciderService驱逐,DialogueManager.release_memory提供 JIT 按需装载。 - 读取链:每次 NL 质问任务 →
DialogueManager组装历史 → RAG 检索 → 上下文注入。 - 可观测性:
memory writer-status(CLI)/GET /api/memory_status(记忆规模/命中)、POST /api/agents/{id}/release-memory(手动释放常驻)。
视频时间点映射
| 视频时间点 | 内容 |
|---|---|
| (待录制) | 记忆全景:作用域×类别矩阵 |
| (待录制) | RAG 打分:死记 + 时间衰减 + 树距离怎么协作 |
| (待录制) | rewriter 对话改写 demo |
下一篇:05-持久化层 →
