dsh-our-free-model 长思考截断自动恢复机制一次讲清
【免费下载链接】dsh-our-free-model在 dsh 里装上这个插件即可,无需登录、注册或填 API Key,就能使用包括 DeepSeek V4.1 Flash、Kimi K3 在内的前沿模型——完全免费,不限量。 All you do is install this plugin in dsh: no login, no sign-up, no API key — the frontier models are just there, DeepSeek V4.1 Flash and Kimi K3 among them. Completely free, with no usage cap.项目地址: https://gitcode.com/gh_mirrors/ds/dsh-our-free-model
免密免费车道跑深度思考时,模型可能在吐出正文前就被上游掐断流,用户只看到一次空响应。插件在适配器内为这种截断做了一次有界的自动恢复:把已收到的思考当检查点,就地再发一个请求换回正文。免费额度与恢复次数都记在本机,什么能救、救一次就停必须先讲死。
🧭 背景与定位:纯思考断流为什么最值得救
免费车道按会话统计速率,深度思考模型(如 MiMo、各家的 Deep 档)常先静默几十秒只产 reasoning token(思考 token,模型内部推理产生、不一定外显的字),不吐任何正文。若上游此刻无正常结束帧地关闭流,旧行为只有两条:整段无输出按 TRANSPORT 交给宿主重试,把五分钟重付一遍;或已有输出按 STREAM_CUT 判死(不可重试的截断码),用户只拿到失败。两条路都不给答案。自动恢复在两者之间补第三条:适配器内部只追加一次请求,宿主仍看到一个逻辑回合(用户视角的一次提问,区别于实际发出的 HTTP 次数)。
它替代了什么
它替代"整轮重发"和"手动点继续"。长思考断流不再让内核把同一回合重发三次;正文撞到输出上限(finish=length)也不再让宿主提示"发送继续",而是由continuationMessages把已出正文回灌成 assistant 轮自动续写一次(见 src/recovery.js)。
旧路是 TRANSPORT 重发或 STREAM_CUT 判死,恢复只在适配器内补一次请求。
🔄 核心机制:一次恢复请求的入口、判定与落地
入口:首段只拿到思考就断流
首轮请求(attempt 0)解码流时累积状态。只有canRecover命中才进恢复:收到非空 reasoning、无正文、无工具调用、无正常结束帧、检查点未超限、总时限仍有富余、且本轮尚未救过。另一条canRecoverSilentStop处理"发了 stop 却只有思考"的空停——宿主会把这种回合判成空响应,同样从检查点续写一次。
判定与落地:检查点怎么变成新请求
命中后,recoveryMessages保留原始会话,把收到的思考包成一段明确标注的检查点文本,附指令要求直接给结论、至多 800 词、不得重启分析、不得调用工具,用新的 request ID 在同一 session 发起 attempt 1。抢救段若仍冒出工具调用块,直接抛 STREAM_CUT,绝不转交宿主执行;只有正常收尾且产出非空白正文,才记recovered、以 stop 返回。真实 MiMo Deep 一次实测:首段 304 秒自然 EOF,恢复段 32 秒产出 4264 字符正文,共两次请求。
恢复段出现工具调用即抛 STREAM_CUT,成功仅当正常收尾且正文非空。
🎛️ 配置与边界参数:数字写死在 recovery.js
只能收紧,不能放宽
recoveryPolicy读取settings.streamRecovery(默认开启),所有数值只允许向下收窄:输出上限 8192 tokens、检查点上限 131072 字符,时限取RECOVERY_DEFAULTS的上限。写streamRecovery: false即整体关闭,恢复段彻底不发。
预算不足直接跳过
恢复预算取"剩余额度"与 8192 的较小值;低于MIN_BUDGET(512 tokens)时不发起,checkpointFits再用文本字节做保守容量检查(图片 token 不计入估算)。检查点只存在当前调用内存里,结束后释放,不写盘、不进日志。
输出 8192、检查点 131072、预算下限 512,均定义于 src/recovery.js。
🛑 边界与故障:不救的、救失败的、怎么收尾
| 场景 | 行为 | 落点 |
|---|---|---|
| 第一段已出正文或工具 | 不追加,按原截断收尾 | STREAM_CUT |
| 空停(stop 却只有思考) | 同样救一次 | 续写段 |
| 恢复段冒出工具调用 | 立即中止 | STREAM_CUT |
| 恢复段仍无正文 | 不判成功 | STREAM_CUT |
| 用户取消 | 不改写 | ABORTED |
| 预算 <512 或检查点超限 | 跳过恢复 | 不发起 |
| 某段缺 usage | 只汇总已知值 | noUsage |
失败统一落回 STREAM_CUT(不可重试),目的就是不让宿主把整条长思考回合再重发一遍;取消保持 ABORTED。统计上物理请求与逻辑回合分开记:同一条recoveryId下 attempt 0/1 各落一条样本,failedRequests数物理失败,logical.recovered才数"救回来"的回合(详见 docs/issue-12-recovery.md 与 scripts/recovery-test.mjs)。
救失败落 STREAM_CUT 阻止宿主重发,取消保持 ABORTED。
于是免费额度与恢复次数始终锁在本机——拿不准能救的那一次,默认动作是停下,而不是多烧一份免费思考。
【免费下载链接】dsh-our-free-model在 dsh 里装上这个插件即可,无需登录、注册或填 API Key,就能使用包括 DeepSeek V4.1 Flash、Kimi K3 在内的前沿模型——完全免费,不限量。 All you do is install this plugin in dsh: no login, no sign-up, no API key — the frontier models are just there, DeepSeek V4.1 Flash and Kimi K3 among them. Completely free, with no usage cap.项目地址: https://gitcode.com/gh_mirrors/ds/dsh-our-free-model
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考