docs(wiki): 记录跨会话记忆链路 + 管家Tab记忆展示架构
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
- memory.md: 添加"跨会话记忆完整链路"章节,覆盖初始化/写入/读取/展示/数据库架构/关键文件地图 - butler.md: 添加"管家Tab记忆展示"章节,记录MemorySection数据源和组件结构
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: 记忆管道
|
||||
updated: 2026-04-21
|
||||
updated: 2026-04-22
|
||||
status: active
|
||||
tags: [module, memory, growth]
|
||||
---
|
||||
@@ -66,6 +66,84 @@ tags: [module, memory, growth]
|
||||
→ 插入到 system prompt 中
|
||||
```
|
||||
|
||||
### 跨会话记忆完整链路(2026-04-22 验证通过)
|
||||
|
||||
> **重要:修改任何环节前请先阅读此链路,避免引入断裂。**
|
||||
|
||||
```
|
||||
[初始化] kernel_init (desktop/src-tauri/src/kernel_commands/lifecycle.rs)
|
||||
① viking_commands::init_storage() → 初始化 SqliteStorage → memories.db
|
||||
② Kernel::boot(config) → 创建 MemoryStore (data.db) + in-memory VikingAdapter
|
||||
③ viking_commands::get_storage() → SqliteStorage 包装为 VikingAdapter → kernel.set_viking()
|
||||
↑ 此时 GrowthIntegration 缓存被清除
|
||||
④ TauriExtractionDriver::new(driver, model) → kernel.set_extraction_driver()
|
||||
↑ GrowthIntegration 缓存再次清除
|
||||
⑤ [首次聊天时] create_middleware_chain() 重建 GrowthIntegration:
|
||||
- GrowthIntegration::new(self.viking.clone()) ← 持久化 SqliteStorage
|
||||
- .with_llm_driver(extraction_driver) ← LLM 提取能力
|
||||
- .with_profile_store(UserProfileStore::new(memory.pool())) ← data.db 画像持久化
|
||||
- .configure_embedding(embedding_client) ← 语义检索(可选)
|
||||
→ 缓存到 kernel.growth (Mutex<Arc<GrowthIntegration>>)
|
||||
→ MemoryMiddleware::new(growth) 注册到中间件链 (priority=150)
|
||||
|
||||
[写入] after_completion — 记忆提取 (crates/zclaw-runtime/src/middleware/memory.rs)
|
||||
MemoryMiddleware.after_completion(ctx)
|
||||
→ 30秒去重: should_extract(agent_id) — 同一 agent 30秒内跳过
|
||||
→ growth.extract_combined(agent_id, messages, session_id)
|
||||
→ MemoryExtractor.extract_combined() (crates/zclaw-growth/src/extractor.rs)
|
||||
→ LLM 单次调用 (COMBINED_EXTRACTION_PROMPT + 对话文本)
|
||||
→ 返回 CombinedExtraction { memories, experiences, profile_signals }
|
||||
→ extractor.store_memories(agent_id, memories)
|
||||
→ VikingAdapter → SqliteStorage.store() → memories.db (FTS5 索引)
|
||||
→ experience_extractor.persist_experiences(agent_id, combined)
|
||||
→ agent://{agent_id}/experience/... URI
|
||||
→ profile_updater.collect_updates(combined)
|
||||
→ UserProfileStore.update_field/add_recent_topic/add_pain_point/add_preferred_tool
|
||||
→ 写入 data.db.user_profiles 表 (user_id = agent_id)
|
||||
|
||||
[读取] before_completion — 记忆检索+注入 (每个新请求)
|
||||
MemoryMiddleware.before_completion(ctx)
|
||||
→ growth.enhance_prompt(agent_id, system_prompt, user_input)
|
||||
→ retriever.retrieve(agent_id, user_input)
|
||||
→ 按 agent_id 构建搜索范围: agent://{agent_id}/{type}
|
||||
→ QueryAnalyzer 意图分析 + IdentityRecall 43+ 模式匹配
|
||||
→ FTS5 全文搜索 + TF-IDF 评分 + 语义重排序
|
||||
→ 弱身份 fallback: <3 结果 + weak_identity → 补充 broad retrieval
|
||||
→ injector.inject_with_format(system_prompt, memories)
|
||||
→ 按 token 预算注入结构化上下文
|
||||
|
||||
[展示] 管家Tab — 前端读取 (desktop/src/components/ButlerPanel/)
|
||||
MemorySection.tsx:
|
||||
→ listVikingResources("agent://{agent_id}/") → viking_ls → memories.db
|
||||
→ readVikingResource(uri, "L1") → viking_read → L1 摘要
|
||||
→ 按类型分组: 偏好/知识/经验/会话
|
||||
→ agent_get(agentId) → kernel.memory() → UserProfileStore.get() → data.db
|
||||
→ 用户画像卡片: 行业/角色/沟通风格/近期话题/常用工具
|
||||
|
||||
[数据库架构]
|
||||
memories.db (SqliteStorage, viking_commands 管理)
|
||||
→ memories 表: URI + memory_type + content + FTS5 索引
|
||||
→ memories_fts 虚拟表: FTS5 trigram tokenizer (CJK 支持)
|
||||
data.db (MemoryStore, kernel 管理)
|
||||
→ user_profiles 表: user_id + industry + role + recent_topics(JSON) + ...
|
||||
→ agents 表: agent 配置
|
||||
→ sessions 表: 会话数据
|
||||
|
||||
[关键文件地图]
|
||||
crates/zclaw-kernel/src/kernel/mod.rs create_middleware_chain() + memory()
|
||||
crates/zclaw-runtime/src/middleware/memory.rs MemoryMiddleware before/after
|
||||
crates/zclaw-runtime/src/growth.rs GrowthIntegration 闭环编排
|
||||
crates/zclaw-growth/src/extractor.rs extract_combined() LLM 提取
|
||||
crates/zclaw-growth/src/retriever.rs retrieve() FTS5+TF-IDF 检索
|
||||
crates/zclaw-growth/src/injector.rs inject_with_format() prompt 注入
|
||||
crates/zclaw-growth/src/storage/sqlite.rs SqliteStorage (memories.db)
|
||||
crates/zclaw-memory/src/user_profile_store.rs UserProfileStore (data.db)
|
||||
desktop/src-tauri/src/viking_commands.rs viking_ls/viking_read Tauri 命令
|
||||
desktop/src-tauri/src/kernel_commands/agent.rs agent_get (读取 UserProfile)
|
||||
desktop/src-tauri/src/kernel_commands/lifecycle.rs kernel_init (初始化链路)
|
||||
desktop/src/components/ButlerPanel/MemorySection.tsx 前端展示
|
||||
```
|
||||
|
||||
### 经验存储 (ExperienceStore)
|
||||
|
||||
Hermes 管线 Chunk1 新增:
|
||||
|
||||
Reference in New Issue
Block a user