前言¶
在 DeepSeek Harness (DSH) 的开发与运维中,上下文窗口的长期压力是长期会话面临的常见问题。传统应对方案通常依赖 LLM 进行摘要压缩,但这会带来四个结构性问题:不可预测的损失性、结构破坏(因果链坍塌为 prose)、阻塞成本(在任务中途触发全量 LLM 调用)以及压缩诱导的幻觉。
针对这些问题,dsh-cwl 提供了一种替代方案:基于 Context Window Lifecycle (CWL) 的结构化上下文驱逐。
这是什么¶
dsh-cwl 是 DeepSeek Harness 的一个插件,由 kalifun 维护。它通过将智能体轨迹推断为类型化的 episode graph(探索 expl / 动作 act),并在上下文压力超过预算时,执行零 LLM、确定性的分级驱逐策略。
其核心设计理念基于论文 Beyond Compaction: Structured Context Eviction for Long-Horizon Agents,旨在避免摘要带来的损失性,同时保持上下文的结构完整性。
核心功能¶
- 自动 Episode 推断:无需人工标注,自动将连续的相同类型工具批次合并为语义 episodes。探索类操作为
expl(如 grep/cat),有副作用操作为act(如 edit/write)。用户消息会关闭当前 episode。 - 分级驱逐机制:当上下文压力超过预算时,先执行内容截断(content stubbing),再执行整 episode 驱逐。驱逐顺序优先处理
expl,再处理act。 - 保护机制:用户消息永远不会被驱逐,且驱逐操作作为位置块替换,不会破坏工具调用与结果的配对关系。
- 工具与观测:
- 提供
cwl_recall工具,用于按需读取被驱逐文件的路径。 - 提供 API 端点
/api/cwl/evictions查看驱逐日志,以及/api/cwl/force强制执行一次驱逐。
- 提供
安装与启用¶
安装前请确保已安装 DeepSeek Harness 并配置好 Profile。
dsh plugin --profile <name> add github:kalifun/dsh-cwl
插件依赖以下环境要求:
* Node.js: ^22.19.0 || >=24.0.0
* Peer Dependencies: @deepseek-ai/cordis, @deepseek-ai/dsh-compaction, @deepseek-ai/dsh-token-meter
典型用法¶
基础运行¶
默认情况下,插件在上下文压力未超过 80% 预算时保持静止,仅在压力超标时开始驱逐。
配置调整¶
通过环境变量调整驱逐策略与预算:
# 设置自定义预算(tokens)
DSH_CWL_BUDGET=30000 dsh web
# 设置驱逐顺序为 oldest(从旧到新)
DSH_CWL_EVICT_ORDER=oldest DSH_CWL_EVICT_BATCH=0 dsh web
# 调整 stub 粗细(默认 1500 字符)
DSH_CWL_STRIP_THRESHOLD=1000 dsh web
验证与调试¶
# 运行验证检查
node check.js
# 运行会话分析
node tools/analyze-session.mjs <session.l>
适用场景与注意¶
dsh-cwl 适合需要处理长跨度对话、依赖上下文重放验证的场景。由于插件以当前 dsh 进程权限运行,建议在安装前检查源码与许可证。
总结¶
dsh-cwl 通过结构化驱逐替代了传统的 LLM 摘要压缩,解决了上下文管理中的确定性缺失与结构破坏问题。配合 cwl_recall 工具与观测端点,开发者可以精确控制上下文的生命周期。