Repository navigation
[Bug] subagent: 空字符串的 provider/model/reasoning_effort 被当成显式选择而失败,且报错不给补救(0.2.0-rc.2) #9662
Vsonic12138
started this conversation in
General
Replies: 1 comment
|
同一根因的另一个实例(不同工具、不同包),供参考:
上游已有同题反馈 #9566,我在那里补了本机统计:64 次 两处的共同点:模型会填充所有声明过的可选参数,而执行器对「不适用但已提供」的字段选择报错而不是忽略;且报错都不含"该怎么改",模型只能盲试(本机有一个会话 8 次调用 8 次失败)。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
摘要
Desktop
0.2.0-rc.2(@deepseek-ai/dsh-tool-subagent0.2.0-rc.2,main 上同样如此)下,subagent的三个可选路由字段如果以空字符串出现,会被hasDelegationModelRequest()判定为"模型显式选择了子模型",紧接着被非空校验直接拒绝:而省略这些字段才是工具描述明确要求、也是唯一能落到"继承父路由 / 配置默认值"的写法:
也就是说:
""与"未提供"在语义上完全等价,结果却一个是硬错误、一个是正常启动。影响不只是"报错"。会把 schema 里声明过的可选属性全部填充的模型(本机为
gpt-6.1-sol路由)在需要指定子模型时几乎必然踩中;更麻烦的是报错没有告诉模型"省略即可",它无法自纠。复现
环境:DSH Desktop 0.2.0-rc.2(win-x64 nightly)+ 开启
subagent-model-selection-settings(enabled: true,allowedModels非空)。平台无关,纯 JS 路径。现状与期望
provider: ""、model: ""、reasoning_effort: ""child LLM `provider` must be non-emptyreasoning_effort: ""child LLM `reasoning_effort` must be non-emptynone/auto)... does not support reasoning effort "none"根因
packages/subagent/tool-subagent/src/model-selection.ts(当前 main;自aefc083b引入该功能起就存在,一直未调整):调用点在同文件 L105 / L109-111:
requestedAgentOptions()先用hasDelegationModelRequest()判断"是否发生模型侧选择",再依次assertNonEmpty()。""不携带任何路由语义,把它当"未提供"与上面的工具描述一致。DSH 在其它边界上本来就有"空即未设置"的惯例(例如设置输入处的next === undefined || next.trim().length === 0 ? undefined : next),只有这个工具 JSON 边界没有。本机影响面
统计本机 122 个会话的全部委派调用(117 次):
subagent调用gpt-6.1-sol(本机自定义 provider 路由)grok-4.7gpt-6-lunasubagent_fork(不暴露这三个字段)27 次失败全部落在
gpt-6.1-sol会话;其中一个会话是 14 次调用 14 次失败,重试序列为""->"none"->"auto"->"low"->"default"——模型一直在猜 effort 的合法值,始终没得到"省略该字段即可"的提示,最终放弃委派。细分:18/27 是空字符串(13 次
reasoning_effort: "",5 次provider: ""+model: ""),完全由本问题造成;其余 9 次是模型编造了未公布的 effort / provider 值。建议
requestedAgentOptions()入口或参数解析处删掉空键即可。这能覆盖 18/27,且完全符合已文档化的 omit 语义、不改变任何合法调用的行为:requestedAgentOptions()的合并逻辑本来就在按=== undefined分支,归一化后天然落入继承路径。child LLM `reasoning_effort` must be non-empty/does not support reasoning effort "x"里补上补救说明与可用值,例如:omitreasoning_effortto use the selected route's default; advertised efforts for<provider>/<model>: [...]。与 subagent-model-selection-settings: allowedModels 改动对运行中的 Session 不生效,报错也无补救提示 / changes do not apply to a running Session, error gives no remedy #9087 属于同一类问题:报错不给补救,模型只能盲试。.agents/notes/archived/feature/2026-08-18-model-selected-subagent-routes.md已明确否决"全局 reasoning-effort enum"(理由:effort 标识与默认值属于具体 provider/model 路由),我不主张翻案;只是建议把"该路由实际公布的 effort 集合"带进错误信息/即时提示,而不是放进固定 schema。相关(不重复)
allowedModels改动对运行中的 Session 不生效,且 "route not allowed" 报错不给补救——同一类"报错不可行动",触发条件不同。环境
0.2.0-rc.2(win-x64,nightly 通道),@deepseek-ai/dsh-tool-subagent0.2.0-rc.2gpt-6.1-sol(本机自定义 provider 路由;provider id 已隐去)All reactions