GSD-Core 按阶段类型选择模型(Per-Phase-Type Model Selection):配置、解析优先级与源码实现
【免费下载链接】gsd-coreGit. Ship. Done - Core项目地址https://gitcode.com/gh_mirrors/ge/gsd-core点击查看免费下载导读本文讲解 GSD-CoreGit. Ship. Done - Core自 v1.41 引入的**按阶段类型选择模型Per-Phase-Type Model Selection**能力通过.planning/config.json中的models配置块你可以不记忆 30 个 Agent 的完整分类体系直接用planning、research、execution、verification等阶段槽位粗粒度地调整每个阶段使用的模型档位。读完本文你将掌握models.phase_type六个合法槽位、opus/sonnet/haiku/inherit四种取值、与model_overrides/model_profile/dynamic_routing组合时的五层解析优先级并能从源码与测试层面理解其底层解析链路、校验规则与向后兼容保证。该特性由 issue #3023 与 settings-management 文档源码实现集中在 src/model-resolver.cts 与 src/model-catalog.cts回归测试见 tests/model-resolver.test.cjs。一、为什么需要按阶段类型选择模型GSD-Core 的每个阶段由多个专用 Agent 协作完成例如规划阶段由gsd-planner、gsd-roadmapper、gsd-pattern-mapper承担验证阶段由gsd-verifier、gsd-plan-checker、gsd-code-reviewer等八个 Agent 承担。在引入本特性之前调整模型档位只有两条路按 Agent 的model_overrides精确但啰嗦。你必须记住gsd-codebase-mapper属于 research、gsd-doc-writer属于 execution才能写出针对单个 Agent 的覆盖全局model_profile粗放且一刀切。一个档位策略作用于全部 Agent无法表达规划用强模型、执行用标准模型这类典型成本分配诉求。models配置块恰好填补两者之间的空档以阶段类型为粒度planning / research / execution / verification无需学习完整 Agent 分类体系即可表达规划阶段用 Opus、其余阶段用 Sonnet这样的意图代码量只要两行 JSON。从源码结构看src/model-catalog.cts 中的AGENT_TO_PHASE_TYPE正是把每个 Agent 静态映射到唯一阶段类型的真相来源取自model-catalog.json中每个 Agent 的phaseType字段VALID_PHASE_TYPES则是合法阶段槽位的集合二者共同支撑了阶段级调参这一抽象。二、配置项.planning/config.json中的models块2.1 配置键与存放位置特性对应的配置键为models位于项目的.planning/config.json工作流/项目级覆盖路径由planningDir解析可参考 src/planning-workspace.cts。models是动态键模式dynamic key pattern合法槽位由 schema manifest 严格约束。在 config-schema.manifest.json 的动态键模式中可以找到该特性的校验规则{ topLevel: models, source: ^models\\.(planning|discuss|research|execution|verification|completion)$, description: models.planning|discuss|research|execution|verification|completion }也就是说只有六个命名槽位被接受planning、discuss、research、execution、verification、completion。任何其他阶段类型如models.deployment都会被 schema 拒绝见下文校验规则。该 manifest 由 src/config-schema.cts 经 src/configuration.cts 加载是isValidConfigKey校验与config-set命令的单一事实来源。2.2 完整配置示例沿用官方文档 docs/CONFIGURATION.md 中的示例一个同时使用model_profile、models与model_overrides的完整配置如下{ model_profile: balanced, models: { planning: opus, discuss: opus, research: sonnet, execution: opus, verification: sonnet, completion: sonnet }, model_overrides: { gsd-codebase-mapper: haiku } }该配置的效果所有 research 阶段 Agent 解析为sonnet除了gsd-codebase-mapper被按 Agent 覆盖钉死为haikuplanning / discuss / execution 阶段全部为opusverification 与 completion 为sonnet。2.3 阶段类型 → Agent 映射表models.phase_type的每个槽位会应用到一组 Agent。下表与 docs/CONFIGURATION.md 及特性文档 docs/features/per-phase-type-model-selection.md 保持一致阶段类型Slot归属 Agentplanninggsd-planner、gsd-roadmapper、gsd-pattern-mapperdiscussgsd-assumptions-analyzerresearchgsd-phase-researcher、gsd-project-researcher、gsd-research-synthesizer、gsd-codebase-mapper、gsd-ui-researcherexecutiongsd-executor、gsd-debugger、gsd-doc-writerverificationgsd-verifier、gsd-plan-checker、gsd-integration-checker、gsd-nyquist-auditor、gsd-ui-checker、gsd-ui-auditor、gsd-doc-verifier、gsd-code-reviewercompletion保留给未来子 Agent当前无映射注意discuss与completion两个槽位目前被 schema 接受但尚无 Agent 映射到它们——今天设置它们是一个 no-op不会报错也不产生效果这是为未来子 Agent 预留的向前兼容槽位对应需求 REQ-PHASE-MODELS-03。从实现层面看这张表不是手写的两份文档而是由model-catalog.json中每个 Agent 的phaseType元数据统一驱动src/model-catalog.cts 通过export const AGENT_TO_PHASE_TYPE: Recordstring, string Object.fromEntries( Object.entries(_catalog.agents).map(([agent, meta]) [agent, meta.phaseType]) );生成映射因此文档与代码不会漂移。测试 tests/model-resolver.test.cjs 中的#3023 phase-type schema测试组还专门断言MODEL_PROFILES中每个 Agent 都必须有 phase-type 赋值且赋值必须是六个合法槽位之一。2.4 合法取值models.phase_type只接受档位别名tier alias不接受完整模型 ID取值效果opus标准档位——运行时解析会将该阶段 Agent 映射到当前活跃运行时的 Opus 档模型sonnet标准档位——映射到活跃运行时的 Sonnet 档模型haiku标准档位——映射到活跃运行时的 Haiku 档模型inherit该阶段 Agent 跟随会话模型语义与model_profile: inherit一致重要限制如果你需要完整模型 ID例如openai/gpt-5、google/gemini-2.5-pro不要写在models.*里而应使用按 Agent 的model_overrides。models.*刻意设计为仅档位目的是保证在 Codex / OpenCode / Antigravity CLI 等非 Claude 运行时上运行时感知runtime-aware的档位映射依然正确——完整 ID 会破坏这种跨运行时可移植性。该限制在源码中有对应的硬性守卫computeProfileTiersrc/model-resolver.cts读取config[models][phaseType]后用VALID_TIERS.has(phaseTypeTier)校验——VALID_TIERS由model-catalog.json的adaptiveTierMapheavy→opus、standard→sonnet、light→haiku加inherit派生而来。因此非法档位值会落入 profile 兜底解析不会污染运行时档位解析链。三、解析优先级五层从上到下依次生效models.phase_type处于解析链的第三层。完整的解析优先级从高到低为1. model_overrides[agent] ← 按 Agent可写完整 ID定向例外 2. dynamic_routing.tier_models[tier] ← 启用时生效见 Dynamic Routing 3. models[phase_type] ← 粗粒度阶段级档位本特性 4. model_profile每个 Agent 一列 ← 全局档位策略 5. Runtime default ← 兜底五层自上而下组合model_profile是基础档位models[phase_type]在阶段层面覆盖之dynamic_routing启用时在软失败时按尝试次数升级档位model_overrides[agent]在最顶层雕刻按 Agent 的例外当没有任何一层生效时回落到运行时默认档位。在 2.2 的示例中五个 research Agent 全部解析为sonnet唯独gsd-codebase-mapper被按 Agent 覆盖钉为haiku。dynamic_routing默认关闭——当enabled: false或整块省略时本节行为与未引入该特性之前完全一致。3.1 优先级在源码中的落地位置resolveModelInternalsrc/model-resolver.cts严格按上述顺序实现Step 1读取config[model_overrides]命中即返回Claude 运行时还会经mapClaudeOverrideForRuntime把完整 Claude ID 折叠回档位别名Step 2computeProfileTier(config, agentType)计算基础档位——其中正是读取config[models][phaseType]并做VALID_TIERS校验、命中则直接返回的阶段级档位未命中才回落到MODEL_PROFILES[agent][profile]Step 2.5model_policy预设provider 中立策略解析Step 3非 Claude 运行时的运行时感知档位映射_resolveRuntimeTierStep 4 / 4.5 / 4.75resolve_model_ids: omit门、Claude 档位覆盖、dynamic_routing.tier_models查询Step 5profile 兜底查询最终输出档位别名或inherit。其中步骤 4.75 的注释明确引用了特性文档的优先级约定model_overrides永远优先dynamic_routing.tier_models[tier]解析在models.phase_type与model_profile之上。因此dynamic_routing.tier_models恰好落在本特性与 profile 之间与 3 的优先级表完全对应。3.2 关键语义细节phase-type 优先于 profileinherit一个容易被忽视的语义models[phase_type]优先于model_profile: inherit。修复前的缺陷是当model_profileinherit且models.executionopus时profile 的短路逻辑先于阶段级覆盖触发导致gsd-executor错误解析为inherit违反models[phase_type] 高于 model_profile的文档约定。该缺陷在测试 tests/model-resolver.test.cjs 中以CR Major级别回归锁定test(phase-type override wins over profileinherit (CR Major) — model resolver, () { writeConfig(projectDir, { model_profile: inherit, models: { execution: opus }, }); // gsd-executor (execution) must get the phase-type opus, not inherit. assert.equal(resolveModelInternal(projectDir, gsd-executor), opus); });同时没有设置槽位的 Agent 在model_profile: inherit下仍然继承会话模型两条规则互不干扰。四、校验规则schema 拒绝、解析器宽容4.1config-set命令侧严格校验通过gsd config-set写入配置时schema 严格拒绝未知阶段类型$ gsd config-set models.deployment opus Error: models.deployment is not a valid config key # 合法写法 $ gsd config-set models.research sonnet错误信息来自config-schema的isValidConfigKey校验对应需求 REQ-PHASE-MODELS-01六个命名models.*槽位被config-schema接受config-set拒绝未知阶段类型。4.2 直接编辑配置文件侧宽容兜底直接手改.planning/config.json则宽松得多解析器遇到不认识的取值会静默忽略并回落到 profile 档位而不是报错中断。因此一个笔误如haiku3不会悄悄破坏档位解析。这是文档与测试共同确认的行为测试unrecognized tier value falls through to profile (typo safety)models: { research: haiku3 }落到balanced档位的sonnet测试full model ID in models.phase_type is rejected; falls through to profilemodels: { research: openai/gpt-5 }同样回落不会把完整 ID 注入运行时档位解析链。两种校验策略各有分工CLI 入口config-set严格到拒绝即报错配置文件入口宽容到坏值即回落保证既有配置在升级后行为不变。五、向后兼容保证没有models块时行为逐字节不变特性需求 REQ-PHASE-MODELS-02 明确要求未包含models块的配置行为与 v1.41 之前逐字节一致。这一点由源码的读取方式与测试双重保证computeProfileTier中configModels为空或phaseType未命中时phaseTypeTier为undefinedVALID_TIERS.has(undefined)为 false直接进入 profile 查询分支——整体行为等同于没有models配置测试empty models block is a no-op与no models block at all is a no-op分别验证models: {}和完全省略models两种情形下gsd-phase-researcher仍解析为sonnet、gsd-planner仍解析为opus与balancedprofile 默认一致。这一缺省即无感的设计让存量项目无需任何迁移即可升级到 v1.41。六、实战如何选择配置粒度官方文档给出了一张按需求选工具的对照表可直接作为日常决策依据你的诉求使用一个全局档位策略处处 balancedmodel_profile粗粒度阶段级调参规划用 Opusmodels.phase_type按 Agent 精确控制强制 codebase mapper 用 haikumodel_overrides[agent]为某个特定 Agent 指定完整模型 IDmodel_overrides[agent]: openai/gpt-5这些方式可以自由混用——只要符合第三节的五层优先级规则任何重叠都会被确定性地解析不存在歧义。典型成本分配实践规划与讨论阶段是需要深度推理的重脑力环节gsd-planner、gsd-roadmapper、gsd-assumptions-analyzer等 Agent 在model-catalog.json中本就归属heavy默认档位可以用models.planning: opus、models.discuss: opus保证质量research / verification 属于高吞吐的标准负载用models.research: sonnet、models.verification: sonnet控制成本如果某个高频低风险的 Agent如gsd-codebase-mapper想进一步省钱再用model_overrides钉到haiku。三层配合即可在质量—成本—精确度三角中自由取点。七、相关能力与阅读路径本文的权威长文档Per-Phase-Type Modelsdocs/CONFIGURATION.md包含完整的配置示例、取值表、优先级表与校验示例配置项速查表settings-managementdocs/features/settings-management.md实现源码src/model-resolver.ctscomputeProfileTier、resolveModelInternal为核心读取与解析点、src/model-catalog.ctsAGENT_TO_PHASE_TYPE、VALID_PHASE_TYPES、VALID_TIERS的派生来源、gsd-core/bin/shared/model-catalog.jsonphaseTypes、每个 Agent 的phaseType元数据Schema 校验来源gsd-core/bin/shared/config-schema.manifest.jsonmodels.phase_type动态键模式回归测试tests/model-resolver.test.cjs#3023系列阶段级覆盖、per-agent 优先、typo 回落、inherit 语义、空块 no-op、CR Major 修复等。如果你需要与失败时自动升级档位组合使用可进一步阅读 Dynamic Routing with Failure-Tier Escalationdocs/CONFIGURATION.md 中的dynamic_routing章节——它定义了tier_models[tier]如何在models.phase_type之上生效以及max_escalations、escalate_on_failure等配套参数。赞分享【免费下载链接】gsd-coreGit. Ship. Done - Core项目地址https://gitcode.com/gh_mirrors/ge/gsd-core点击查看免费下载相关推荐gsd-core 按阶段类型Phase-Type配置模型选择.planning/config.json 的 models 块深入解析gsd core 按阶段类型Phase Type配置模型选择 .planning/config.json 的 models 块深入解析 导读 gsd coGSD 模型选择与动态路由完全指南按阶段选模型、配置兜底与跨供应商成本优化GSD 模型选择与动态路由完全指南按阶段选模型、配置兜底与跨供应商成本优化 本篇技术指南围绕 GSDspec driven development 系统的人工智能AI Agent代码智能体Agent 编排CLIAI 应用gsd-core 分阶段粒度覆盖granularities.phaseType配置指南按阶段类型精细调控规划粒度gsd core 分阶段粒度覆盖granularities.phaseType 配置指南按阶段类型精细调控规划粒度 本指南围绕 gsd core 的 g文档教程上一篇Rampart安全审计深入分析系统的隐私保护能力和局限性下一篇Nightwatch.js 跨平台测试Windows/macOS/Linux 兼容性保障创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Tock 内核工作组 2025-10-02 会议纪要解读:SingleThreadValue 迁移与外部依赖策略落地

Tock 内核工作组 2025-10-02 会议纪要解读:SingleThreadValue 迁移与外部依赖策略落地

操作系统嵌入式嵌入式OS 【免费下载链接】tock A secure embedded operating system for microcontrollers 项目地址: https://gitcode.com/gh_mirrors/to/tock 点击查看 免费下载 导读 本文基于 Tock 核心工作组(Core WG)2025 年 10 月 2 …

2026/10/10 1:40:42 阅读更多 →
Pikiwidb(Pika)主从同步机制深度解析:全量同步与增量同步的实现原理

Pikiwidb(Pika)主从同步机制深度解析:全量同步与增量同步的实现原理

数据库KV存储后端 【免费下载链接】pika Pikiwidb is a Redis-Compatible database developed by Qihoos infrastructure team. 项目地址: https://gitcode.com/gh_mirrors/pi/pika 点击查看 免费下载 Pikiwidb(Pika)通过 master/slave 主从…

2026/10/10 1:40:42 阅读更多 →
Apache Zeppelin 动态表单(Dynamic Form)完整指南:模板语法与编程式创建

Apache Zeppelin 动态表单(Dynamic Form)完整指南:模板语法与编程式创建

后端前端大数据数据分析 【免费下载链接】zeppelin Web-based notebook that enables data-driven, interactive data analytics and collaborative documents with SQL, Scala and more. 项目地址: https://gitcode.com/gh_mirrors/zeppelin2/zeppelin 点击查看 免…

2026/10/10 1:40:42 阅读更多 →

最新新闻

STM32F756ZG与PCA9422电源管理方案:硬件连接、寄存器配置与低功耗调试实战

STM32F756ZG与PCA9422电源管理方案:硬件连接、寄存器配置与低功耗调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 2:32:00 阅读更多 →
mergerfs 兼容性与集成实战:操作系统、底层文件系统、容器、SELinux 与 inotify 生态适配全解

mergerfs 兼容性与集成实战:操作系统、底层文件系统、容器、SELinux 与 inotify 生态适配全解

存储 【免费下载链接】mergerfs a featureful union filesystem 项目地址: https://gitcode.com/gh_mirrors/me/mergerfs 点击查看 免费下载 本篇围绕 mergerfs 的兼容性与第三方集成展开,覆盖官方 FAQ《Compatibility and Integration》的全部要点&…

2026/10/10 2:32:00 阅读更多 →
Zblog插件【发布】ZB蚨鸟5号-网站流量统计-ZB插件

Zblog插件【发布】ZB蚨鸟5号-网站流量统计-ZB插件

你有没有遇到过这样的情况:在使用第三方网站统计的时候,网站深夜经常被暗暗弹出XX内容?为了告别第三方统计不安全行为,蚨鸟-网站流量统计插件诞生,一款专为Zblog设计的全功能流量统计插件,帮助站长全面了解…

2026/10/10 2:32:00 阅读更多 →
PCA9422+MK24实现高效电源管理:从PMIC到MCU的实战解析

PCA9422+MK24实现高效电源管理:从PMIC到MCU的实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 2:32:00 阅读更多 →
NumPy实战:物联网传感器温度数据清洗与滑动窗口趋势分析

NumPy实战:物联网传感器温度数据清洗与滑动窗口趋势分析

拿到一批物联网传感器温度数据,18万行,里面什么妖魔鬼怪都有——缺测、跳变、超量程、格式错乱。这个案例是“Python数据分析项目实战(024)——NumPy应用案例5”,我把它定位成一个综合性实战:不单独讲某个函数,而是用N…

2026/10/10 2:32:00 阅读更多 →
UnoCSS 在 Nuxt 中的集成实践:@unocss/nuxt 模块安装、配置与 Nuxt Layers 合并全解析

UnoCSS 在 Nuxt 中的集成实践:@unocss/nuxt 模块安装、配置与 Nuxt Layers 合并全解析

AI 技能人工智能 【免费下载链接】skills Anthony Fus curated collection of agent skills. 项目地址: https://gitcode.com/gh_mirrors/skills11/skills 点击查看 免费下载 本文以 UnoCSS 官方 Nuxt 模块 unocss/nuxt 为主线,系统讲解在 Nuxt 应用中接…

2026/10/10 2:31:00 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →