前言¶
在 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