docs(wiki): 重构为模块化知识库 — 按模块组织而非按文档类型
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
问题: 旧 wiki 按文档类型组织(architecture/data-flows/file-map), 修复 Butler Router 需要读 4 个文件才能拼凑全貌。 且 SaaS Relay 主路径 vs 本地降级的优先级描述不准确。 重构为模块化结构,每个模块页自包含: - 设计思想: 为什么这样设计 - 代码逻辑: 数据流 + 关键代码 - 关联模块: 依赖关系 新增模块页: - routing.md: 客户端路由 (明确 SaaS Relay 是主路径,不是本地模式) - chat.md: 聊天系统 (3种实现 + Token Pool 中转机制) - butler.md: 管家模式 (路由/冷启动/痛点/双模式UI) - memory.md: 记忆管道 (提取→FTS5→检索→注入) - saas.md: SaaS平台 (认证/Token池/计费/Admin) - middleware.md: 中间件链 (14层 + 优先级) - hands-skills.md: Hands(9) + Skills(75) - pipeline.md: Pipeline DSL 删除旧文件: architecture.md, data-flows.md, module-status.md, file-map.md (内容已分布到对应模块页中) 添加 .gitignore 排除 Obsidian 工作区状态文件
This commit is contained in:
106
wiki/memory.md
Normal file
106
wiki/memory.md
Normal file
@@ -0,0 +1,106 @@
|
||||
---
|
||||
title: 记忆管道
|
||||
updated: 2026-04-11
|
||||
status: active
|
||||
tags: [module, memory, growth]
|
||||
---
|
||||
|
||||
# 记忆管道 (Memory Pipeline)
|
||||
|
||||
> 从 [[index]] 导航。关联模块: [[chat]] [[middleware]]
|
||||
|
||||
## 设计思想
|
||||
|
||||
**核心问题: LLM 无状态,每次对话都从零开始。需要从历史对话中积累知识。**
|
||||
|
||||
设计决策:
|
||||
1. **闭环架构** — 对话 → 提取 → 索引 → 检索 → 注入,形成正向循环
|
||||
2. **FTS5 + TF-IDF** — 轻量级语义搜索,不依赖外部 embedding 服务
|
||||
3. **Token 预算控制** — 注入 system prompt 时有 token 上限,防止溢出
|
||||
4. **EmbeddingClient trait 已预留** — 接口已写,激活即可升级到向量搜索
|
||||
|
||||
## 代码逻辑
|
||||
|
||||
### 闭环数据流
|
||||
|
||||
```
|
||||
[提取] 对话发生
|
||||
→ MemoryExtractor (crates/zclaw-growth/src/extractor.rs)
|
||||
→ LLM 提取: 偏好 (Preference) / 知识 (Knowledge) / 经验 (Experience)
|
||||
→ MemoryEntry { agent_id, memory_type, content, keywords, importance }
|
||||
|
||||
[索引] 存储
|
||||
→ SqliteStorage.store() (crates/zclaw-growth/src/storage/sqlite.rs)
|
||||
→ SQLite + FTS5 全文索引
|
||||
→ TF-IDF 权重计算
|
||||
→ (可选) EmbeddingClient.embed() → 向量存储 [未激活]
|
||||
|
||||
[检索] 查询时
|
||||
→ MemoryRetriever.retrieve(query, agent_id) (crates/zclaw-growth/src/retriever.rs)
|
||||
→ QueryAnalyzer: 意图分类 (Preference/Knowledge/Experience/Code/General)
|
||||
→ 中文+英文关键词提取 + CJK 支持 + 同义词扩展
|
||||
→ SemanticScorer: TF-IDF 匹配 (70% embedding / 30% TF-IDF, embedding 未激活)
|
||||
→ 返回 top-k 相关记忆
|
||||
|
||||
[注入] 给 LLM
|
||||
→ PromptInjector.inject(system_prompt, memories) (crates/zclaw-growth/src/injector.rs)
|
||||
→ token 预算控制
|
||||
→ 格式化为结构化上下文块
|
||||
→ 插入到 system prompt 中
|
||||
```
|
||||
|
||||
### 经验存储 (ExperienceStore)
|
||||
|
||||
Hermes 管线 Chunk1 新增:
|
||||
|
||||
```
|
||||
ExperienceStore (crates/zclaw-growth/src/experience_store.rs)
|
||||
→ CRUD 封装: pain → solution → outcome 结构化经验
|
||||
→ 底层使用 VikingAdapter
|
||||
→ URI scheme: agent://{agent_id}/experience/...
|
||||
```
|
||||
|
||||
### 查询意图分类
|
||||
|
||||
`QueryAnalyzer` 支持 5 种意图:
|
||||
|
||||
| 意图 | 说明 | 检索策略 |
|
||||
|------|------|----------|
|
||||
| Preference | 用户偏好 | 精确匹配 preference 类型记忆 |
|
||||
| Knowledge | 知识查询 | 语义搜索 knowledge 类型 |
|
||||
| Experience | 经验检索 | 时间+相关性排序 |
|
||||
| Code | 代码相关 | 关键词优先 |
|
||||
| General | 通用 | 混合策略 |
|
||||
|
||||
### Embedding 基础设施 (已写未激活)
|
||||
|
||||
```
|
||||
EmbeddingClient trait (crates/zclaw-growth/src/retrieval/semantic.rs)
|
||||
→ async embed(&str) -> Vec<f32>
|
||||
→ is_available() -> bool
|
||||
→ 当前实现: NoOpEmbeddingClient (始终返回空)
|
||||
|
||||
SaaS 侧:
|
||||
→ pgvector HNSW 索引就绪 (knowledge_chunks 表, vector(1536))
|
||||
→ generate_embedding Worker: 内容分块 + 中文关键词提取 (Phase 2 embedding deferred)
|
||||
```
|
||||
|
||||
## 关联模块
|
||||
|
||||
- [[chat]] — 对话是记忆的输入源
|
||||
- [[butler]] — 管家模式可能利用记忆提供个性化响应
|
||||
- [[middleware]] — 记忆注入通过中间件或 hook 实现
|
||||
|
||||
## 关键文件
|
||||
|
||||
| 文件 | 职责 |
|
||||
|------|------|
|
||||
| `crates/zclaw-growth/src/extractor.rs` | LLM 记忆提取 |
|
||||
| `crates/zclaw-growth/src/retriever.rs` | 语义检索 |
|
||||
| `crates/zclaw-growth/src/injector.rs` | Prompt 注入 (token 预算) |
|
||||
| `crates/zclaw-growth/src/experience_store.rs` | 经验 CRUD |
|
||||
| `crates/zclaw-growth/src/storage/sqlite.rs` | FTS5 + TF-IDF 核心 |
|
||||
| `crates/zclaw-growth/src/retrieval/semantic.rs` | EmbeddingClient trait |
|
||||
| `crates/zclaw-growth/src/retrieval/query.rs` | 意图分类 + CJK 关键词 |
|
||||
| `desktop/src/store/memoryStore.ts` | 前端记忆 UI |
|
||||
| `desktop/src-tauri/src/memory/` | Tauri 记忆命令桥接 |
|
||||
Reference in New Issue
Block a user