持久化与回放¶
Codex 的持久化不是单一数据库。它把“模型对话历史”和“结构化运行状态”分开管理。
Rollout:事件化历史¶
codex-rs/rollout 负责 rollout 文件。它保存线程中的 RolloutItem,常见形态包括:
- response item
- event msg
- compacted item
- inter-agent communication
- rollback marker
rollout 的价值是可回放:恢复线程、fork 线程、重建 UI 历史、计算摘要时,都可以从事件序列推导。
LocalThreadStore¶
codex-rs/thread-store 提供 thread store 抽象。thread_manager.rs 根据配置选择:
LocalThreadStoreInMemoryThreadStore
当启用 LocalThreadStoreCompression feature 时,会启动 rollout compression worker。
冷历史压缩¶
codex-rs/rollout/src/compression.rs 实现后台压缩:
- 使用
.jsonl.zst表示压缩后的 rollout。 - 对 append 路径可以 materialize 回普通
.jsonl。 - 读取方通过
open_rollout_line_reader透明处理 plain 和 compressed。 - worker 是 best-effort,使用 run marker 避免重入,限制并发压缩任务。
这和“上下文压缩”完全不同:这里压缩的是磁盘上的历史文件,不影响模型上下文语义。
State DB:结构化状态¶
codex-rs/state 保存更结构化的状态,例如:
- thread metadata
- thread goal
- memories
- agent jobs
- graph
- logs
/goal 就依赖 state DB 保存 ThreadGoal,而不是只依赖聊天历史里的 prompt。
回放时的边界¶
thread_rollout_truncation.rs 说明 Codex 回放历史时很重视 turn boundary:
- user message boundary
- inter-agent trigger turn
- legacy assistant inter-agent envelope
- rollback marker
这能保证 fork、回滚、保留最近 N 轮等操作不破坏对话结构。
可学习的设计¶
Codex 把“可审计历史”和“可查询状态”分开:
- rollout 适合顺序回放、审计和恢复。
- state DB 适合目标、记忆、索引这类需要查询和更新的对象。
- thread store 负责把两者包装成上层线程生命周期。