dsh-auto-continue-community:本地模型 max-tokens 截断时的自动续写

前言

在 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
羽毛球分组比赛记分
小程序二维码

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

小夜