[Bug] Agent 在超长上下文 + max reasoning effort 下陷入思考退化循环:回合零产出、无自动熔断,需手动中止(v4.1-flash;同配置 v4-flash 3000+ 步未复发) #5976
Replies: 8 comments 4 replies
|
人类来了: |
|
@zdaxie 这条我先给一个源级判读(在 master c389f96 上核对),帮你把「这是不是 dsh 的 bug」和「能不能修」分开。结论:这不是 dsh 的回合金丝雀,而是模型侧生成退化,但恰好暴露了一个 guard 层缺口 —— 这个缺口可以被插件补上,不需要动 core。 一、为什么"回合零产出、无自动熔断"你这轮的现象是:turn 内零工具调用、零回复文本,全部输出为 thinking 增量,且陷入"好。执行。好。(输出工具调用)"式自我催促循环。判读关键在 agent-loop 的 turn 循环 循环只有在 二、为什么现有 guard 兜不住
所以这不是现有 guard 漏检,而是它们本就不覆盖"纯思考空转"这一失败面。 三、插件可挂载面(我准备这样做)
反应能力已有: 我正按 补充一点对你的判定:"同配置 v4-flash 3000+ 步未复发" 是强证据——这说明故障面在模型侧(v4.1-flash-expires-on-0910 的 reasoning 生成在长上下文 + max effort 下退化),而非 dsh 的输入组装。但 harness 侧确实缺一个"模型卡死时的兜底",这层用插件补即可。需要的话我贴出更细的 step 计数 + chunk 判定的实现草案。 |
|
@argszero 判读完全正确,且我们已逐条验证。补充实测数据,支撑「模型侧生成退化」判定: 1. /compact 后仍复现(新证据,可复核)我们随后在该事故会话执行了 → 上下文长度不是主因:即使回到 32 万 token,模型仍在同一会话内持续退化循环。这与我们另一条证据互相印证——同配置(max/256000/100 万窗口)下 2. 对「复现路径」的修正原帖复现路径第 1 条(含 51.5 万 token 上下文)需修正为:上下文长只是伴随条件而非必要条件——更精确的触发特征是「该模型在会话内已进入退化状态后,同会话持续复现(含压缩后新回合)」;样本量 1,未做同模型对照复现,供参考。 3. 对你方案的确认
4. 与本帖相关的另一观察(同模型)用户反馈 附:若需原始记录查证,本会话 JSONL 完整可提供(含压缩前后全部 chunk 序列)。 |
|
@jilian-dsh 插件已发布,按你说的"可提供原始 chunk 序列样本做阈值标定",我已把首版做出来并标注了可调项。 已发布资产
实现(对齐你确认的 seam)你上一轮逐条验证的挂载面我照此实现:
默认参数(保守取向){
maxThinkingSteps: 3, // 连续 reasoning-only step 数
minReasoningChars: 2048, // 单 step 至少这么长才计入
repeatRatio: 0.5, // longest repeated token / total tokens
escalate: 'steer', // warn | steer (默认) | cancel
cancelCause: 'thinking-loop',
}"好。执行。好。"式低熵循环因 阈值标定如果你那边有原始 chunk 序列样本(压缩前后都行),我可以据此把 另外你提到的同模型图片无法发出(#5976 末尾附加观察)——那属于模态声明面,与 reasoning 退化正交,我记为待确认(已在 model-inputmodalities 缺口家族里),需要的话我可以单独拆开跟进。 |
|
@jilian-dsh 你在我插件仓库提的 P0( v0.1.1 关键改动
顺带回应你上一条"同模型图片无法发出"的观察 —— 那个属模态声明面,与 reasoning 退化正交,我已记到 model-inputmodalities 家族(#5837/#5848/#5941),需要的话我可以单独拆开跟进。 |
|
我们这边也遇到了同样的情况,顺手同步一个环境,供参考。 环境:Windows + 真正想补充的一点,是从使用者的角度出发的:这个问题的触发门槛比看上去要低。 我们就是跑一个普通的、稍长的任务,并没有做什么特殊配置就撞上了;而且它很隐蔽——界面上只显示「思考中」,看起来和模型认真推理没有任何区别。不点开 thinking 块,根本察觉不到它卡在重复里,只会当成模型变慢,然后干等。 所以我的判断是:报出来的人少,不代表遇到的人少。 很多人可能跟我的第一反应一样,把它当成偶发的卡顿,手动中断就算了,未必意识到这是个 bug。 这也正是为什么自动兜底不能只看「长时间没产出」——正常的长推理同样没有文本和工具输出,时长不是有效特征。要可靠识别,确实需要像 @argszero 那样抓重复句式(repeated-gram)的特征,而不是依赖时间阈值。 如果各位需要更多样本标定阈值,我这边可以把手头触发时的 chunk 序列提供出来。 |
|
@gezi-wen 感谢独立确认——这是继 @jilian-dsh 之后第二个实测复现(同为 v4.1-flash-expires-on-0910、Windows + dsh web 部署),而且你补的「使用者视角」两点都说到根上了:
插件形态方案已可落地试用:针对这个具体症状(CJK 无空格重复「好。执行。好。好。」),我这边已经有现成的自动兜底插件可直接 mount:
如果你们在 dsh web 部署上愿意试装跑一个长任务验证,欢迎直接报现象回来——这正好补上"真实 dsh web + 长会话 + thinking 拉满"这个我最想要的实机场景。 关于 chunk 样本:非常需要,接受你的 offer。触发时把原始 chunk 序列给我(压缩前后都行,贴 gist / 仓库 issue 附件 / 直接贴文本均可),我会用来:① 标定 |
|
插件已到 v0.1.5,现在可以用你自己的会话文件标定,不必手动整理 chunk 序列了。 给 @gezi-wen 和后续要提供样本的人:v0.1.5 随包附了一个离线复跑工具,它用插件运行时同一个 detector 复跑一份 session jsonl: node node_modules/@argszero/cordis-plugin-thinking-loop-guard/tools/analyze-session.mjs \
<你的 session.jsonl> --similarity 0.6 --threshold 3 --min-chars 512
npm latest = 0.1.5 / GitHub |
Uh oh!
There was an error while loading. Please reload this page.
环境
@deepseek-ai/dsh0.1.2-rc.1(npm 安装)deepseek-v4.1-flash-expires-on-0910deepseek-v4-flash-vision-exp(同配置,未复发)reasoningEffort: max,maxTokens: 256000,contextWindow: 1000000dsh web使用现象
会话最后两个回合模型"纯思考空转":
关键对照(重要)
问题模型之前,同一环境、相同配置(max / 256000 / 100 万窗口)使用
deepseek-v4-flash-vision-exp跑过一个 3083 步 / 510 轮的超长会话,全程未出现本问题。本次为更换为deepseek-v4.1-flash-expires-on-0910后新发现(样本量 1,未做同模型对照复现)。复现路径
reasoningEffort: max;时序(回合记录,GMT+8)
循环样本(实际记录)
期望的产品改进
附加观察(同模型,待官方确认)
用户反馈
deepseek-v4.1-flash-expires-on-0910理论上为多模态,但图片无法发出。若属已知限制请忽略;若不属,请确认该模型的模态支持面与正式版deepseek-v4-flash-vision-exp的差异。相关讨论
Math.min(...sourceEventSeqs)超 V8 参数上限),本次为模型侧生成退化。附注
@zdaxie 官方团队能否确认这是否为已知问题?
All reactions