给 DeepSeek Harness 装上记忆:三层记忆架构 + 混合检索(RRF) + 工具去重

📅 2026/8/22 22:12:40
给 DeepSeek Harness 装上记忆:三层记忆架构 + 混合检索(RRF) + 工具去重
给 DeepSeek Harness 装上记忆三层记忆架构 混合检索(RRF) 工具去重️标签#Agent记忆 #架构设计 #混合检索 #RRF #sqlite-vec #DeepSeek-Harness关键词Agent 记忆架构, 三层记忆, RRF 融合, sqlite-vec, FTS5 混合检索, DeepSeek Harness摘要DeepSeek HarnessDSH的记忆链路当前只出不进——旧上下文被 compaction/spill 挪走后召回靠模型自己read/grep猜路径。本文分享一套开源插件集的架构working / archival / core三层记忆 FTS5×sqlite-vec 混合检索RRF 融合 工具结果去重 KV-safe 稳定注入。不依赖任何 LLM 做元数据全部来自事件自带信息。https://github.com/QIANLING-0831/dsh-memory-plus1. 背景DSH 记忆链路是只出不进DSH 的会话流程里旧内容通过两条路离开上下文compaction有损摘要旧细节在摘要后丢失除非当时被 spillspill大结果移出上下文但召回靠模型自己read/grep猜路径索引FTS5只服务调用方主动搜索从未接回模型上下文。核心洞察把索引变成记忆 → 上下文的通道。旧内容可精确找回上下文尾部就能留短、压缩频率下降、相同内容不重复发送。2. 三层记忆 两个横切层内容写语义存储working当前上下文surface 游标每步滑动不建库就是上下文本身archival旧事件全文shadowed / log-only只追加日志不可变派生 tag 可更新派生 SQLitechunks sqlite-vec 向量 FTS5core跨会话蒸馏事实偏好/约定/环境/决策CRUD哈希去重 相似度合并派生 SQLitecore_factsdedup工具结果哈希表横切命中即指针化进程级内存skills可复用技能文件横切CRUD 后台进化DSH 原生 Markdown为什么 archival 只追加DSH 事件日志是事实源surface fold 对替换/删除有引用完整性校验对历史事件的更新只允许发生在派生层。3. 混合检索FTS5 词法 sqlite-vec 语义 → RRF 融合单靠词法或单靠向量都有短板词法漏同义、向量漏精确字符串。做法是两臂独立检索后 RRFReciprocal Rank Fusion融合Stage 1 词条精确过滤file:/tool:/hash: 零嵌入→ 候选集 Stage 2 混合检索FTS5 词法 向量语义 → RRF 融合 → 重排 Stage 3 合并候选 → 已在上下文的替换为指针 → 预算裁剪3.1 词法臂ctx.sessionQuery复用官方sessionQuery配合 CJK 修复后的 providerdsh-session-query-sqlite-cjk中文查询也能命中constpageawaitthis.ctx.sessionQuery.searchEvents({sessionId,query,limit},exec);3.2 向量臂sqlite-vecSQLite 内嵌向量检索vec0表 MATCH契合单 owner 派生库的设计——不额外起服务db.prepare(SELECT rowid, distance FROM chunk_vec WHERE embedding MATCH ? AND k ? ORDER BY distance).all(vectorToText(queryVec),k);3.3 RRF 融合两臂各返回排序列表按1/(rankk)累加分值重排k取 60。不同召回源互补中文 代码 自然语言都能覆盖。4. 增量驱动事件级增量嵌入不整库重算只对新事件分批嵌入batchEvents16、embedBatch8异步、脱热路径每批事件增量落库记录每会话last_seq水位线默认char-overlap评估嵌入零依赖、离线生产可换transformers真嵌入。5. 词条Entry标记零额外 LLM 成本实体级定位全靠事件自带元数据不让模型出钱标记来源用途tool:name事件 toolName按工具类型过滤file:pathtool/call 的path/file_path实体级定位“改过 src/a.ts 的所有内容”type:eventType事件类型层内分流surface:...surface fold 分类检索范围hash:sha256内容规范化哈希去重键seq:n-m日志区间指针化、追溯6. core 层KV-safe 的稳定注入dsh-memory-core把 workspace 事实偏好/约定/环境/决策注入每个请求的 system-prompt section。关键是稳定区块只在事实变更时罕见变化字节不变 → 前缀 KV 缓存复用写入显式模型调memory_remember哈希去重 相似度合并Mem0 式 ADD。为什么不做每步自动注入易变内容我在源码级验证过三条路径在 v0.1-rc.7 都不可行agent/pre-step会变持久化历史Token 反膨胀、llm/stream被deepFreeze锁死、system-prompt 注入易变内容会让 KV 前缀缓存整段失效。所以 recall 走模型主动调工具core 走稳定 section。7. 工具结果去重纯省输入 Tokendsh-tool-result-dedup对重复结果git status/ls/ 重复read做哈希第二次起替换为指针纯省输入 Token与记忆检索正交。8. 组合起来模型侧得到memory_search(query, limit, max_chars, file?)archival 混合召回输出有界memory_remember(content, topic?)写 core 事实skill_write / skill_delete / skill_list沉淀可复用技能见姊妹篇《Agent 技能自我进化》。压缩时compacted-summary自带Exact Sources定位符模型可read spill file或memory_search恢复精确内容。9. 验证整树启动8 插件headless profile✅memory_remember写入 ✅memory_search中文混合召回命中真实会话 ✅跨会话持久化逐字注入 ✅65 单测全绿。仓库https://github.com/QIANLING-0831/dsh-memory-plus MIT欢迎试用、提 issue。