Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

子代理模型配置应在已有会话中即时生效(无需重启),并建议在 Web 设置中增加「强制使用子代理模型」开关([secondary_model].force)

Abierto
#3,982 0 comentarios 0 reacciones 0 asignados Ver en GitHub

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:已有会话工具描述不刷新

  1. Web 设置「子智能体模型」= A,确认 ~/.kimi-code/config.toml 中 [secondary_model] model = "A";
  2. 在会话中引用 Agent 工具描述 —— Available models 显示 A [default];
  3. 同一运行实例内,Web 设置改为 B(config.toml 变为 model = "B");
  4. 同一会话再次引用工具描述 —— 仍显示 A [default],parameters 亦不变;
  5. 重启 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 model key,与引擎/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

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de MoonshotAI/kimi-code

Todos los issues de MoonshotAI/kimi-code

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.