# 全局模型设置 · 两槽模型选择(PLAN-MODEL) > 需求(2026-09-10 用户提出):在 taskflow 内单独设置模型,且**拆解 agent 与执行 agent > 可分别配置**。评估结论:完全可行——模型选择在代码里本就只有一个收口点 > (adapter `createAgent`),宿主侧模型目录可直接结构性投影自 `ctx.llm`(项目已 > peer 依赖 `@deepseek-ai/dsh-llm`),零新增依赖。 ## 1. 概念与语义 - taskflow **没有常驻主 agent**(调度器是宿主 JS 代码),「主/子 agent」映射为两槽: | 槽位 | 会话 | 典型用法 | |---|---|---| | `decompose` 拆解 | 拆解会话(规划/验收补全) | 配强模型 | | `execution` 执行 | 执行会话(子任务实现/举证,含 adopt 接管) | 配快/便宜模型 | - 每槽 `null = 跟随宿主默认`(存量行为显式化,默认值,零迁移); 非 null = `{ provider, model, reasoningEffort? }`(同宿主 agentDefaultModel 形态)。 - 生效语义:**只影响之后新建的会话**;运行中会话不变。adopt/resume 同样接受 agentOptions,宿主本就支持会话中途换模型(GUI /model 弹窗同款)。 ## 2. 数据与 API - 存储:`$DSH_HOME/taskflow/settings.json`(与 ledger.json 并列;刻意不进 ledger—— 设置不是任务状态,混入会污染事件留痕/快照 diff/健康检查语义;也不进插件 config—— 那需要重启宿主)。原子写(tmp + fsync + rename,0600);损坏回退默认 + `lastLoadError`。 - 端点(同源信任围栏照旧): - `GET /api/taskflow/settings` → `ModelSettings` - `PUT /api/taskflow/settings` → fail-closed 形状校验(未知字段/空串一律 400) - `GET /api/taskflow/models` → `ModelCatalog`(`ctx.llm` 的 listProviders/listModels/ resolveModelInfo 投影,单 provider 失败 fail-soft 跳过;未注入提供方 → 501) - 引擎:`getModelSettings()/setModelSettings()`;两槽经 `DecomposeSessionInput.model` / `ExecutionSessionInput.model` 下传;adapter 取值 `input.model ?? defaultModelSelection()`。 ## 3. UI(用户已确认方向) - 入口:**看板工具栏右侧齿轮图标**(`tf-icon-btn`)→ 320px 浮层(不占创建表单, 不值一个 480px 抽屉)。两槽各一个原生 `