这篇排障记录针对一个具体场景:将本地部署的 Qwen3.8 27B 接入 DSH 后,执行 compact 时偶发压缩失败。原作者最初怀疑是模型指令遵循问题,但观察到压缩失败后会话仍可继续,因此另开会话排查,最终把问题定位到压缩阶段的 token 上限与模型思考输出之间的冲突。
故障原因
原有压缩策略会把压缩上下文上限显式限制为 8192 token。直接使用 Qwen3.8 27B 作为压缩模型时,其思考过程可能使输出超过这一上限,内容被截断后导致 compact 失败。
作者的处理思路有两步:
- 为压缩任务单独配置一个本地 provider,并关闭思考。
- 复制现有模式,在
agent.cordis.yml中指定压缩模型,同时把压缩上限扩大到 16384 token。
第一步:在 .dsh/settings.yaml 增加压缩专用 provider
llama-compact:
displayName: llama.cpp (compaction) # 显示名称
apiKeyEnv: LLAMA_API_KEY # 改成你设置的 key
api: openai-completions # 类型
baseURL: http://127.0.0.1:18080/ # 实际的本地 LLM URL
reasoning: off # 该字段需要通过下面的 reasoningEfforts 字段生效
compat:
thinkingFormat: openai
supportsReasoningEffort: true
models:
- id: qwen3.8-27b
name: Qwen3.8-27b (compaction)
contextWindow: 128000
maxTokens: 64000
input:
- text
reasoningEfforts:
off: none # 必须为 none
low: low
medium: medium
xhigh: xhigh
这里有三个需要对应本机环境核对的值:
apiKeyEnv必须与实际设置的环境变量名一致。baseURL必须指向本地 LLM 的实际 OpenAI 兼容接口。- provider ID
llama-compact和模型 IDqwen3.8-27b要与下一步配置保持一致。
关闭思考的关键不只是顶层 reasoning: off,还要让 reasoningEfforts.off 映射到 none。
第二步:修改模式中的 agent.cordis.yml
作者先复制了一份正在使用的标准模式,然后打开对应文件夹,在 agent.cordis.yml 中找到 id: compaction-basic,补充压缩模型并提高截断上限:
- id: compaction-basic
name: '@deepseek-ai/dsh-compaction-basic'
config:
summarizationProvider: llama-compact # 与上一步的 provider ID 一致
summarizationModel: qwen3.8-27b # 与上一步的模型 ID 一致
maxTokens: 16384 # 扩大到 16K
验证结果
完成两处配置后,作者再次执行 compact,压缩可以正常完成。验证时应重点确认:
- DSH 能连接
baseURL指向的本地推理服务; - 压缩任务实际选择了
llama-compact与qwen3.8-27b; - 压缩阶段的思考强度确实为
off; - 长会话触发 compact 后不再出现原先的压缩失败。
适用边界
这是一份针对“本地 Qwen3.8 27B + DSH compact”组合的故障记录。原帖没有说明完整的 DSH 版本、推理后端版本、硬件配置,也没有给出其他模型或远程 API 的对照测试,因此不能据此推断所有 compact 失败都由 8192 token 截断引起。遇到相似问题时,应先根据实际日志确认是否确有输出截断,再调整压缩模型和 token 上限。
原作者:Ruby_axx(Ruby)
原帖:https://linux.do/t/topic/2800291