[功能] Agent Teams 团队视图展示每个子代理实际使用的模型
Author: SherlockGougouCreated Sep 17, 2026Updated Sep 17, 2026
提交前确认
你想要什么
在 Agent Teams 团队视图里直接看到每个成员实际使用的模型:编队画布上的成员卡片显示模型标签(如 sonnet / opus / claude-sonnet-4-5),成员详情面板显示完整模型信息,并能区分「自己指定的模型」和「继承自主代理的模型」。
为什么需要
一个团队里不同队友经常跑不同模型:Agent 定义里写了 model: opus,或者主代理调用时用 model: sonnet 覆盖,或者留空继承主代理。现在编队画布只显示头像、名字、状态和已领任务,成员详情面板只有当前状态、完成任务数、消息数和任务/消息流水,没有任何模型信息。想知道某个队友是哪个模型在跑,只能逐个打开成员会话翻消息,并发多个队友时没法快速判断,排查「某个队友质量明显不一样」「某个队友特别慢或特别贵」这类问题时很被动。
期望行为
- 编队画布成员卡片:在成员名字旁或状态行增加模型标签,展示短名(
opus、sonnet、haiku)或实际模型 id,鼠标悬停显示完整模型名称,与现有的状态点/任务进度条同级,不遮挡头像和任务卡。 - 成员详情面板:在
AgentTeamsMemberInspector头部信息区(当前状态 / 完成任务 / 消息数)增加「模型」字段,显示实际使用的模型;继承主代理时明确标注继承来源,例如「继承主代理 ·claude-opus-4-1」,而不是显示inherit或留空。 - 以实际调用模型为准:当配置里存的是别名(
sonnet/opus/haiku/fable)时,优先展示该成员实际发出请求的模型 id,别名只作为兜底或注释。 - 历史回看按帧显示:回看历史时模型信息跟随当前快照帧,不回填后续才出现的模型;成员结束后保留其最后一次使用的模型。
- 缺失数据不产生空白标签:旧版本 team config 没有
model字段时,用 transcript 推断;实在无法确定时不渲染标签,或显示「未知」,不要出现空标签或undefined。 - 可选:团队摘要栏(
AgentTeamsSummary)显示本次运行的模型分布,例如sonnet ×3 · opus ×1。
现状与限制
数据其实已经存在,缺的是从 CLI 到界面的完整通路:
- CLI 已经解析并落盘:
src/tools/shared/spawnMultiAgent.ts的resolveTeammateModel()按CLAUDE_CODE_SUBAGENT_MODEL→ 调用参数 → Agent 定义model→ 主代理 /teammateDefaultModel的顺序解析,三个 spawn 分支都会把结果写进~/.claude/teams/{team}/config.json的members[].model(teamFile.members.push({ ..., model, ... }))。TeamFile.members类型里已有model?: string(src/utils/swarm/teamHelpers.ts)。 - 服务端已经暴露:
src/server/services/teamService.ts的TeamMember类型已声明model?: string。 - 桌面端丢掉了这个字段:
desktop/src/types/team.ts的TeamMember没有model,desktop/src/stores/teamStore.ts的toTeamMember()也没有映射,所以前端拿不到团队视图需要的数据。 - 真实模型可兜底:
teamService.ts的transcriptMessageFromEntry()会把 assistant 条目的message.model读进TranscriptMessage.model,这是「实际使用模型」最可靠的来源,也能覆盖继承和别名两种情况;但团队视图的TeamWorkbenchMessage目前没有 model 字段。 - 界面缺口:
desktop/src/components/agentTeams/AgentTeamsCanvas.tsx(编队画布)、AgentTeamsMemberInspector.tsx(成员详情)、agentTeamsSummary/agentTeamsModel.ts中都没有模型展示。
按 docs/internals/agent-internals.md 记录的解析顺序,model 还可能显式为 inherit,或来自 parseUserSpecifiedModel() 归一化后的值,因此展示层需要区分「声明值」和「实际值」。
参考与补充
- 模型解析顺序:
docs/internals/agent-internals.md的 Agent Teams 章节(工具参数 → Agent 定义 →inherit→ 主代理) - 涉及文件:
src/utils/swarm/teamHelpers.ts、src/tools/shared/spawnMultiAgent.ts、src/server/services/teamService.ts、desktop/src/types/team.ts、desktop/src/stores/teamStore.ts、desktop/src/components/agentTeams/*
验收标准
- 编队画布每个成员卡片都能看到模型标签,主代理(team-lead)同样显示
- 成员详情面板显示实际模型;继承主代理时标注继承关系而非
inherit - 别名与完整模型 id 的展示规则明确,悬停可看到完整名称
- 旧 team config 缺少
model字段时不出现空白或undefined - 历史回看时模型随帧变化,不回填后续模型
- 相关单元测试覆盖
toTeamMember()映射、模型标签渲染和缺失数据分支
Source: NanmiCoder/cc-haha