Replies: 1 comment
|
这个问题有一条已经实测的替代路径:使用 Pi 社区的 dsh plugin --profile web add pi2dsh@0.11.0
dsh plugin --profile web add @tintinweb/pi-subagents调用示例: 也可以把模型固定在 ---
model: deepseek-official/deepseek-v4-flash
tools: read, grep, find
---省略 model 时继承当前父模型;显式设置时按该 provider/model 创建子代理。不同父子模型的真实 DSH loop 已验证,不只是 schema 接受参数。项目: https://github.com/weijiafu14/pi2dsh 这不影响帖子里的根因判断,原生 selection tier 仍应修;它提供的是当前可运行、模型选择不被静默覆盖的子代理入口。 |
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.
摘要
subagent 显式指定的模型不生效:workflow 里
agent(prompt, { model: "deepseek-v4-flash" })显式指定 flash,实际所有 LLM 调用都是父/默认模型(pro)。根因是模型选择层(selectionFor)完全忽略AgentOptions.model:selection.current只读"本进程选择 → 会话日志 → 默认模型",子 agent 新会话无日志 → 落到默认(=settings 的agent-default-model);随后installModelSelection在agent/request瀑布后无条件覆盖为selection.assembled——agent-loop 层用显式 model 算出的路由被选择层覆盖掉。发帖人"model 被传递且被校验、却未生效"的两组对照实验与此完全吻合。复现步骤
agent-default-model: deepseek-v4-pro(settings.yaml),deepseek-officialprovider。const r = await agent("请只回复 OK。", { model: "deepseek-v4-flash" });zstd -dc "$DSH_SESSION_JSONL" | grep '"model"' | sort | uniq -c→ 全部deepseek-v4-pro,0 次 flash。agent("OK", { model: "deepseek-v4-nonexistent-xyz" })→ 启动失败(model 被resolveModelInfo校验)——证明 model 字段确实传到了 agent 层,只是最终选择环节被覆盖。根因(源码定位,rc.6)
显式 model 在创建层正确传递 —
@deepseek-ai/dsh-subagent/lib/index.jsL779-780:agentModel = request.agentOptions?.model ?? parent.options.model→ 子 Agent 的options.model = "deepseek-v4-flash"(传递链完好,发帖人实验 2 印证)。选择层不读 AgentOptions —
@deepseek-ai/dsh-host-apiproxy/lib/index.jsselectionFor(L1750-1773):查找顺序只有 picked → 会话日志 → 默认模型;子 agent 新会话无 requestHeader → 落到
defaultModelSelection()= settings 的agent-default-model(pro)——显式AgentOptions.model不在任何 tier 里。request 瀑布后无条件覆盖 —
@deepseek-ai/dsh-agent/lib/types/model-selection.jsinstallModelSelection(L33-47):agent/request拦截await next()后把provider/model强制设为selection.assembled(首次 assemble 时current的快照 = 默认 pro)——agent-loop 用this.options.model(flash,agent-loop L674-677 route 构造)算出的配置被覆盖成 pro。与 [Bug Report] 子代理继承父代理的"创建时默认模型"而非"会话当前模型",第三方 provider 会话中 subagent 必报 no API key for provider route "deepseek-official" #455(子代理BUG #117 子代理模型继承)的关系:
??继承逻辑(L780)保证的是 AgentOptions 正确;但 api-proxy 选择层对"无日志的新会话"一律落到 default——显式 model 被无视是独立的缺陷面(继承与覆盖是同一选择层的两面)。建议修复
方案 A(推荐)·
selectionFor增加 AgentOptions tier:currentgetter 在"日志"之后、"默认"之前读取agent.options.provider/model(显式设置时优先于默认)——子 agent 显式model恢复生效;picked(UI 选择)仍为最高权重。改动小、不影响现有 UI 选择语义。方案 B · 覆盖改为仅对显式 picked 生效:
installModelSelection仅在 selection 有显式选择时覆盖,否则透传 agent-loop 的 route(含 AgentOptions)。语义更彻底,但当前"选择层统一权威"的设计会被打破(UI 选择与 agent options 的取舍需重新定义),改动大。影响
环境
验证材料
dsh-host-apiproxy/lib/index.jsL1750-1773、dsh-agent/lib/types/model-selection.jsL17-52、dsh-subagent/lib/index.jsL779-780、dsh-agent-loop/lib/index.jsL674-677;selection.current= default(pro)→installModelSelection覆盖 flash 路由。First analysis of discussion #1100. Happy to open a PR with fix option A.
All reactions