DeepSeek Harness 记忆解读:场域分层、参考架构与实现思路

《DeepSeek Harness 架构解读》 把核心约束说得很清楚:凡是模型能看见的内容,都必须写进 Session 日志;无论是 replay、fork 还是 compaction,也都从同一份 Session 事件流里读取。系列第 3 篇《多 Agent 解读》还写到子 agent 边界------child 有独立 JSONL,父级通常只见委派 tool 的 prompt 和 result。

但「记忆」在 2025--2026 年已有多套并行方案:MemGPT/Letta6 的分层虚拟上下文、Mem07 的多信号检索、EverMemOS9、MemoryOS10、MemOS11 的「记忆操作系统」叙事、OpenViking12 把 memory/skill/resource 收进统一目录、Zep8 的会话图、LangGraph13 的检查点状态机,以及 AgentMemory 综述1 将 agent memory 归纳成 write--manage--read 闭环。Harness 官方目前仍没有单一 Memory 模块。

本文想要分享的是三件事:学界与工程界现在怎么拆「多层次记忆」;一套从业界多家公开方案里抽象出来的参考架构,用来对照各层职责与治理环节,而不绑定某一个具体产品;若 DeepSeek Harness 要支撑完备的记忆能力,在现有 Cordis seam 上应如何挂接------Session 事件、ctx.memory、Write/Read 治理环、后台整合(consolidate,把情节记忆压成可长期保存的事实)等。下文是架构分享与设计思路。


场域共识:记忆不是存储,是 write--manage--read

2026 年多篇综述1与基准测试(LoCoMo2、MemBench3、MemoryAgentBench4、MemoryArena5)有一个共同结论:长上下文不等于记忆。MemoryArena5 上,在 LoCoMo2 接近饱和的模型,放到多 session、前后任务依赖的场景,完成率常降到 40%--60%------说明难的不是「能不能塞进窗口」,而是写哪条、何时召回、谁批准注入、何时遗忘。

把 agent memory 抽象成 Write、Manage、Read 三个动作,再对照具体产品,比直接罗列产品名更清楚:

动作 问什么 典型失败
Write 从交互里抽出什么、以什么 schema 落盘 噪声固化、重复条目、无出处幻觉
Manage 合并、去重、矛盾处理、衰减、归档 摘要漂移、旧偏好覆盖新目标
Read 用什么 query、召回几条、怎么进 context 检索像但不贴任务、自动注入污染窗口

再叠三个正交维度(AgentMemory 综述1 的分类):

时间尺度:工作记忆(当前窗口)→ 情节记忆(episodic,一次 session 里具体的 turn/tool 记录)→ 语义记忆(semantic,去掉情境后的事实)→ 程序记忆(可复用 skill/脚本)。难点在迁移策略:哪条情节该 consolidate(整合沉淀)成语义条目,哪条语义事实该在任务开始时 load 回 working memory。

存储基质:上下文内文本、向量索引、SQL/FTS、知识图谱、可执行 skill 库、混合栈。生产里几乎都是 hybrid(多种存储混用);纯向量检索回答不了「过去 7 天 service X 的失败次数」这类结构化问法。

控制策略:启发式(top-k、每 n 轮摘要)、模型自管(MemGPT6 式 memory tool)、学习策略(RL 优化 store/retrieve/discard)、治理策略(人工确认、注入门控、权限过滤)。工程实践里,检索命中和写进 context 已经常分开处理。

评测也分四层:任务效果、记忆质量(矛盾率/陈旧度)、效率(token/延迟/存储增长)、治理(删除合规/租户隔离)。记忆系统成不成熟,在生产里往往比 benchmark 分数更看「忘掉了多少不该记的、召回了多少该记的」。


工程界几条主路线(2025--2026)

下文按路线分项对照长处与局限。

MemGPT / Letta6:分层虚拟上下文。把 context window 当 RAM,recall DB 与 archival vector 当磁盘;模型通过 core_memory_*archival_memory_search 等 tool 在外部存储与窗口之间读写。Letta 后续加了 Filesystem 与 sleep-time agent:记忆整理可异步执行,不阻塞主对话。分层语义清楚;编排(orchestration)失败往往静默------表现为回答略差,没有异常栈。

Mem07:抽取 + 多信号检索。ECAI 2025 论文与 2026 算法更新强调 single-pass 结构化抽取、语义+关键词+实体三路打分融合,对 temporal / multi-hop 查询在公开报告里有提升。抽取与检索链路较完整;抽取质量仍依赖任务域,金融/合规场景常要加 schema 与审计。

Zep / Graphiti8:会话图 + 时序边。把 message 建成图,支持「某事实何时被推翻」类查询。时序与关系查询方便;架构与运维更重。

EverMemOS9:记忆操作系统。ACL 2026 把 episodic trace(情节轨迹)→ semantic consolidation(语义整合)做成生命周期;与 Mem07、Zep8 等同台比的是组织原则,不是单一向量库。

MemoryOS10:分层 persona 记忆(短/中/长期)与 Storage--Updating--Retrieval--Generation 四模块;EMNLP 2025 Oral。

MemOS11:MemCube 统一封装 + MemScheduler 调度,把 plaintext、activation、parameter 几类记忆当系统资源管。长程推理叙事在各方案里都比较完整;集成面仍在快速迭代。

OpenViking12 思路:统一对象模型 + L0/L1/L2。memory、resource、skill 映射到虚拟目录;检索先 L0 摘要、L1 概览、L2 原文按需下钻,并做目录递归检索。token 预算可控、路径可解释;目录治理做不好时,递归检索容易在深层目录里绕圈。

LangGraph13 / 检查点式:记忆与工作流状态机绑定,适合多步任务 resume。编排内聚;跨产品长期语义记忆常要外接 store。

Harness 社区141516:文件轨 + 注入门控 + 状态版本化。memory-evolve14 五轨文件 + 确认队列;memory-gate15 SQLite/FTS + CBDC 注入门控;continual-evolve16 版本化 harness 资产。贴合 Session 不变量、可审计;尚未收敛为官方单一 API。


参考架构:七层记忆栈 + 治理环

下面这套参考架构综合了:AgentMemory 综述1 的 write--manage--read 与四型时间记忆;「轮内 / 会话 / 长期 / 外部 provider」四层分层;OpenViking12 的 L0/L1/L2 按需加载;后台 consolidate(主会话与整理隔离);memory-gate15 的 Claim → Belief → Decision → Consumption 注入链;memory-evolve14 的多轨 + 人审;以及 Harness 已有的 Session / compaction / Skill / Goal seam。

七层(从短到长)

L0 工作记忆(Working):当前 provider 窗口里的 messages + system prompt 片段。Harness 对应 deriveMessages() 投影结果、agent/pre-step 可改 prompt。容量最小、延迟为零,但会被 compaction 替换表层。

L1 会话情节(Session Episodic):append-only JSONL,含 user/assistant/tool/compaction/skill-catalog 等事件。Harness 已是事务源;resume、fork、replay 都读这层。审计以原始事件为准,不能只用 compaction 摘要。

L2 窗口管理(Compaction / Prune):同 Session 内把旧表层摘要替换,原始事件仍在 L1。Harness 用 ctx.compactiondsh-compaction-tool-result-pruner。解决窗口太长,不解决跨周用户画像。

L3 任务态(Goal / Todo):同 Session 内持续推进的目标与检查点。Harness 用 ctx.goalsgoal-round-driver;工作区 todo 文件经 tool 进入 L1。

L4 程序与规范(Skill / Workspace):可复用指令与外部事实文件。Harness 用 ctx.skills + skill 工具(目录经 skill-catalog inject);Ralph 式跨 Round 状态在工作区文件。程序记忆强调可执行、可版本;Skill 更新应像发版,不要静默改 prompt。

L5 语义长期(Semantic Store):跨 Session 的结构化 semantic 事实------用户偏好、项目约定、API 坑点。存储可以是 SQLite+FTS、向量库、KG 或 MCP 后端(Memorix / Engram 等)。写入必须经过 Write 路径(tool → Session 记录 → 异步 index),不能只写索引不写日志。

L6 情节归档(Episodic Archive):完整 Session 日志、compaction 前的 shadow 区间、子 agent JSONL。用途是合规回放、蒸馏 L5、训练反思。

L7 整合层(Consolidation / Sleep-time):Idle 或 session 结束后,后台 job 从 L1/L6 提炼 candidate facts,写入 L5 或更新 Skill/Goal。执行须与主 transcript(对话记录)隔离:不污染主会话、失败可回滚、权限只写记忆目录。Harness 可用 subagent + ctx.jobs 或独立 bundle 实现,事件仍应可观测。

治理环(套在七层外)

Write 环:置信阈值、去重、矛盾检测、人工确认队列(memory-evolve14)或 claim 可撤销(memory-gate15)。

Read 环:检索不等于注入。Recall 得到 candidate;Decision 在 agent/pre-step 做预算(条数/字符/token);Consumption 经 agent.inject() 写 user 消息进 Session,模型才「看见」。

Forget 环:TTL、访问衰减(MemoryBank/Ebbinghaus 思路)、显式 delete tool、版本覆盖。

Observe 环:每条注入绑 memory/inject 类 Session 事件(或 tool/result),记录 recall id、score、decision=use|ignore。

多 Agent:父/子不共享隐式池;共享只经 L4 工作区文件、L5 命名空间(project/user scope)、或父级读 child tool result。

与 OpenViking L0/L1/L2 的对应

OpenViking12 参考架构 Harness 今日
L0 摘要 L5 条目的 abstract 需插件生成
L1 概览 L5 条目 + 元数据 需插件生成
L2 全文 L1 原始事件 / 工作区文件 Session JSONL、fs tool
目录递归 L5 按 project/user/skill 命名空间 memory-evolve14 五轨近似

Harness 现有能力与七层对照

Harness 与参考架构对齐:L1/L2/L3/L4 在 core 里,L5/L7 留给 MCP 与 bundle。

不变量:模型可见 ⟺ 已记录。Session 是 append-only JSONL;deriveMessages() 投影 model history。插件若在内存藏 state 不写 Session,fork、compaction、replay 会对不上------L5 写入也应经 tool/result 或扩展 Session 事件留痕。

Compaction 走读:一次压缩走 compaction/startcompaction/summary → 表层 user 消息带 <compacted-summary> 替换 → compaction/end。L1 保留全量;L0 变短。subagent/descriptor 仅日志、不进 surface,跨 compaction 保留折叠语义。

Skill 与 compaction:skill-catalogagent.inject() 整目录替换;compaction 遮蔽后,skills 子系统会在下次完整观察重建目录,不会静默沿用旧视图。

MCP 记忆(默认关闭):mcp-memory 示例三份 overlay 只做桥;须 --patch 启用。验证跨 session:会话 A 写入 → 新建会话 B 检索;成功说明 L5 在上游进程,DSH 只传 tool。

参考层 Harness 机制 跨 Session?
L0 deriveMessages 投影
L1 Session JSONL + 持久化 同 id 可 resume
L2 ctx.compaction
L3 ctx.goals
L4 ctx.skills、工作区 fs/bash 文件可跨 session
L5 无内置;MCP / 社区 bundle 取决于实现
L6 L1 即归档
L7 无官方;可 subagent/job 需自建

Harness 如何实现完备记忆:架构思路

前提不变:不改 agent-loop 的核心语义,L1 Session 仍是事务源;扩展靠 seam、Session 事件类型与 bundle。下面按 Write → Manage → Read → Observe → Consolidate 五条链路,说明「完备记忆系统」在 Harness 里应如何挂接。

Session 事件:审计与投影

跨 Session 的长期记忆先要处理索引与 Session 日志不一致:向量库或文件里有一份,Session 里又一份,fork 后对不上。Harness 的解法是凡进入模型的,必须在 L1 留痕;L5 的写入、召回、注入、遗忘也都应落成 Session 事件,例如 memory/write-proposedmemory/write-acceptedmemory/recallmemory/injectmemory/forget

session-projection 规定哪些事件进 model history(通常只有 inject 后的 user 消息),哪些仅审计。L5 索引因此与 L1 对话记录指向同一套 Session 事件,fork 后仍可对账。

ctx.memory seam:存储可插、逻辑统一

Harness 社区讨论里常见的缺口,是缺少一层官方 seam。概念上可定义 MemoryService,后端可换、接口稳定:

typescript 复制代码
// 概念接口,非官方 API
interface MemoryService {
  proposeWrite(sessionId, claim, evidenceSeqs): Promise<WriteProposal>
  acceptWrite(proposalId): Promise<MemoryRecord>
  recall(scope, query, budget): Promise<RecallResult>
  forget(recordId, reason): Promise<void>
}

Mem07、Zep8、SQLite、MCP 可各做插件实现;不变量不变:recall 结果要 inject 才进 L0,inject 必须写 Session。

Write 与 Manage 链路

模型通过 memory_remember 一类 tool 提议写入 → Session 留 memory/write-proposedtool/result → 策略或 UI accept → memory/write-accepted → 后端 index。L5 可按用途分命名空间(memory-evolve14 五轨是现成映射:user/global/project/ 等)。人审是治理选项,不是架构必选,但 accept 前后都应有 Session 事件。Manage(去重、矛盾、衰减)在 index 之后执行,状态变更同样应可审计。

Read 链路:检索、门控、注入

检索不等于注入,应拆成三步:recall 得 candidate → pre-step 门控(CBDC:use/verify/ignore,预算如 ≤3 条)→ 仅 use 的条目经 agent.inject() 写入并记 memory/inject。统一挂在 agent/pre-step,比多个 bundle 各自改 system prompt 更容易收敛行为。

L7 整合与分层检索

后台 consolidate 用 ctx.jobs 或隔离 subagent,从 L1 或 compaction 摘要提炼 semantic 事实写 L5,不污染主 transcript。L5 条目可存 abstract / overview / bodyRef,recall 先粗后细,路径写入 memory/recall 便于排障(OpenViking12 式思路)。

多 Agent

child 不 inherit 父 L5;共享靠 project scope、L4 文件或 tool result。Fork 只 seed L1/L0,不复制 L5 索引。

能力挂载一览

记忆能力 Harness 上应落在哪里 常见误配
同 Session 窗口 已有 ctx.compaction 把 compaction 当跨 session 语义记忆
L5 持久化 ctx.memory 插件 + 可选 MCP 只写向量库、不写 Session
Read 治理 agent/pre-step 门控 + inject 检索结果直接写入 system prompt
Write 治理 memory tool → Session 事件 → index 内存里藏 state
后台整合 ctx.jobs / 隔离 subagent 整理过程写入主 transcript
可观测 memory/* 事件 + UI 黑盒 recall

社区插件在参考架构里的位置

memory-evolve14 接近 L5 文件轨 + Write 人审 + Web 面板;memory-gate15 接近 Read 环 CBDC;continual-evolve16 偏 L4/L7 版本化资产;Jesse-njx/dsh-memory、mneme 类偏 L6→L5 蒸馏;mcp-memory 示例可验证 L5 后端桥接。叠加插件之前先对齐:存哪、谁批准注入、能否回滚。


多 Agent 时的记忆边界

child 有独立 L1。父级只见委派 tool 的 prompt/result 时,中间推理在 child JSONL。父要知道 child 结论:读 tool 结果、读 child 写的 L4 文件、或对 project scope 做 recall。Fork seed 父级已完成轮次前缀;spawn 全新 L0/L1。共享要显式选 L4/L5 scope。


范围与代价

官方目前:L0--L4 + L6 已在 core;L5/L7 靠社区/MCP。完备记忆的代价包括:治理多一层就多一道 latency;人审成瓶颈;多插件重复 inject 占 token;L5 写错需 forget 与 audit 兜底,不宜假设「越记越聪明」。


收尾

2026 年的 agent memory 是 write--manage--read 与七层栈、治理环组合在一起的系统工程。Harness 这边 L1 已是事务源,seam 也可组合------长期记忆不必重写 agent-loop,把 L5/L7 与治理环接到现有 Session 主干即可。对照七层表可以看今天缺哪几层;对照 Write/Read 两条链路,可以检查插件是否遵守「可见即已记录」。实验上可跟一条 L1 事件链到 compaction/summary,再用 mcp-memory 做跨 session 召回。记忆类能力通常通过 Bundle + Profile 叠加。

参考资料

1 Agent Memory Survey(arXiv:2603.07670,2026)。

2 LoCoMo:Long Context Memory benchmark(github.com/snap-research/locomo)。

3 MemBench(github.com/import-myself/Membench)。

4 MemoryAgentBench(github.com/HUST-AI-HYZ/MemoryAgentBench)。

5 MemoryArena(memoryarena.github.io)。

相关推荐
qq_314405351 小时前
用知漫剧写修真漫剧剧本:如何一键生成门派升阶的标准化剧情?
人工智能
于宏儒1 小时前
DeepSeek Harness 深度调研报告
deepseek
NutShell Wang1 小时前
Rust 1.97 实战迁移:v0 符号重整、Cargo 警告治理与位运算新 API
人工智能·后端·性能优化·rust·vibe coding
小刘快学习1 小时前
职业教育机构的题库答疑与学情分析,模型账怎么算清
大数据·人工智能
江瀚视野1 小时前
AperData销量2天破万,五一视界未来何在?
大数据·人工智能
樊小肆1 小时前
DeepSeeker-Code源码导读07-安全防线
人工智能·agent
7177771 小时前
Gitee 推荐系统全链路解析:从项目筛选到 AI 智能协作
人工智能·gitee
网易云信1 小时前
携手上海凌汐,重塑两轮车 AI 交互新范式!
人工智能
酸涩的柠檬1 小时前
AI又"幻觉"了?我在提示词发布流程加了一道"安检门"
人工智能