gsd-core 的 model_policy 配置体系:从已知提供商预设到通用逃生通道的模型解析机制
发布时间:2026/9/26 3:09:24来源:尧图网络
【免费下载链接】gsd-coreGit. Ship. Done - Core项目地址https://gitcode.com/gh_mirrors/ge/gsd-core点击查看免费下载导读本文讲解 gsd-coreGit. Ship. Done在 v1.42 引入的model_policy配置面对应 change 文件silly-jaguars-swim.md所述的功能变更。该配置面为不同 AI 运行时runtime提供了提供商中立的模型分层配置方式既支持 openai/anthropic/google/qwen 等已知提供商的目录预设也提供generic通用逃生通道让用户直接指定模型 ID同时model_policy.runtime_tiers拥有高于旧式model_profile_overrides的解析优先级且reasoning_effort只转发给支持它的运行时。读完本文你将掌握model_policy的完整字段语义、优先级链、运行时适配细节以及它如何与 gsd-core 的模型解析器model-resolver在源码层面协同工作。一、功能背景为什么需要 model_policygsd-core 的模型选择原本依赖model_profile_overrides.runtime.tier这套“逐运行时、逐档位”的旧式配置。它要求用户手动掌握每个运行时的正确模型 ID——例如在opencode上要写anthropic/claude-opus-4-8这样的完整路径。对于非 Anthropic 运行时这种配置既繁琐又容易出错配置参考 明确将其称为“legacy”面。model_policy应运而生提供一条更简单、提供商中立的路径选一个已知提供商openai/anthropic/google/qwen再选一个预算档位high/medium/lowgsd-core 在解析时自动把目录预设物化成对应 tier 的模型 ID或者用generic/custom把模型 ID 当作不透明字符串直接填写不做任何前缀推断、不套用任何推理努力默认值。在源码层面这一功能对应 src/config-types.cts 中定义的ModelPolicyConfig接口以及 src/model-resolver.cts 中的resolveModelPolicy()实现。二、model_policy 配置字段全景model_policy是.planning/config.json下的一个顶层对象。完整字段如下字段类型取值默认说明model_policy.providerstringopenai、anthropic、anthropic-fable、google、qwen、generic、custom无声明模型提供商。已知提供商解锁目录预设generic/custom将所有模型 ID 视为不透明字符串model_policy.budgetenumhigh、medium、low无已知提供商下的预算档位解析时物化到对应 tiergeneric/custom下被忽略model_policy.highstring模型 ID无generic/custom提供商下的高档位模型 IDmodel_policy.mediumstring模型 ID无generic/custom提供商下的中档位模型 IDmodel_policy.lowstring模型 ID无generic/custom提供商下的低档位模型 IDmodel_policy.runtime_tiers.runtime.tierobject{ model, reasoning_effort? }无逐运行时、逐 tier 的显式条目tier取opus/sonnet/haiku优先级高于model_profile_overrides字段枚举值以 docs/CONFIGURATION.md 的配置表为准也受config-loader校验约束见下文第四节。从源码看字段形态src/config-types.cts 给出了 TypeScript 侧的精确形态TierEntry{ model: string; reasoning_effort?: string }——单个 tier 条目reasoning_effort只转发给接受它的运行时例如codexRuntimeTiers{ low?, medium?, high? }——三个标准 GSD tier 全部可选允许部分覆盖例如只写opusModelPolicyConfig{ provider: string; budget?: string; runtime_tiers?: Recordstring, RuntimeTiers }。注意RuntimeTiers内部字段是low/medium/high而runtime_tiers内层的 tier 键是opus/sonnet/haiku——两者含义不同前者是预算档位后者是 GSD 内部档位名docs/CONFIGURATION.md。三、三条使用路径已知预设、runtime_tiers、通用逃生通道3.1 已知提供商预设Sub-path B在 settings 工作流中选择提供商 预算档位GSD 会写入该提供商/预算组合的规范化模型 ID{ runtime: codex, model_policy: { provider: openai, budget: medium, high: gpt-5.6-sol, medium: gpt-5.6-terra, low: gpt-5.6-luna } }已知提供商列表openai、anthropic、anthropic-fable、google、qwen预算档位high、medium、low。选anthropic保留 Opus 4.8 支持的 Claude 预设选anthropic-fable则在高预算顶级路由中改用 Claude Fable 5docs/CONFIGURATION.md。从测试可以验证预设映射的确定性——tests/model-resolver.test.cjs 断言anthropicopushigh解析为claude-opus-4-8anthropic-fableopushigh解析为claude-fable-5。3.2 runtime_tiers逐运行时显式控制Sub-path A需要精细控制时用内部档位名opus/sonnet/haiku显式给出每个运行时的条目{ runtime: codex, model_policy: { provider: openai, runtime_tiers: { codex: { opus: { model: gpt-5.6-sol, reasoning_effort: high }, sonnet: { model: gpt-5.6-terra, reasoning_effort: medium }, haiku: { model: gpt-5.6-luna, reasoning_effort: low } } } } }该示例来自 docs/CONFIGURATION.md。3.3 generic/custom 逃生通道面向 OpenRouter、LiteLLM、本地网关或任何需要手动指定精确模型 ID 的运行时。此时 GSD不推断、不套默认值high/medium/low三个键原样透传{ runtime: opencode, model_policy: { provider: generic, high: openrouter/anthropic/claude-opus-4-5, medium: openrouter/anthropic/claude-sonnet-4-5, low: openrouter/anthropic/claude-haiku-4-5 } }示例见 docs/CONFIGURATION.md。generic和custom在实现中是同一语义在 src/model-resolver.cts 的resolveModelPolicy中二者走同一条TIER_TO_POLICY_KEY映射opus→high、sonnet→medium、haiku→low直接返回policy[high|medium|low]字符串。四、config-loader 的校验与警告model_policy不仅由解析器消费还在配置加载阶段被校验。src/config-loader.cts 对三类错误发出一次性 stderr 警告同一键只警告一次避免刷屏未知提供商provider不在KNOWN_PROVIDERS且不是generic/custom时警告并列出已知提供商清单提示“手动填模型 ID 请用 providercustom”未知运行时runtime_tiers的键不在KNOWN_RUNTIMES中时警告未知 tierruntime_tiers.runtime内的键不是opus/sonnet/haiku时警告。对应测试覆盖见 tests/model-resolver.test.cjs未知提供商、未知运行时、非法 tier 三条路径均有断言。model_policy同时被列入全局默认值透传键集合src/config-loader.cts即从~/.gsd/defaults.json加载时同样生效。五、解析优先级model_policy 先于 model_profile_overridesmodel_policy的核心语义是在解析链中位于旧式model_profile_overrides之上。完整优先级从高到低见 docs/CONFIGURATION.md 与 src/config-types.ctsmodel_overrides[agent]——逐代理显式 ID最高model_policy.runtime_tiers[runtime][tier]——显式运行时/tier 条目Sub-path Amodel_policy扁平high/medium/low键——generic/custom提供商专用model_profile_overrides[runtime][tier]——旧式逐运行时覆盖运行时内置目录默认值model_profiletier 别名源码中的实现位置在 src/model-resolver.cts 的resolveModelInternal中model_policy是第2.5 步先由computeProfileTier算出 tier再调用resolveModelPolicy(mergedPolicy, tier)。关键细节只有当tier存在且不是inherit时才触发model_policyinherit表示“跟随会话模型”不属于 GSD 命名范围见 tests/model-resolver.test.cjs解析时把实际生效的运行时合并进 policy{ ...model_policy, runtime: effectiveRuntime }而不是直接读配置文件里的runtime键——这保证runtime_tiers按真正在解析的运行时取值src/model-resolver.cts。Claude 运行时的别名映射在默认claude运行时上policy 解析出的完整模型 ID 会被映射回 Claude Code Agent 工具接受的档位别名opus/sonnet/haiku/fable例如claude-fable-5→fable。若解析出的 ID 没有对应别名如钉死的旧小版本claude-opus-4-5则警告一次并回退到已配置的档位别名src/model-resolver.cts 的warnModelPolicyUnmappable。非 Claude 运行时则原样透传完整模型 IDtests/model-resolver.test.cjs 验证了该回归保护。与 dynamic_routing 的交互resolveModelForTier中src/model-resolver.cts当配置了model_policy且生效运行时不是 claude时直接走resolveModelInternal的完整链claude 运行时则让dynamic_routing.tier_models正常参与。测试证实model_policy优先于dynamic_routing.tier_models而model_overrides又优先于model_policytests/model-resolver.test.cjs。六、reasoning_effort 的运行时门控model_policy.runtime_tiers条目中的reasoning_effort字段只转发给声明支持的运行时。当前目录中支持它的运行时是codex其模型逐项公布supported_reasoning_levels任何不在允许列表中的运行时在渲染时该字段会被静默剥离绝不泄漏docs/CONFIGURATION.md。源码印证src/model-catalog.cts 的RUNTIMES_WITH_REASONING_EFFORT由目录数据派生从runtimeTierDefaults中筛出“至少一个 tier 条目带reasoning_effort”的运行时src/model-catalog.cts 的renderEffortForRuntime负责实际渲染对codex按模型公布的允许集做钳制如请求minimal而上调到模型下限对无渲染规范的运行时返回{ value, param: null, channel: null }——即不携带任何 effort 参数测试直接验证了该契约opencode不在RUNTIMES_WITH_REASONING_EFFORT中renderEffortForRuntime(opencode, high)返回channel: nulltests/model-resolver.test.cjs生产调用点见 src/commands.ctscmdResolveExecution先解析模型与 effort再调用renderEffortForRuntime(runtime, effort, model)决定最终向宿主 CLI 传什么。七、CLI 查询与 settings 工作流7.1 用 resolve 命令验证解析结果model_policy的解析结果可以通过gsd_run query resolve-model agent-type系列命令直接查询。入口实现在 src/commands.ctscmdResolveModel输出{ model, profile, effort, tier }未知代理额外带unknown_agent: truecmdResolveExecutionsrc/commands.cts输出{ model, profile, effort, effort_rendered, effort_param, fast_mode, ... }支持--effort level、--fast-mode bool、--attempt n、--failure-class class、--host runtime-id等旗标是模型/effort/fast-mode 的“超集执行查询”。其中tier字段是 #2229 起新增的在resolve_model_ids:omit的非 Claude 运行时上模型 ID 会被置空但 tier 在早期阶段就计算出来、始终可知——model_policy预设例如balanced档位 budget: low实际派发到haiku在 tier 报表中也如实体现src/model-resolver.cts。7.2 settings-advanced 工作流中的写入方式交互式配置由gsd_run settings-advanced工作流驱动gsd-core/workflows/settings-advanced.md。Section 8Model Policy提供两条路径已知提供商选 provider budgetGSD 物化规范化 tier 映射与通用提供商手动填 low/medium/high 三个模型 ID。所有写入都通过gsd_run query config-set完成保证兄弟键保留gsd_run query config-set model_policy.provider provider # e.g., anthropic / anthropic-fable / openai / google / qwen gsd_run query config-set model_policy.budget budget # high / medium / low gsd_run query config-set model_policy.high high-id gsd_run query config-set model_policy.medium medium-id gsd_run query config-set model_policy.low low-id命令清单见 gsd-core/workflows/settings-advanced.md。设置完成后model_policy以顶层键的形式写入config.json中的model_policy键绝不平铺成顶层扁平键gsd-core/workflows/settings-advanced.md。八、向后兼容与迁移建议向后兼容是显式承诺没有model_policy的既有配置完全不受影响旧式model_profile_overrides照常工作docs/CONFIGURATION.md。测试专门覆盖了三条兼容路径tests/model-resolver.test.cjsmodel_policy缺席时model_profile_overrides照常解析两者同时存在时model_policy先触发并获胜model_policy是空壳runtime_tiers: {}provider: generic且无扁平键时干净回退到model_profile_overrides。迁移建议非 Anthropic 运行时opencode、codex 等优先改用model_policy的已知提供商预设省去手动查模型 ID需要跨运行时统一“高/中/低”语义时用providerbudget需要某个运行时单独钉模型时叠加runtime_tiers接入自有网关OpenRouter/LiteLLM用provider: generic或custom模型 ID 原样透传逐步迁移时可先让model_policy与旧覆盖并存验证解析结果用resolve-model查询后再删除旧键。九、核心源码速查关注点位置model_policy类型定义ModelPolicyConfig/TierEntry/RuntimeTierssrc/config-types.cts解析实现resolveModelPolicySub-path A/Bsrc/model-resolver.cts完整解析链resolveModelInternalmodel_policy 位于 2.5 步src/model-resolver.cts配置加载校验与警告未知提供商/运行时/tiersrc/config-loader.cts提供商预设目录与 effort 渲染src/model-catalog.cts、src/model-catalog.ctsCLI 查询命令入口src/commands.cts、src/commands.cts功能测试优先级、别名映射、effort 门控、兼容性tests/model-resolver.test.cjs、tests/model-resolver.test.cjs配置参考文档完整 schema 与优先级说明docs/CONFIGURATION.mdsettings 交互工作流Section 8 Model Policygsd-core/workflows/settings-advanced.md模型配置文件实用指南docs/how-to/configure-model-profiles.mdmodel_policy自 v1.42 起成为 gsd-core 配置非 Anthropic 运行时模型分层的主推面它把“提供商预设 预算档位”与“逐运行时精确钉模型”统一进一个键用清晰的优先级Sub-path A Sub-path B 旧式覆盖保证行为可预期并用reasoning_effort门控避免向不支持的运行时泄漏参数。无论是多运行时混用还是接入自有网关都可以从这一配置面入手完成模型策略的声明式落地。赞分享【免费下载链接】gsd-coreGit. Ship. Done - Core项目地址https://gitcode.com/gh_mirrors/ge/gsd-core点击查看免费下载相关推荐Open edX 讨论提供商配置体系DiscussionsConfiguration 模型与配置 API 深度解析Open edX 讨论提供商配置体系DiscussionsConfiguration 模型与配置 API 深度解析 本文围绕 Open edX 平台edx后端教育Databasus 邮件双因素认证Email 2FA设计解析从失败关闭到控制台逃生通道Databasus 邮件双因素认证Email 2FA设计解析从失败关闭到控制台逃生通道 导读 本文基于 Databasus 仓库中 openspec/ch数据库灾备gsd-core 技能配置文件模型用 --profile 精确控制 Claude Code 技能预算gsd core 技能配置文件模型用 profile 精确控制 Claude Code 技能预算 GSDGit. Ship. Done在 PR 3408上一篇ZCode 插件商店Plugin Store领域模型解析官方市场、目录结构、元数据与插件生命周期词汇表下一篇Readest Android 长按图片冻结修复WebView 原生图片 Callout 与触摸处理器冲突的 .no-context-menu 方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网