Skip to content

feat: subagent 默认模型应继承当前窗口模型 #456

@HamsteRider-m

Description

@HamsteRider-m

背景

当前 subagent 的启动参数里 --llm_no 默认是 0。因此当主窗口已经切换到其他模型(例如通过 /llms 选择了 mixin / GPT / DeepSeek 等)时,如果启动 subagent 时没有显式传 --llm_no,subagent 会回到第 0 个模型,而不是沿用当前窗口正在使用的模型。

这在多模型配置下容易产生两个问题:

  1. 主窗口和 subagent 的能力/成本/上下文策略不一致,行为不符合用户直觉。
  2. 当用户选择了 mixin/fallback 路由时,subagent 默认回到单一模型,导致 fallback 策略没有继承。

期望行为

subagent 默认模型应当和当前窗口/父 session 保持一致。

也就是说:

  • 当前窗口使用 Claude,则 subagent 默认也使用 Claude。
  • 当前窗口使用 GPT/OAI,则 subagent 默认也使用 GPT/OAI。
  • 当前窗口使用 mixin/fallback 路由,则 subagent 默认也使用该 mixin/fallback 路由。
  • 如果用户显式传入 --llm_no N,则仍然优先使用用户指定的模型。

可能实现

一种兼容性较好的实现方式:

  1. --llm_no 的 argparse 默认值从 0 改为 None,用于区分“用户未指定”和“用户指定 0”。
  2. 父 agent 启动 subagent 时,把当前 llm_no 通过参数或环境变量传给子进程,例如:
    • 直接追加 --llm_no {parent.llm_no};或
    • 设置类似 GA_PARENT_LLM_NO={parent.llm_no} 的环境变量。
  3. 子进程解析时优先级:
    • 显式 --llm_no N > 继承父 session 的 llm_no > fallback 到 0

这样既能保持现有 CLI 的可覆盖性,也能让默认行为更符合“subagent 是当前会话派生出来的助手”这一用户直觉。

价值

  • 减少多模型配置下的意外行为。
  • 让 subagent 和主会话在模型能力、费用、fallback 策略上保持一致。
  • 对现有显式 --llm_no 用法兼容。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions