跳到主要内容
长记忆大模型系统

第7章:中间推理状态——被忽视的「第四类」

Agent 推理树 / scratchpad / tool call trace / 多 agent 协作日志的存储设计 + 现有框架做法 + 数据库视角的可借鉴经验 + 八条设计准则——长记忆系统里学术几乎空白的一档

中间推理状态 scratchpad tool call trace Agent checkpoint Event Sourcing WAL

KV Cache、向量索引、多模态对象——前面三章把长记忆系统里前三类数据讲透了。但还有一类常被工程师下意识塞进 SQLite 或内存 dict 的数据,学术上几乎没有专门研究:Agent 推理过程中产生的中间状态——CoT scratchpad、tool call 输入输出、推理树节点、多 Agent 协作日志。这一类容量增速比想象中快(一个 Agent 长任务几小时几 GB 是常态),写入模式和前三类完全不同(零碎高频写),失效后果不对称(关键决策丢了任务崩,失败分支丢了无所谓)。本章把这一档独立写出来:画像、挑战、现有 Agent 框架的零散做法、数据库视角的可借鉴经验、八条设计准则、给本项目的最直接学术机会点。读完你会发现:这一章是项目第一模块差异化的最佳战场——前三类都已经是热门战场,这一类才是无人区。

📑 目录


1. 为什么这一类被长期忽视

1.1 学术上的”灯下黑”

KV Cache 在 SOSP / OSDI / NSDI 持续爆发,向量索引在 NeurIPS / SIGMOD 一直热,多模态在 CVPR / NeurIPS 是显学——只有”中间推理状态”几乎没有专门论文。原因是:

因素体现
场景出现晚真正高频依赖中间状态的”长时 Agent”是 2024-2025 才规模化
数据规模看起来小单个 scratchpad 几 KB,容易被认为”不值得专门研究”
缺乏标准抽象各 Agent 框架自己定义,数据结构千差万别
跨学科系统、数据库、Agent 框架三个圈子,谁都没系统化做

🌟 关键事实:单条 KB,但一个长时 Agent 任务下来可能数 GB,十几个并发任务就 TB 级——容量增速被严重低估。

1.2 工业里早就撞墙了

公开和准公开的工业实践已经反复出现这些症状:

  • AutoGPT / BabyAGI 等早期 Agent 失败大半源于”Agent 自己丢了上下文”
  • LangChain / LangGraph 反复迭代 checkpoint 机制(SQLite → Postgres → Redis → 各种自定义后端)
  • Letta(MemGPT)、AutoGen 等显式给推理状态分层,但都是应用层手工实现,没系统层抽象
  • OpenHands / Devin / Cursor 类 Code Agent 把执行 trace 持久化到 git-like 结构,自创轮子

📍 观察:生产已经撞墙,但每个团队各自造轮子——这正是基础研究该介入的时机。

1.3 这一类被忽视的代价

把推理状态丢给”应用层手工管理”,代价至少包括:

  • 任务级失败不可恢复:Agent 跑了 2 小时,断电后从零开始
  • 可观测性差:用户问”它为什么这么决策”,答不出来
  • 多 Agent 协作开销:Agent A 的中间状态怎么共享给 Agent B,各家都自己实现一套
  • 资源浪费:scratchpad 全留在 GPU 内存,挤占 KV Cache 的空间

🌟 结论:中间推理状态不是边角料,是 Agent 系统能不能”持续学习 + 复杂推理”的关键基础


2. 四种典型形态

2.1 Linear scratchpad(CoT 思维链)

最经典的形态:LLM 自己生成的中间推理文本,一步步追加。

> 我需要先找出用户上次提到的项目编号 ……
> 调用 search 工具,关键词 "项目预算"
> 找到了项目 P-2024,预算 80 万
> 接下来我应该确认项目状态,需要调 status API ……
特征内容
写入顺序追加,token-by-token 或 step-by-step
读取偶尔回看一两步、任务结束后归档
容量单任务 KB-MB 级
失效代价中(丢了可能影响最终输出质量,但任务大致还能继续)

2.2 Tool call trace(工具调用日志)

每一次 function call 的输入参数、返回结果、错误信息。

[ts=1] tool=search   input={"q":"项目 P-2024"}     output={"docs":[…]}
[ts=2] tool=db_read  input={"id":"P-2024"}        output={"budget":800000, …}
[ts=3] tool=email    input={"to":"…","body":"…"}  output={"error":"timeout"}
[ts=4] tool=email    input={"to":"…","body":"…"}  output={"sent":true}
特征内容
写入每个 call 写一条,频次高(秒级或更密)
读取调试 / 回放 / 幂等检查时一次性读
容量tool 输出可能大(数据库大查询、文件读)——单条 MB-GB 级
失效代价(尤其是写操作的 trace,丢了无法判断是否真的执行了)

2.3 Tree-shaped reasoning(推理树)

ReAct、MCTS、Tree-of-Thought 类的分支搜索:

                   root
                  /  |  \
              node1 node2 node3   ← 三种候选思路
              /  \         |
          node4 node5     node6   ← 沿其中两条继续展开
                          /  \
                      node7  node8
                                |
                              node9   ← 最终选定的路径
特征内容
写入节点级,有依赖关系,可能很多叶子被剪枝
读取路径回溯、剪枝决策、最终输出生成
容量单任务可能数 MB,大型 MCTS 可达 GB
失效代价低-中(被剪枝的分支丢了无所谓,选定路径丢了影响输出)

2.4 多 Agent 协作日志

Multi-agent 系统(AutoGen 经典 / Swarm / CrewAI)里 Agent 之间消息和共享状态:

[t=1] AgentA → AgentB: "请帮我分析这个文档"
[t=2] AgentB → tool: ……
[t=3] AgentB → AgentA: "分析结果是 ……"
[t=4] AgentA → AgentC: "请基于以上结果撰写报告"
[t=5] AgentC → AgentA: "报告草稿如下 ……"
特征内容
写入强时序、跨 Agent、可能并发
读取协作 handoff、回顾、审计
容量取决于参与 Agent 数和任务深度,GB 级常见
失效代价极高(协作中断或不一致 = 任务无解)

2.5 四类形态的横向对比

维度Linear scratchpadTool call trace推理树多 Agent 日志
写入模式追加为主频繁追加树结构、跳跃跨 Agent 并发
读取模式偶发回看调试 / 幂等路径回溯handoff / 审计
容量KB-MBMB-GBMB-GBGB+
持久化必要性高(尤其写操作)低-中极高
一致性要求强(跨 Agent)

3. 存储挑战:零碎写、突发读、语义分级

3.1 挑战 1:零碎高频写

scratchpad / tool trace 一秒钟可能产生几十条小记录,每条几 KB:

   每秒数十条 × 数 KB = 数百 KB / 秒 / 任务
   × 几百并发任务 = 数十-数百 MB / 秒集群级

🌟 关键事实:这不是 KV Cache 那种”大块顺序写”,是数据库 OLTP 式的”零碎事务” ——存储底座必须支持高 IOPS 小写入。

3.2 挑战 2:读取突发

当 Agent 决定回退、回顾或交接时,可能一次性把过去几小时的日志全拉出来:

   95% 时间:几乎不读
    5% 时间:突然要读 GB 级历史

📍 设计含义:静态 LRU 一定踩坑——长期没访问的数据突然要全量读。需要事件驱动的预取(如 Agent 切换 mode 时预热历史)。

3.3 挑战 3:语义分级而非访问频率分级

KV Cache / 向量 / 多模态都按”访问频率”分级,推理状态按语义重要性分级:

重要性例子存储要求
关键决策步骤最终选定的推理路径、写入数据库的 tool call强持久化(SSD 多副本)
参考性辅助中间 thoughts、参考性 search 结果弱持久化(单副本 OK)
临时探索被剪枝的分支、失败重试可丢(只在内存)

🧠 关键洞察:这个分级靠 LRU 学不出来——它是应用层语义,需要 Agent 框架显式提示存储层。

3.4 挑战 4:与 KV Cache 的”重影”问题

很多中间推理状态本质是 LLM 自己生成的——它的 token 同时也作为 KV Cache 存了一份。两份数据可能同源,生命周期却不同:

   LLM 生成 thought "需要先查项目编号 ……"

        ┌───────┴───────┐
        ▼               ▼
    KV Cache          Scratchpad 持久化
    (秒-分钟)         (任务结束后归档)

设计机会:统一抽象可以把这种重影合并——避免一份数据存两次。这是项目第一模块”统一表示”的具体落点之一。


4. 现有 Agent 框架的零散做法

4.1 LangGraph / LangChain checkpoint

  • 提供 Checkpointer 抽象,后端可插拔(SQLite / Postgres / Redis / 自建)
  • 每个节点结束后保存图状态
  • 支持时间旅行(回到任意 checkpoint 重跑)
优点缺点
抽象清晰性能依赖后端实现
时间旅行支持默认 SQLite 在高频场景顶不住
主流生态缺乏跨节点协同、跨层级管理

4.2 Letta / MemGPT 的”内存层级”

借鉴 OS 虚拟内存,把 Agent 上下文分层:

  • Main context(工作内存) — 当前 prompt 内
  • Recall memory — 近期上下文,可被换入工作内存
  • Archival memory — 长期存档,按需召回

🌟 价值:把推理状态做了显式分层,但只是应用层——底层还是用 SQL 库,没系统层优化。

4.3 AutoGen / Swarm / CrewAI 的协作日志

  • 把 Agent 间消息当 first-class object
  • 支持回放、审计
  • 通常用 Python 内存对象 + 偶尔 dump 到 JSON

🌟 价值:多 Agent 数据模型清晰 🌟 缺口:完全没考虑底层存储分层,几百并发 Agent 的协作日志全堆内存

4.4 Code Agent 类(OpenHands / Devin / Aider / Cursor)

  • 执行 trace 写到 git-like 结构(便于回滚)
  • 文件级状态变更追踪
  • 工具调用 input/output 持久化

🌟 价值:借鉴版本控制思路 🌟 缺口:每家自创,无标准

4.5 总结:应用层各显神通,底层一片混乱

方向谁做了谁没做
应用语义抽象LangGraph / Letta / AutoGen 各自没标准
跨层级存储几乎无全空
多 Agent 一致性AutoGen 部分强一致协议无
任务级容错LangGraph checkpoint跨实例 / 跨节点恢复无
与 KV / 向量协同全空

观察:Agent 框架解决了”上层语义”,但底层存储统一抽象 + 跨层级管理 + 与 KV/向量协同几乎完全空白——这是项目第一模块在中间推理状态侧的研究腹地。


5. 数据库视角可借鉴的经验

虽然学术上没有”中间推理状态系统”专门工作,但有大量类似数据形态的成熟数据库经验值得借鉴。

5.1 WAL(Write-Ahead Log)

经典数据库技术:所有更新先写顺序日志,再异步应用到主存储

适用内容
与中间推理状态契合点”零碎高频写”天然是 WAL 友好
借鉴价值顺序追加 SSD 友好、批量 fsync 写入摊销开销
已有实现RocksDB WAL、PostgreSQL WAL、Redis AOF

📍 设计建议:Agent 推理状态用 WAL 风格存储(append-only log + 周期性 compaction),比直接 SQL insert 高效得多。

5.2 Event Sourcing

只存”事件序列”,不存”当前状态”——状态由事件回放生成。

事件流:
   t=1: created(project="P-2024", budget=800000)
   t=2: assigned(person="Alice")
   t=3: status_changed(from="draft", to="active")
   t=4: budget_increased(delta=200000)

任意时刻状态:
   replay(events[0..t]) = current_state
适用内容
与中间推理状态契合点tool call trace 本质就是事件流
借鉴价值时间旅行天然支持、审计完美、易于多 Agent 协调
已有实现Kafka、EventStore、Axon

🌟 关键洞察:Agent 任务执行 = 事件流——把这个抽象推到底,可以统一管理 scratchpad / tool call / Agent 通信,而不是各自分别管。

5.3 Redis Streams 与 LSM-tree

技术启发
Redis Streams高频 small write + 消费者组语义,适合多 Agent 协作日志
LSM-tree(RocksDB / LevelDB)内存 buffer + 后台 compaction,与 FreshDiskANN 思想同源
MVCC多版本并发控制,Agent 同时读/写中间状态时避免锁争

5.4 Time-Series DB(InfluxDB / TimescaleDB)

中间推理状态本质是带时间戳的事件——time-series DB 的优化(分区、压缩、聚合)直接可用:

  • 时间分区:近期数据热(SSD),远期数据冷(对象存储)
  • 列式存储 + delta 压缩:推理 trace 重复模式多,压缩比可观
  • 聚合下推:“过去一小时调了几次 search 工具” 之类查询直接在存储层做

建议:项目示范系统的中间推理状态层可以用 time-series DB 做基线,而不是标准 SQL/NoSQL。

5.5 Workflow Engine 的 checkpoint 思想

Temporal / Cadence / Airflow 等工作流引擎的:

  • Durable Execution:任务的每一步状态都持久化,断电可恢复
  • Idempotency keys:重试时避免重复副作用
  • Saga 补偿:多步事务里某步失败,反向补偿前面步骤

🌟 直接对应:LangGraph 的 checkpoint 抽象就是工作流引擎在 Agent 场景的简化版——继续往工作流引擎方向借鉴是合理路径。


6. 长任务的 checkpoint 与回放

6.1 Agent 长任务的可恢复性

一个 6 小时的 Agent 任务,在第 5 小时 GPU OOM 崩溃——理想状态下应该:

   崩溃 → 调度器重启 → 加载 latest checkpoint


                    恢复 KV Cache(部分,从 checkpoint 重 prefill)
                    恢复 scratchpad(全量从 SSD)
                    恢复 tool call trace + 幂等检查


                    从断点继续(几秒-几分钟开销)

现实:大多数生产 Agent 系统重启 = 从零开始

6.2 checkpoint 的频率 trade-off

checkpoint 太频繁:    写入开销大,GPU stall
checkpoint 太稀疏:    崩溃后丢的工作多
最优 = 单步开销 / 平均故障间隔

🌟 借鉴:CheckFreq(FAST’21) 给训练 checkpoint 频率建过模型——可直接迁移到 Agent 推理任务。

6.3 选择性 checkpoint

不是所有状态都要等价 checkpoint:

状态checkpoint 策略
关键决策(写库 / 发邮件)同步持久化 + 多副本
参考性思考异步持久化即可
临时探索分支不 checkpoint

设计含义:应用层显式标 importance,存储层据此分级 checkpoint——这是 Ch8 统一抽象 metadata 的具体应用。

6.4 回放与幂等

崩溃恢复时回放 tool call trace,外部副作用怎么处理?

原始 trace:  email("成功发送")
重启后:      要不要再发一次?
方案适用
幂等 key写库、API 调用前生成 key,重复调用同 key 返回缓存结果
Saga 补偿已发邮件 → 不重发,改发”补充说明”
用户确认关键操作让用户确认

🌟 关键认识:回放不是简单”重跑”——必须配合幂等机制,否则比重跑还危险(重复扣款、重复发邮件)。


7. 八条设计准则

7.1 准则 1:用 WAL + 列式 / event-sourcing 存,而不是 SQL insert

零碎高频写场景下,WAL append-only 比传统 OLTP 快几个量级。

7.2 准则 2:语义分级是一等公民,LRU 是次要的

应用层显式标 importance,存储层据此分级 checkpoint / 副本 / 持久化强度。

7.3 准则 3:多 Agent 协作日志要支持强时序

时间戳全局唯一(逻辑时钟 / 物理时钟混合),支持回放和因果关系恢复。

7.4 准则 4:tool call 必带幂等 key

任何有外部副作用的 tool call,生成幂等 key 与 trace 一起存。

7.5 准则 5:与 KV Cache 的重影合并

LLM 生成的 thought 同时是 KV 也是 scratchpad ——统一 metadata 让两者指向同一份数据。

7.6 准则 6:checkpoint 频率按 importance 自适应

关键步骤同步,参考步骤异步,临时步骤不存。

7.7 准则 7:回放路径必须 idempotent

恢复时重放 tool call,外部副作用走幂等检查或补偿协议。

7.8 准则 8:容量主体可归档到对象存储

任务完成后的历史 trace 是冷数据,可压缩 + 归档到 S3/OSS,只保留摘要在快存储。


8. 给本项目的整合启示:最大学术机会

8.1 这一类是项目最容易出顶会的方向

把 Ch4(KV)、Ch5(向量)、Ch6(多模态)、Ch7(推理状态)做对比:

维度KV向量多模态推理状态
学术工作密度极密几乎空白
工业撞墙程度撞过且优化中撞过且优化中撞过且优化中撞过但乱解
系统抽象成熟度几乎无
与 KV / 向量 协同部分部分天然交叉

🌟 结论:前三类是热门战场,推理状态是无人区。在这一类做出系统抽象 + 跨层级管理,有很大机会出 SOSP / OSDI 级别论文。

8.2 三个具体科学问题候选

问题 A:推理状态的统一数据模型

不同形态的中间推理状态(scratchpad / tool trace / tree / 协作日志)应以何种统一抽象表达,使存储层可以无差别地做分级、压缩、回放、容错?

问题 B:Agent 任务的可恢复性边界

给定 Agent 任务的副作用集合与 SLO,如何确定最优 checkpoint 频率与持久化强度,以最小成本保证可恢复性?

问题 C:推理状态与 KV / 向量的协同管理

同一份语义内容在 KV Cache、scratchpad、向量索引中的”重影”如何用统一抽象消除冗余,同时保证三类访问路径各自最优?

8.3 工程示范系统的优先点

优先级内容难度
⭐⭐⭐设计统一 trace 数据模型(借鉴 Event Sourcing + 列式)
⭐⭐⭐把 Letta / LangGraph 的 checkpoint 接到我们的统一抽象
⭐⭐实现 importance-aware 自适应 checkpoint中-高
⭐⭐跨实例的多 Agent 协作日志一致性
⭐⭐KV Cache 与 scratchpad 的重影消除高(科学问题腹地)
任务归档 → 对象存储 pipeline低-中
回放幂等协议

8.4 与第二、第三模块的天然耦合

这一类数据天然关联项目第二、第三模块:

  • 与第二模块:多 Agent 协作日志要跨节点传输,需要分离式池化 + RDMA
  • 与第三模块:推理状态的容错(尤其关键决策步骤)是第三模块直接对象——EC + 重要性分级正好对接

建议:把 Ch7 这一档作为申报书”三模块协同”的最直接案例——一份推理状态数据,第一模块决定存哪一级,第二模块决定怎么传,第三模块决定怎么保。三者在同一份数据上同时发力。


✅ 自我检验清单

  • 被忽视的原因:能讲出至少 3 条为什么中间推理状态学术上几乎空白
  • 四种形态:能默写 scratchpad / tool trace / 推理树 / 多 Agent 日志的画像差异
  • 零碎写挑战:能解释为什么 SQL insert 在这场景下会被 WAL 几个量级吊打
  • 语义分级 vs 频率分级:能讲清两种分级方式的差异和谁该用谁
  • 重影问题:能用一个具体例子讲清”thought 同时是 KV 也是 scratchpad”
  • Event Sourcing 适配:能解释为什么 tool call trace 本质就是事件流
  • 回放幂等:能讲清”重放 ≠ 简单重跑”的工程含义
  • 8 条设计准则:至少默写 6 条
  • 学术机会判断:能讲清为什么”推理状态”比 KV / 向量更容易出顶会
  • 三模块协同:能讲清第一/二/三模块在一份推理状态数据上各自的角色

📚 参考资料

Agent 框架的 checkpoint / 推理状态实现

数据库 / 系统经验

  • Write-Ahead Logging(经典数据库技术)
  • Event Sourcing(Martin Fowler 主页 / 多本企业架构书)
  • RocksDB / LevelDB LSM-tree:rocksdb.org
  • Redis Streams:redis.io/docs/data-types/streams
  • Apache Kafka —— 事件流平台
  • InfluxDB / TimescaleDB —— time-series 经验
  • Temporal / Cadence(Durable Execution): temporal.io

Agent 长记忆 / 持久化论文

  • MemGPT(Packer et al., 2023):arXiv 2310.08560 —— LLM-as-OS 与内存层级
  • Generative Agents(Park et al., 2023):arXiv 2304.03442 —— Memory Stream + Reflection
  • Voyager(Wang et al., 2023):arXiv 2305.16291 —— Skill Library 持久化
  • A-MEM(Xu et al., NeurIPS 2025):arXiv 2502.12110 —— Zettelkasten 式记忆演化

Checkpoint 方法论

  • CheckFreq(FAST 2021) —— 训练 checkpoint 频率建模
  • Gemini(SOSP 2023) —— 内存 + RDMA 复制 checkpoint

本系列其它模块