前言¶
在 DSH 里用 llama.cpp 跑本地模型时,单次回复往往受 max-tokens 限制。流式输出在 token 用尽处被截断,agent loop 拿到的 assistant 内容不完整,后续推理或工具编排容易断在中间。手工让模型「接着写」可以补救,但要在每次截断后重复操作,且和 DSH 的 waterfall、BlockAssembler 约定对不齐。
下面介绍社区插件 @quekenao/dsh-auto-continue-community(维护者 quekenao,分类:模型推理)。它在检测到 finish 原因为 max-tokens 时,透明地追加模型调用,把截断输出补完,使 agent 侧看到相对完整的回复。
这是什么¶
插件全称 npm 包名 @quekenao/dsh-auto-continue-community,当前资料记载版本 v0.3.2,MIT 许可证,已发布至 npm。它是维护者自用插件 dsh-auto-continue 的社区可分发行副本,针对可移植配置、双模式续写与单测做了整改。
一句话定位:当配置范围内的 provider 因 max-tokens 截断流式响应时,按预算与超时规则自动续写,默认走实时 loop 模式,必要时可回退到缓冲 stream 模式。
核心功能¶
截断检测与续写¶
插件监听 DSH 在 max-tokens 场景下的 finish 语义(loop 模式依赖 agent/assistant-stream 与 agent.steer();stream 模式在 llm/stream waterfall 上缓冲并分析 chunk)。满足 provider 门控、续写预算且非重入时,构建续写 prompt 并再次调用模型。若续写步仍 max-tokens,可在 maxContinuations 内继续,直到正常结束或预算耗尽。
双模式(v0.3.0 起)¶
加载时通过 mode 二选一,默认 loop:
| 维度 | loop(默认) |
stream(回退) |
|---|---|---|
| UI 流式 | 原始步与续写步各自实时推送 | 缓冲整段上游流,合并后一次性呈现 |
| 机制 | 独立 agent 步,agent.steer() 注入 |
waterfall 拦截、重调、mergeChunks |
| 消息条数 | 两条 assistant 消息(各实时流式) | 一条合并消息 |
设计取舍:loop 牺牲「单条消息」的展示,换取续写过程仍能看到 token 实时输出;若部署中 steer() 等 loop 依赖异常,可设 mode: stream 回退。
可配置项¶
经 cordis Config(zod)校验,非法配置在加载阶段抛 ValidationError,不会静默失效:
| 参数 | 默认值 | 说明 |
|---|---|---|
providers |
["local-vision"] |
仅对这些 provider 启用续写 |
maxContinuations |
5 |
单条响应链最多续写次数(1–20) |
timeoutMs |
120000 |
单次续写超时(毫秒),超时则降级为原始截断流 |
mode |
"loop" |
"loop" 或 "stream" |
环境变量 DSH_AUTOCONTINUE_* 为 resolveConfig 回退路径;正常通过 patch 注册且使用 schema 默认值时,通常不依赖环境变量。
stream 模式下,若截断时存在未完成的 tool call(JSON 参数被截断),插件会跳过续写并原样输出,与 DSH 丢弃不完整 tool-call block 的行为一致。loop 模式下对已完成 tool call 会使用专用续写提示,避免模型重复发出未执行的 tool call。
安装与启用¶
官方安装命令:
dsh plugin add @quekenao/dsh-auto-continue-community
安装后插件通过包内 cordis.patch.yml bundle 自动激活,无需再手工编辑全局配置即可注册。若需改 provider 列表、续写次数或模式,在 patch 条目的 config 字段中写入(见下文示例)。
典型用法¶
在 cordis.patch.yml 中,config 与 id、name 同级,例如:
- insert:
- id: auto-continue-community
name: "@quekenao/dsh-auto-continue-community"
config:
providers:
- local-vision
- llama-local
maxContinuations: 3
timeoutMs: 60000
mode: loop
不写 config 块时,cordis 使用 schema 默认值,等价于仅对 local-vision 启用、最多 5 次续写、120 秒超时、loop 模式。
Windows 下也可用环境变量(不改 yml 时的回退路径):
set "DSH_AUTOCONTINUE_PROVIDERS=local-vision,llama-local"
set "DSH_AUTOCONTINUE_MAX=3"
set "DSH_AUTOCONTINUE_TIMEOUT_MS=60000"
set "DSH_AUTOCONTINUE_MODE=stream"
典型使用路径:在适用版本栈上安装插件 → 用 dsh web 的 waterfall 与本地 llama.cpp provider 对话 → 当模型回复因 max-tokens 截断时,观察 loop 模式下第二条实时 assistant 续写,或 stream 模式下合并后的完整一条消息。
适用场景与注意¶
已验证范围(部署前必读)¶
资料明确写明,本插件仅在下列链路下经过验证(package.json 的 dsh.scope 与 README 表格一致):
| 维度 | 范围 |
|---|---|
| 拓扑 | DSH + llama.cpp + 本地模型 |
| DSH / dsh-llm / dsh-web-app | 0.2.1-rc.5 |
@deepseek-ai/cordis |
~4.0.5 |
| Node.js | >= 24(开发测试于 v24.18.0) |
| 运行面 | 仅 Web(dsh web waterfall) |
| 客户端 / CLI | 未适配,不在支持范围 |
更换 DSH 大版本、非 llama.cpp 后端,或 CLI/客户端场景,均超出当前插件声明的适用范围,行为不保证正确。
谁适合用¶
适合在 DSH 0.2.1-rc.5 + Web + 本地 llama.cpp 栈上开发智能体、且经常碰到长回复被 max-tokens 截断的开发者。不适合指望在 CLI 或未验证的后端上「开箱即用」。
安全与信任¶
DSH 生态强调「一切皆插件」;社区目录站点与 DeepSeek / 幻方无官方从属关系,安装前请自行查看源码与 MIT 许可证。插件以当前 DSH 进程权限运行,续写会额外发起模型调用,请注意本地算力、超时与 maxContinuations 对成本与延迟的影响。README 称 v0.3.2 已通过 95/95 单测及多项端到端验证,可作为质量参考,但不替代你在自己环境中的验证。
结尾¶
dsh-auto-continue-community 针对本地模型 max-tokens 截断提供了可配置的自动续写:默认 loop 保证续写仍实时流式,stream 作回退;配置经 zod 校验,错误配置启动即失败。若你的栈落在 README 声明的版本与 Web + llama.cpp 范围内,可以用一条 npm 安装命令接入,再按需调整 providers 与续写预算。
- 社区目录页:https://www.skillhub.cn/plugins/quekenao/dsh-auto-continue-community
- 源码与完整说明:https://github.com/quekenao/dsh-auto-continue-community