模型选择

wesgine 的模型选择策略与相关不变量。


核心原则

用户必须始终知道"我在和哪个模型对话"。

INV-MODEL-01:Model 必填

AppRunRequest.Model 为空时引擎拒绝执行(fail-closed),返回 ErrModelRequired。

INV-MODEL-02:所有可用模型对用户可见

引擎 resolver 能使用的所有 provider(Shared + Named + BYOK),前端模型选择器都必须展示。


模型市场数据

权威来源

LLM 模型市场化数据的唯一来源:weisyn.git/catalog.yaml

包含:

引擎不含模型知识(INV-DS-01)

引擎自身不硬编码任何模型信息。所有模型知识来自外部配置。

自动补齐

消费方通过 provider.NormalizeProvider() 自动从 catalog 补齐 ContextWindow:

catalog.yaml → weisyn.ProviderCatalog()
  → 各产品 boot:provider.SetCatalog(...)
  → NormalizeProvider() 自动补齐
  → CellSpec → Boot → CompressPipeline

未配上下文窗口时


AllowedModels

Cell 级别可以声明允许使用的模型白名单:

cell, _ := hyp.Cells().GetOrCreate(ctx, wesgine.CellSpec{
    AllowedModels: []string{"gpt-4o", "claude-sonnet-4-20250514"},
    // ...
})

未在白名单中的模型将被拒绝。


LogicalModelGroups

同一模型在多个 Provider 中可用时,通过逻辑分组统一管理:

LogicalModelGroups: map[string][]string{
    "default": {"azure-gpt4o", "openai-gpt4o"},
    "fast":    {"groq-llama", "together-llama"},
}

引擎按组内顺序尝试,实现 Provider 级别的 failover。