子代理模型配置应在已有会话中即时生效(无需重启),并建议在 Web 设置中增加「强制使用子代理模型」开关([secondary_model].force)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 66/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
你希望看到什么功能?
围绕「让用户配置的子代理模型可靠生效」,希望改进两点:
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 入口与工具描述刷新时机
- Lenguaje dominante
- TypeScript
- Estrellas
- 7.7k
- Forks
- 1.3k
- Merge medio
- 12 h 34 min
- PR fusionados (30 d)
- 307
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de MoonshotAI/kimi-code
-
手机竖屏显示状态下输入框的扩展按钮没有显示Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MoonshotAI/kimi-code#4040 ·
Los mantenedores suelen responder en 1 día
-
顶栏字体不随字体大小缩放bugAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MoonshotAI/kimi-code#4039 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
MoonshotAI/kimi-code#4010 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
MoonshotAI/kimi-code#4008 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
docs(zh): configuration/providers.md is missing the "OAuth and credential injection" sectionAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
MoonshotAI/kimi-code#3947 ·
Los mantenedores suelen responder en 1 día
Todos los issues de MoonshotAI/kimi-code
Issues similares
-
triage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
mermaid-js/mermaid-live-editor#2053 ·
Los mantenedores suelen responder en 1 día
-
factory
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
jessepollak/home#1455 ·
Los mantenedores suelen responder en 1 día
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
lingdojo/kana-dojo#31227 · 1 comentario · 5 reacciones ·
Los mantenedores suelen responder en 1 día
-
mobile: device viewer shows dark status bar icons on its dark backdrop in light mode (Android)Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
appandflow/stim#1838 ·
Los mantenedores suelen responder en 1 día