子代理模型配置应在已有会话中即时生效(无需重启),并建议在 Web 设置中增加「强制使用子代理模型」开关([secondary_model].force)
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 66/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- typescript
調査の方向性
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.
索引モデルが issue の本文から書いたものです。
説明
你希望看到什么功能?
围绕「让用户配置的子代理模型可靠生效」,希望改进两点:
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 入口与工具描述刷新时机
- 主要言語
- TypeScript
- スター
- 7.7k
- フォーク
- 1.3k
- 平均マージ
- 12時間 35分
- マージ済み PR(30日)
- 311
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
MoonshotAI/kimi-code のほかの issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
MoonshotAI/kimi-code#4040 ·
メンテナーはふだん 1 日以内に返信
-
顶栏字体不随字体大小缩放bugオープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
MoonshotAI/kimi-code#4039 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
MoonshotAI/kimi-code#4010 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
MoonshotAI/kimi-code#4008 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
MoonshotAI/kimi-code#3947 ·
メンテナーはふだん 1 日以内に返信
MoonshotAI/kimi-code の issue をすべて見る
似ている issue
-
Mend: dependency security vulnerability untriaged
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
opensearch-project/security-dashboards-plugin#2545 ·
メンテナーはふだん 1 日以内に返信
-
Add: Dream TR SDオープンcheck:passed streams:add
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
メンテナーはふだん 1 日以内に返信
-
doctor integrity sample scans soft-deleted pages on Postgres (batch path has no deleted_at filter)オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 72/100
SocialGouv/egapro#4672 · コメント 1 件 ·
メンテナーはふだん 2 日以内に返信
-
area:agents area:tui bug
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
anthropics/claude-code#98358 ·
メンテナーはふだん 1 日以内に返信