子代理模型配置应在已有会话中即时生效(无需重启),并建议在 Web 设置中增加「强制使用子代理模型」开关([secondary_model].force)
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 66/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- developer-experience, full-stack
Direzione di ricerca
Start with packages/agent-core-v2/src/agent/loop/machine/tools.ts and engine.ts to trace definition caching during materialize() and tools.sync(), then inspect toolRegistryService.ts and the existing configuration change subscribers. Also locate the Web settings panel and patchConfigRequestSchema; done means existing sessions reflect relevant model changes and the panel can write secondary_model.force with the documented validation behavior.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
你希望看到什么功能?
围绕「让用户配置的子代理模型可靠生效」,希望改进两点:
1. 修改子代理模型后,已有会话应即时生效,无需重启 Kimi Code
现状(复现见下,代码定位基于 main 分支):
- 子代理的实际绑定是 spawn 时现场读配置的(
resolveSubagentBinding→configService.get),这部分本身没有缓存问题; - 但已有会话中
Agent工具的description/parameters是在 agent 作用域创建时一次性快照的,配置变更后不刷新。复现:Web 设置中把子代理模型从 A 改为 B 后,同一运行实例、同一会话内,工具描述的Available models仍显示 A 及其[default]标记;重启后新会话才显示 B。
由此产生的实际问题:
- 主 agent 按过期菜单显式传入已移出模型池的别名时,spawn 直接报
Invalid model …; - 用户无法从会话内确认设置是否生效,只能靠重启验证,形成「改配置必须重启」的心智负担;
- 配置若来自另一进程(直接编辑
config.toml、另一终端的 TUI、桌面端),由于config.toml文件监听默认关闭(configService.ts:setWatchEnabled(... ?? false)),运行中的服务完全感知不到变更,这种情况必须重启才能生效。
期望:
- 工具的
description/parameters跟随相关配置变更刷新:例如订阅onDidSectionChange失效缓存,或在请求序列化时实时读取。参考:toolRegistryService.list()本身已是实时读取tool.description,断点在 machine 层的 definitions 缓存(见下),并非架构上不可行; - 跨进程场景默认开启
config.toml文件监听,或至少在文档中明确说明「外部编辑需重启」。
2. Web 设置中增加「强制使用子代理模型」开关
引擎已支持 [secondary_model].force = true:开启后从工具 schema 中移除 model 参数、工具描述不再列出模型菜单与 primary 选项,所有新建子代理强制绑定配置的模型,显式传模型参数会得到明确报错。但该能力目前只能手改 config.toml,Web 设置面板没有任何入口。
动机:只要配置了模型池,工具描述就会把 primary (= <主模型>) 列为合法选项;实际使用中模型会自行选择 primary,导致子代理跑在主模型上、偏离用户设定、额外消耗主模型额度(用户侧高发)。需要一个「锁死」选项,让子代理无条件使用设定的模型。
期望:
- Web → 设置 → 智能体与会话 → 子智能体 增加「强制使用子代理模型」开关,写入
secondary_model.force。REST 层已支持(patchConfigRequestSchema.secondary_model为z.unknown(),SecondaryModelConfigSchema已有force字段),仅面板缺 UI; - 开关开启时与引擎校验对齐并给出清晰提示(
force不能与[secondary_model.models]池并存、必须存在default_model/model,报错文案引擎已提供); - 写入的 key 建议与引擎解析优先级一致(
default_model),可与 #3903 的对齐诉求一并处理。
补充信息
环境
- Kimi Code 2.0.2
- 平台:Arch Linux (rolling) on WSL2 —
Linux 6.6.114.1-microsoft-standard-WSL2 x86_64 unknown - 供应商/模型:自定义 OpenAI 兼容 provider(主模型与子代理模型均为自定义 alias);非官方订阅
- 界面:kimi web 设置面板
复现 1:已有会话工具描述不刷新
- Web 设置「子智能体模型」= A,确认
~/.kimi-code/config.toml中[secondary_model] model = "A"; - 在会话中引用
Agent工具描述 ——Available models显示A [default]; - 同一运行实例内,Web 设置改为 B(config.toml 变为
model = "B"); - 同一会话再次引用工具描述 —— 仍显示
A [default],parameters亦不变; - 重启 kimi 后新会话显示
B [default]。
代码定位(供参考):
packages/agent-core-v2/src/agent/loop/machine/tools.ts — materialize():
if (definitions.has(info.name)) continue;
首次 sync 后 description/parameters 在该 bundle 生命周期内永久缓存
packages/agent-core-v2/src/agent/loop/machine/engine.ts — bundle 创建及
submit/steer/notify/remind 时调用 tools.sync(),但对已缓存工具不更新
packages/agent-core-v2/src/agent/toolRegistry/toolRegistryService.ts — list()
实时读取 tool.description;断点在 machine 层缓存
配置变更订阅方(flagService / toolPolicyService / profileService / skill sources /
towerService)无一刷新工具定义
复现 2:模型自行选择 primary
配置模型池后,Agent 工具描述包含 - primary (= <主模型>): … 且 model 参数可见;用户观察到模型在可选时传 model="primary",子代理落到主模型而非设定的默认模型(用户侧多次出现,非个例)。
相关 issue
- #3903 — Web 面板读写 legacy
modelkey,与引擎/TUI 不一致(本建议的 force 开关写入 key 应与该 issue 的对齐方案一致) - #2438(closed)— secondary-model 机制的历史来源
- 已检索 stale tool description / force subagent / 重启配置 等关键词,未发现覆盖上述两点的已有 issue
非目标
- resume / fork 沿用原模型、继承主模型的语义不变;force 只约束「新建的非 fork 子代理」
- 不改引擎 force 分支的校验逻辑,仅补 UI 入口与工具描述刷新时机
- Lingua principale
- TypeScript
- Stelle
- 7.8k
- Fork
- 1.3k
- Merge medio
- 1g 7h
- PR unite (30g)
- 108
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di MoonshotAI/kimi-code
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 60/100
MoonshotAI/kimi-code#4225 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
MoonshotAI/kimi-code#4177 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
MoonshotAI/kimi-code#4170 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
MoonshotAI/kimi-code#4147 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
MoonshotAI/kimi-code#4146 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di MoonshotAI/kimi-code
Issue simili
-
Unsampled pageload span is profiled when profileLifecycle is 'trace' (browser UI profiling)Forse già presa @Jxxunnn l’ha presa oggi. ApertaBrowser Waiting for: Product Owner
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
getsentry/sentry-javascript#25497 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
e2e-failure ready-to-code
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
redhat-developer/rhdh-plugin-export-overlays#4438 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
resource: destroying a resource calls AbortController.abort() without a reason, creating an AbortError with a stack trace each timeForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaarea: core
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
angular/angular#71422 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug status: needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
facebook/docusaurus#12739 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
factory-active task-identify-harness-labels-done task-identify-issue-type-done
Difficoltà 1/5 1-3 ore Idoneità per principianti 68/100
vercel/ai#23537 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno