Context Warp Drive:AI Agent 上下文窗口不够用?确定性折叠技术让长会话永不超限
AI Agent 在复杂任务中,每轮对话的上下文都在增长——读取文件、分析代码、调用工具,很快就把窗口撑满。传统的做法要么截断(truncation)丢失关键信息,要么用 LLM 做摘要压缩(summarization)但消耗 token 并让 provider 缓存冷却。Context Warp Drive(CWD)提供了第三种路径:确定性上下文折叠,纯 CPU 计算、零 LLM 调用、字节级确定性输出。
问题:上下文窗口是 Agent 的硬天花板
当你的 Claude Code 或 Codex Agent 运行到第 50 轮对话时,即使最强的上下文窗口也被填满。三种常规补救方案各有代价:
- 截断(Truncation):直接丢弃最早的上下文。Agent 忘记之前分析过的文件、已经做出的决策,可能重复工作或做出矛盾判断。
- LLM 摘要压缩(Summarization):让模型把历史对话”压缩”成摘要。每次压缩消耗模型调用的 token 成本($3.00/MTok fresh input),并且因为重写了 prompt 前缀,导致 provider 的 prompt caching 完全失效——后续输入都按新请求计费而非缓存命中($0.30/MTok)。
- 结束会话重开:手动告诉 Agent “从之前停下的地方继续”,但 Agent 实际上已经丢失了之前的所有状态。
Context Warp Drive 的答案是:不应该压缩语义,应该压缩存储格式。
确定性折叠的工作原理
CWD 的核心引擎是一个纯 TypeScript 实现(无 Python 依赖),总共 380+ 个确定性测试覆盖。它的工作方式可以理解为一个”智能分页系统”:
当前会话状态(按时间排序) │ ├── 活跃页面(agent 正在引用) ├── 折叠区域(压缩存储,agent 不直接看到) │ └── 按原始顺序恢复到上下文底部 └── 冻结前缀(provider 缓存友好,永不修改)
关键设计决策是冻结前缀(frozen prefix)——每次折叠后,对话的起始部分被压缩为一个字节级确定性的前缀块,provider 的 prompt caching 机制识别到这部分内容没变,继续按缓存命中计费。实测数据显示,在生产环境的 Claude Opus 4.8 agent 工作负载中,691 轮对话实现了 89.6% 的缓存命中率;另一个 Opus agent 在 510 轮对话中达到 93.2%。
作为对比,使用常规 truncation 或 summarization 的会话,每次压缩后缓存命中率归零。
快速上手
CWD 通过 npm 安装,支持 Anthropic、OpenAI 和 Gemini 三种 provider:
npm install context-warp-drive
基本用法是创建一个 FoldSession 实例,在每轮 LLM 调用前调用 session.prepare():
import { FoldSession } from 'context-warp-drive';
// 每个对话创建一个 FoldSession
const session = new FoldSession();
// 你的完整对话历史(Anthropic / OpenAI / Gemini 格式的消息对象)
const history = [
{ role: 'user', content: '分析一下 src/parser.ts 中的性能问题' },
// ... 每轮对话后追加新消息
];
// 每次调用 LLM 之前,先对上下文做折叠处理:
const { messages, cacheHot, stats } = session.prepare(history, {
// 可选:传入上轮的 input token 数,
// 超过 240K 时自动触发新一轮折叠
measuredInputTokens: previousUsage?.input_tokens,
});
// messages 是折叠后的视图。cacheHot=true 表示前缀字节级一致,
// provider prompt cache 继续命中,按缓存价计费。
await callLLM(messages);
console.log(`折叠后 ${messages.length} 条消息 · cacheHot=${cacheHot} · 节省 ${stats.savingsPercent ?? 0}%`);
CWD 不直接调用 LLM 的 API——它只处理消息列表的结构变换,把折叠后的消息传给 Claude/OpenAI SDK 即可。FoldSession 会自动判断何时触发折叠,内部使用三种机制协同工作:
- 滚动折叠(rolling fold):将最早的消息压缩为紧凑的骨架结构
- 冻结层(freeze):稳定前缀使其被 provider 缓存识别,保持缓存热度
- 召回层(recall):Agent 再次引用已折叠内容时,自动回溯展开
三种折叠机制协同工作
FoldSession 内部使用三种互补的机制,开发者不需要手动选择策略:
| 机制 | 说明 | 时机 |
|---|---|---|
| 滚动折叠 | 将最早的对话消息压缩为单行骨架结构(每轮工具调用保留 1 行 + 关键理由) | session.prepare() 检测到输入超过压力阈值时自动触发 |
| 冻结层 | 保持折叠后的前缀字节级不变,确保 provider prompt caching 持续命中 | session.prepare() 每次调用都会尝试维持冻结前缀 |
| 召回层 | 索引已折叠的内容,当 Agent 再次触及相关路径或文件时自动回溯展开 | 通过 buildFoldIndex + buildFoldRecallContext 按需调用 |
高级配置选项中,ALWAYS_ON_FOLD_CONFIG 会在每次 prepare 时都进行紧凑折叠(适合持续运行的 Agent),DEFAULT_FOLD_CONFIG 则只在超过阈值时折叠。还可以通过 freeze: { ... } 设置匹配 provider 实际缓存 TTL 的冻结时长。
实测效果
离线基准测试(16 轮故障排查模拟,用 o200k_base BPE token 计数):
| 策略 | 输入成本 | 额外 LLM 调用 | 信息保留率 |
|---|---|---|---|
| 截断(滚动窗口) | $0.0516 | 0 | 44% |
| LLM 摘要压缩 | $0.0685 | 6 | 44% |
| CWD 确定性折叠 | $0.0208 | 0 | 94% |
确定性折叠的成本最低、信息保留率最高,且不消耗任何额外 LLM 调用。按照 Claude Sonnet 定价,CWD 比摘要压缩节省 70%、比截断节省 60%。生产环境实测的 691 轮对话中,CWD 的缓存命中率维持在 89.6%,这意味着近 90% 的输入 token 按 $0.30/MTok 计费而非 $3.00/MTok。
与 Agent 框架的集成
CWD 是 provider-agnostic 的,可以直接集成到现有的 Agent 工作流中:
- Claude Code:在每次
claude调用前对 messages 做折叠处理 - OpenAI Assistants API:在
thread.runs循环中每 N 步执行折叠 - Codex / Cursor:通过工具调用注入折叠逻辑
- 自定义 Agent 框架:在
agent.step()前调用session.prepare(history, options)做折叠处理
适用场景
- 长时间代码重构:Agent 阅读 50+ 个文件后仍记得最初修改的目的
- 多轮调试会话:Agent 持续分析日志、堆栈和代码,不丢失上下文线索
- 自动化测试生成:Agent 需要持续引用被测模块的结构定义
- 文档生成:Agent 遍历整个代码库生成文档,始终记得已经覆盖的部分
写在最后
Context Warp Drive 不是另一个 Agent 框架——它是一个专注解决上下文窗口问题的底层库。它的独特价值在于:不依赖 LLM 的智能、不牺牲缓存效率、不丢失信息。对于运行长会话 AI Agent 的开发者来说,这可能是让你从”Agent 跑一半忘了”到”Agent 完整跑完复杂任务”的关键基础设施。
如果你正在用 Claude Code、Codex 或自定义 Agent 处理多步任务,且频繁遇到上下文窗口瓶颈,值得试试这个确定性折叠方案。
相关链接: