DeepSeek Harness 上下文瘦身插件:dsh-think-strip

前言

在 DeepSeek Harness 中,对话历史会被完整保留,每次请求都会把之前的 reasoning 块和工具结果原样重放。这保证了智能体的连贯性,也带来了两个直接后果:一是长对话会迅速耗尽上下文预算,二是相同内容在请求中重复计算,导致成本翻倍。dsh-think-strip 针对这两点,把历史 reasoning 块和过长的工具输出从模型可见的上下文中剥离,并归档到磁盘,在原位置留下摘要或路径提示。

插件定位

dsh-think-strip 是 DeepSeek Harness 的一个记忆类插件,由 miao-pa-si-wutao 维护。它通过在对话过程中动态压缩历史内容,让单次会话可以维持上百轮对话,同时节省 token 消耗与请求成本。

核心功能

  • 剥离历史 reasoning 块:将 assistant 消息中的 reasoning 内容替换为一行摘要,原始内容归档到磁盘。
  • 压缩过大的工具结果:将超过上下文容量的工具输出替换为首尾预览与归档路径,原始内容归档。
  • 保留完整会话日志:原始内容以时间戳写入独立的 JSON 文件,并记录在 index.jsonl 索引中,方便后续检索。
  • 会话级别开关:每个会话左侧有两个独立开关(Thinking / Tools),可按会话启用或禁用对应功能。
  • 持久化与可查询:归档文件与索引文件存储在指定目录,可通过索引文件按关键词或类型检索。

工作原理

插件通过两个 cooperating channels 与 DSH 内部交互,且不修改会话的 append-only 日志:

  1. appendPluginRecord(session, 'plugin:think-strip', { targets, indexed }):写入一条 ignorable: true 的插件记录,记录需要被剥离的消息序列(seq)与类型(reasoning / tool)。
  2. ctx.sessions.registerMessageProjection({ type: 'plugin:think-strip', project }):注册对应的投影,在会话折叠时将目标消息替换为归档副本,副本保留原始 message.id。

在 agent/turn-stopping 阶段,插件会扫描全部历史,先归档原始内容,再写入一条覆盖所有目标 seq 的记录。通过 session.deriveEventMessage(event) 获取已经投影后的消息,避免重复处理;session.surface.nodes 作为白名单,跳过已被压缩的节点。

会话开关与配置

每个会话左侧有两个 role="switch" 按钮:

  • Thinking:控制是否剥离该会话的历史 reasoning 内容。
  • Tools:控制是否压缩该会话的过大工具输出。

状态存储在 <archiveDir>/switches.json,优先级为:会话覆盖 > defaults > Config。

示例(默认配置):

{
  "defaults": { "reasoning": true, "tools": false },
  "sessions": { "session-f0b74f94": { "reasoning": false } }
}

归档布局

归档目录结构如下:

<archiveDir>/
├── switches.json                    # 按会话的开关状态
├── index.jsonl                      # 每条归档的索引行
├── plugin.log                       # 启动标记
└── <sessionId>/
    ├── 2026-10-20T10-33-24-123Z-t3-s1-q42.json      # reasoning
    └── 2026-10-20T10-33-24-456Z-tool-97.json        # tool output

索引示例:

{
  "time": 1760950000000,
  "sessionId": "session-f0b74f94",
  "kind": "tool",
  "turn": 3,
  "step": 1,
  "seq": 97,
  "toolName": "pwsh",
  "chars": 49932,
  "summary": "pwsh output, 49932 chars",
  "file": "session-f0b74f94/2026-10-20T10-33-24-456Z-tool-97.json"
}

在上下文中,过大的工具结果被替换为:

(head N characters)
…[tool output archived]…
(full 49932 characters archived at: <DSH

安装与启用

在 DeepSeek Harness 中安装:

dsh plugin add github:miao-pa-si-wutao/dsh-think-strip

安装后,重启 DSH 以加载插件。启用开关与归档目录可在插件或会话设置中配置。

典型用法

  1. 在会话左侧开启或关闭 Thinking / Tools 开关。
  2. 插件会在每次 turn-stopping 时自动归档与投影。
  3. 如需检索归档内容,可在命令行使用 PowerShell:
# 按关键词检索
Select-String -Path "$env:USERPROFILE\.dsh\think-archive\index.jsonl" -Pattern "some keyword"

# 仅查看工具结果,按字符数降序排序,取前 20 条
Get-Content "$env:USERPROFILE\.dsh\think-archive\index.jsonl" |
  ForEach-Object { $_ | ConvertFrom-Json } |
  Where-Object { $_.kind -eq 'tool' } |
  Sort-Object chars -Descending |
  Select-Object -First 20

适用场景与注意

  • 适合需要长期对话、频繁调用工具的 DSH 会话场景。
  • 插件以当前 DSH 进程的权限运行,建议在安装前检查源码与许可证(MIT)。
  • 归档目录可配置,请确保有足够磁盘空间。
  • 已投影的历史内容不会在会话重启后回滚;如需恢复原始内容,需从归档文件手动读取。

结语

dsh-think-strip 通过在上下文中替换为摘要与路径,让 DeepSeek Harness 会话可以维持上百轮对话而不耗尽上下文预算,同时节省重复计算。它保留了完整的原始日志与归档索引,方便后续检索与回溯。插件维护与源码托管在 GitHub:https://github.com/miao-pa-si-wutao/dsh-think-strip。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜