前言¶
DeepSeek Harness (DSH) 采用插件化架构,旨在构建灵活的智能体工作流。在长对话场景下,上下文往往会因为重复信息、过时内容或错误结果而膨胀,导致 token 预算被浪费,甚至触发上下文溢出。context-pruner 是一个针对 DSH 的会话上下文分诊插件,它通过启发式规则自动识别并处理过时、重复、失败及过大的上下文内容,以节省 token 预算并控制上下文膨胀。
核心功能¶
该插件的核心特性在于其确定性处理机制和灵活的配置策略。
-
确定性,零模型依赖
所有判断和重写均基于启发式规则,不依赖 LLM 调用或其他外部服务。这意味着行为是可预测的,且可以在离线环境下进行测试。 -
五个独立可切换的筛查器
插件内置五种独立的上下文筛查机制:- 过时输出 (
staleOutput):对于在最新用户消息之后超过 N 轮且结果仍完整的工具调用对,将其重写为存档摘要并移除结果块。 - 重复调用 (
repeatedCall):检测工具名称和参数完全相同的调用(JSON 键顺序不影响匹配),仅保留最新的调用,移除旧的调用对。 - 失败调用 (
failedCall):针对过时的错误结果,将输入参数替换为失败存根(防止信息泄漏并节省空间),保留并修剪错误文本。 - 超大块 (
oversizedBlock):当工具结果文本超过字符上限时,保留头部和尾部,中间标注省略数量。 - 过时推理 (
staleReasoning):对于超出保留轮次的推理块,在保留区域仅修剪长度,在非保留区域直接移除。
- 过时输出 (
-
保留区域与免疫列表
- 保留区域 (
reserve):最近 N 轮用户对话的内容永远不会被处理,避免干扰模型正在使用的上下文。 - 免疫列表 (
exempt):通过二维配置(工具名和文件路径通配符)保护状态化工具(如task、skill、todowrite等)不被误删。
- 保留区域 (
-
审计报告与压缩集成
每次分诊都会输出结构化的统计报告(包括计数、节省量、压缩范围等)。插件原生实现ctx.compaction接口,与 DSH 的压缩机制无缝集成,支持自动压力、上下文溢出、手动及强制区域压缩。
安装与启用¶
插件通过 dsh.bundle.patch 打包分发,支持多种安装方式。
- 从 GitHub 安装
使用官方仓库地址进行安装:
dsh plugin --profile demo add github:JohnXu22786/context-pruner
- 本地挂载
推荐方式,将本地目录挂载到指定 profile:
dsh plugin --profile web add link:/absolute/path/context-pruner
- Git 源安装
从 Git 仓库安装并指定分支:
dsh plugin --profile web add "github:your-repo/context-pruner#main"
安装后,通过以下命令检查配置是否生效:
dsh --profile web --dump-config
典型用法¶
插件提供了模型可见的工具和人类命令两种交互方式。
-
通过
/triage命令
这是人类命令行接口,直接输出审计报告并应用有价值的处理。 -
通过
triage_history工具
这是模型可见的扩展点,模型可以调用该工具执行分诊并获取审计报告。如果设置了dryRun: false且存在值得处理的内容,会直接应用处理。 -
配置示例
在cordis.patch.yml中,可以覆盖默认配置以调整保留轮数或启用特定筛查器:
- insert:
id: context-triage
name: dsh-context-triage
config:
budget:
contextTokens: 200000
softRatio: 0.6
screeners:
staleOutput: { turns: 5 }
staleReasoning: { enabled: false }
exempt:
tools: [task, skill, write, edit]
适用场景与注意¶
-
适用场景
适用于需要维持长对话上下文且对 token 消耗敏感的场景。插件特别适合处理日志记录、长时间运行的批处理任务或需要大量文件读取的智能体工作流。 -
重要限制
- 单一压缩提供者:
ctx.compaction允许每个上下文只有一个提供者。如果当前 profile 已加载其他压缩实现(如内置基础压缩后端),必须通过 patch 将其中一个禁用(disabled: true),两者不能共存。 - 权限与来源:插件以当前 DSH 进程权限运行。在安装前,建议检查 GitHub 源码与许可证。
- 单一压缩提供者:
总结¶
context-pruner 是一个专注于上下文管理的 DSH 插件,它通过启发式规则实现零模型依赖的上下文分诊。对于希望自动管理长会话上下文膨胀的开发者,它提供了一个可靠且可审计的解决方案。
- 插件目录: https://www.skillhub.cn/plugins/JohnXu22786/context-pruner
- GitHub 仓库: https://github.com/JohnXu22786/context-pruner