dsh-plugin-local-prompt-bridge:本地 token 精算与上下文溢出压缩重试

前言

在 DeepSeek Harness(DSH)里跑长对话或大体量 prompt 时,常见两类问题:服务端返回「超过 context」类 400,官方压缩链路接不上;或者本地 OpenAI 兼容服务(如 llama.cpp)窗口有限,发出去才知道爆窗。Cursor、Codex 等产品往往按 token 账本做步进前估算,而不是等 KV 显存报错。

社区插件 dsh-plugin-local-prompt-bridge(维护者 tianyiming1)面向上述场景:不改、不替换任何 @deepseek-ai/* 包,通过 Cordis patch 做溢出错误改写,并在配置 routes 后对本机 /tokenize 做主动精算,把即将超限的请求转成官方 compaction-basic 可识别的 CONTEXT_WINDOW_EXCEEDED 再重试。默认 routes: [] 时只启用全局溢出改写;主动压缩需自行对接 llm-pi-ai 里的 provider。

这是什么

  • 定位:Stock-safe 社区 DSH 插件,HTTP tokenize 压力检测 + 溢出 → CONTEXT_WINDOW_EXCEEDED compact-retry。
  • 仓库:tianyiming1/dsh-plugin-local-prompt-bridge(npm 包名 @local/dsh-plugin-local-prompt-bridge,当前资料版本 0.1.4,MIT)。
  • 分类:模型推理(SkillHub 目录归类)。
  • 与官方关系:独立社区作品;DSH 生态强调「一切皆插件」,SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。

核心功能

下面两项在 README 中有明确说明,可分开理解。

1. 溢出改写(默认对所有 provider)

把 exceed_context_size_error 或「超过 context」类 HTTP 400,改写成 CONTEXT_WINDOW_EXCEEDED,交给官方 compaction-basic 压缩历史后再试。装上插件、写入 bundles 后即可生效,无需配置本地模型。

2. 主动精算(需配置 routes)

在每一步 LLM 调用发出前:

  1. 对配置的本地 OpenAI-compat 端点调用 /tokenize;失败则走 /apply-template 得到 content 再估算。
  2. 计算即将发出去的请求包 token 体量。
  3. 若超过 min(thresholdRatio × window, window − outputReserve)(默认 thresholdRatio 约 0.90,并预留 outputReserve 生成空位),则合成溢出,触发官方压缩后再发。
  4. 未超过则直接发送(不再使用早期「软线假满」策略)。
  5. 若仍撞上服务端实际上限,由第 1 条溢出改写兜底。

策略对齐「按 token 账本」的上下文管理,而非依赖显存 KV 报错。

安装与启用

插件通过 web profile 的 pnpm 安装,并在 package.json 的 dsh.profile.bundles 中注册。请在 已关闭 的 DSH 进程上操作(或关闭后再启动)。

进入 profile 目录并添加依赖:

cd $env:USERPROFILE\.dsh\profiles\web
pnpm add github:tianyiming1/dsh-plugin-local-prompt-bridge

本地开发若已 clone 或 link 到本机路径,可用:

pnpm add link:D:/deepseek-harness-workspace/dsh-plugin-local-prompt-bridge

(将 link: 路径换成你本机插件目录。)

在同目录 package.json 的 dsh.profile.bundles 数组末尾追加 bundle 名:

"@local/dsh-plugin-local-prompt-bridge"

保存后按平时方式启动官方 DSH(桌面 / npx / 命令),不要用 fork 源码替代。

可选:配置主动压缩

在你的 profile 下编辑 cordis.patch.yml,覆盖插件 config(provider 须与 llm-pi-ai 里 id 一致):

- id: local-prompt-bridge
  config:
    routes:
      - provider: llama-cpp-local   # 与 llm-pi-ai 里的 provider id 一致
        baseURL: http://127.0.0.1:8080/v1
        contextWindow: 65536
    thresholdRatio: 0.90
    outputReserve: 4096

也可直接改本包内的 cordis.patch.yml(仅本地 fork / link: 时适用)。

临时关闭:从 bundles 去掉本包,或将配置中的 rewriteOverflow / proactiveCompact 设为 false(README 自测章节)。

典型用法与自测

README 建议按下面顺序验证,而非单独写业务脚本。

  1. 若启用了 proactive routes,先确认本地 OpenAI-compat 服务在跑(例如 llama.cpp 的 /v1)。
  2. 用日常方式启动官方 DSH。
  3. 查看启动日志是否出现类似:[local-prompt-bridge] active (rewrite=all-providers, ... compactAt=0.9 ...)。
  4. 用中等偏大 prompt(例如 40k / 64k 量级)应能直接放行;接近窗口或触发服务端超窗时应先压缩再试。
  5. 不需要时从 bundles 移除或关闭上述两个布尔开关。

适用场景与注意

适合谁

  • 已在 DSH web profile 使用社区 bundle,希望统一把各类 provider 的 context 溢出错误接到官方 compact-retry。
  • 本地 llama.cpp 等 OpenAI-compat 服务窗口较小,希望在发请求前用 /tokenize 精算,减少无效 400。
  • 希望升级官方 DSH 后只重装插件、而不 patch 官方包的用户。

注意

  • 插件随当前 DSH 进程权限运行;安装前请阅读仓库源码与 MIT 许可证,确认 baseURL、routes 指向的是你信任的本机服务。
  • 默认不绑定任何个人模型或端口;主动压缩完全依赖你在 cordis.patch.yml 中填写的 routes。
  • 若官方日后合入可选 countPromptTokens 或更好的溢出分类,可按 README「与上游协议的关系」逐步改用官方能力并关闭本插件对应部分;提案草稿见仓库 DISCUSSION.md,讨论应发至 deepseek-harness Discussions。

结尾

dsh-plugin-local-prompt-bridge 在不改动官方包的前提下,提供全局溢出改写与可选的本地 token 精算,把超长上下文问题收束到 DSH 已有的 compaction-basic 路径。目录与详情可在 SkillHub 查看:tianyiming1/dsh-plugin-local-prompt-bridge;源码与完整说明见 GitHub 仓库。

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

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

Xiaoye