前言¶
在 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_EXCEEDEDcompact-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 调用发出前:
- 对配置的本地 OpenAI-compat 端点调用
/tokenize;失败则走/apply-template得到 content 再估算。 - 计算即将发出去的请求包 token 体量。
- 若超过
min(thresholdRatio × window, window − outputReserve)(默认thresholdRatio约 0.90,并预留outputReserve生成空位),则合成溢出,触发官方压缩后再发。 - 未超过则直接发送(不再使用早期「软线假满」策略)。
- 若仍撞上服务端实际上限,由第 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 建议按下面顺序验证,而非单独写业务脚本。
- 若启用了 proactive routes,先确认本地 OpenAI-compat 服务在跑(例如 llama.cpp 的
/v1)。 - 用日常方式启动官方 DSH。
- 查看启动日志是否出现类似:
[local-prompt-bridge] active (rewrite=all-providers, ... compactAt=0.9 ...)。 - 用中等偏大 prompt(例如 40k / 64k 量级)应能直接放行;接近窗口或触发服务端超窗时应先压缩再试。
- 不需要时从 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 仓库。