dsh-dsml-rescue
DSML 泄漏导致的空转,替你续上
A turn stalled by leaked DSML markup gets another one
每个版本改了什么 → Releases
English · 简体中文
这场景眼熟吗
你提了要求,模型推理了一会儿,然后这一轮就这么结束了——没有回复、没有工具调用,什么都没有。推理过程的最后几行是这样:
</||DSML|| parameter>
</||DSML|| invoke>
</||DSML|| calls>
DSML(DeepSeek Markup Language)是 DeepSeek 表示工具调用的协议标记。某些 provider 路由会把这段标记当成普通推理文本返回,而不是真的发出调用;于是调用没有发生,这一轮空着结束,所有人都在等一句「继续」。
这个插件替你把这句「继续」发出去。
它做什么
- 只救空转的轮次:推理过程末尾带着 DSML 标记,而且没有产出任何别的内容。两个条件缺一不可——空转但末尾没有标记,是另一种失败。
- 发一句很短、很中性的话:接着做下一步,不给「已经做完了」这种台阶。
- 你正在打字时它让开。
- 连着几次没救回来就收手,不会一直烧请求。
- 子代理也管:被派出去的任务不会在卡住时被误报为已完成。
安装
dsh plugin --profile web add dsh-dsml-rescue
然后重启 dsh --profile web。不需要你配置什么,默认值就是预期行为。
从源码装:先 clone,pnpm install && pnpm run build,再 dsh plugin --profile web add "$PWD"。
它不会做什么
- 不修根因。 标记泄漏发生在模型之下,提示词够不着。它换来的只有那段等待被缩短。
- 不救别的空转轮次。 没有 DSML 标记就不出手:你主动取消、请求失败、回复被输出上限截断,这些都刻意不碰。
- 不动你的对话。 不改写、不重放历史,只多加一条消息,剩下的交给宿主。
想了解更多
- 有哪三个配置项、各自会改变什么 → docs/ARCHITECTURE.md
- 怎么认定一个空转轮次、哪些规则不能破 → docs/ARCHITECTURE.md
- 测试能证明什么、怎么在本机完整复现 → docs/VERIFICATION.md
许可
MIT