前言¶
在 DeepSeek Harness(DSH)里跑长任务时,主对话往往还在一轮里不断调用工具、流式输出。若你想问一句「现在做到哪了」或「刚才那条报错什么意思」,常见做法是开新会话、复制粘贴上下文,或者等当前轮结束再追问——前者割裂上下文,后者耽误节奏。fork 型旁路提问有时还要停住当前 turn,才能读到「此刻」的状态。
下面介绍社区插件 dsh-btw-live(维护者 neutron42-jp):在 Web 会话里注册 /btw 命令,包含正在执行的这一轮,从旁问一句;回答用 BTW 卡片展示,不写入会话历史,也不进入后续模型的上下文。插件归类为「模型推理」,许可证 MIT,当前 package 版本为 1.4.1(以仓库 package.json 为准)。
这是什么¶
dsh-btw-live 是 DSH 的 Web 侧 bundle 插件(npm 包名 @local/btw-live)。它在宿主侧注册 btw 命令,在浏览器侧替换 conversation.chat.commandview 里对 btw 的展示;一次 LLM 调用、不执行工具、不写历史。
与「另开会话再问」相比:模型解析顺序与会话一致(未发送的模型选择 → 上一请求的 header → 默认模型),且能通过 session.snapshotEvents() 读到执行中 turn 的工具调用与结果,无需先停住主 turn。
核心功能¶
依据 GitHub README 与仓库说明,已核实能力如下。
- 旁路单次推理:从会话日志组 transcript,经
llm流式调用一次;结果经command/done的text返回,不挂进主对话链。 - 覆盖进行中 turn:通过
session.snapshotEvents()读取事件(含当前轮工具与结果);与 fork 型旁路不同,不必先结束 turn 才能问「现在怎样」。 - 模型与 reasoning 跟随会话:使用当前会话的 provider / model / reasoning effort(未指定时用适配器默认);仅对输出上限做收紧(默认
maxTokens4096)。若提供商拒绝该形态,会按dsh-llm的失败码(如EMPTY_RESPONSE、PI_AI_ERROR、TIMEOUT、TRANSPORT)最多再试一次与主会话相同上限的形态。 - Web 展示:答案在 transcript 中以 BTW 卡片呈现,支持 Markdown;长文卡片内滚动,点击标题可折叠。等待时显示「考えています…」(locale 支持 ja / en / zh);失败以红色提示,成功则自动展开。
- 会话路由:调用携带会话
id作为sessionId(OpenCode 系通过x-opencode-session路由;缺失会400 MissingSessionID)。
环境与依赖¶
| 项目 | 要求 |
|---|---|
| DeepSeek Harness | README 在 0.2.1-rc.2 上验证(使用 conversation.chat.commandview 槽位) |
| Node.js | 22 及以上 |
插件在当前 DSH 进程权限下运行;安装前请自行查看源码与 MIT 许可证,社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。
安装与启用¶
官方 README 给出的安装方式是在 Web profile 目录用 pnpm link 本地包(请勿自行拼接 dsh plugin add github:... 一类未在文档出现的命令)。
先在本地准备好插件目录,再在 Web profile 中 link:
cd "${DSH_HOME:-$HOME/.dsh}/profiles/web"
pnpm add link:/path/to/dsh-btw-live
将 bundle 写入该 profile 的 package.json 的 dsh.profile.bundles:
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"@local/btw-live"
]
重启 dsh web 并刷新页面。客户端仅在启动时扫描 bundle,首次安装必须重启;之后若只改 client.js,HMR 可热更新。
典型用法¶
在会话输入框使用斜杠命令,后跟你的旁路问题。README 示例(日语):
/btw いまどこまで進んだ?
中文场景可同样写法,例如询问当前进度或澄清刚出现的工具结果;具体措辞不限,命令名固定为 btw。
配置项¶
在插件的 cordis.patch.yml 的 config 中可改(下表为 README 记载的默认值):
| 键 | 默认值 | 含义 |
|---|---|---|
maxEvents |
80 | 读取的事件数量(从末尾起) |
maxChars |
16000 | 组 transcript 的字符上限 |
toolArgChars |
300 | 工具参数展示截断长度 |
toolResultChars |
900 | 工具结果展示截断长度 |
maxTokens |
4096 | 旁路回答的最大 token |
timeoutMs |
120000 | 单次调用的超时(毫秒) |
调小 maxEvents / maxChars 可减轻上下文体积,但可能漏掉较早步骤;maxTokens 过小会更容易触发带上限形态的失败并进入 README 所述的二次尝试逻辑。
失败与排错¶
卡片上会按次显示每次尝试的结局(finish 的 reason.kind 与 failure.code / HTTP 状态 / 消息)。示例形态:
btw failed: no answer (#1 error PI_AI_ERROR HTTP 400 — …; #2 stop; provider=… model=…)
#1 为带输出上限的调用,#2 为与主会话相同上限形态;若第二次成功,界面仍按成功展示。认证、配额、上下文超限等「重试同形也无益」的错误不会盲目重试。
适用场景与注意¶
- 适合:长 agent 任务中临时确认进度、解读当前轮工具输出、不想污染主 transcript 的追问。
- 不适合:需要把旁路答案写回主对话、或依赖工具执行才能回答的问题(本插件明确不跑工具)。
- 注意:旁路仍消耗同一 provider 的配额;transcript 截断由上述配置决定,极长会话可能看不到最早事件。
结尾¶
dsh-btw-live 用 /btw 把「问一句当前会话(含进行中 turn)」做成一次性的旁路推理,回答留在 BTW 卡片里,不进历史。若你在 Web 上常驻 DSH 做工具型会话,可按 README 的 link + bundles 方式接入。
- 社区目录页:https://www.skillhub.cn/plugins/neutron42-jp/dsh-btw-live
- 源码与说明:https://github.com/neutron42-jp/dsh-btw-live