CellSpec Provider 配置

wesgine CellSpec 中 Provider 相关字段的声明式配置。


ProviderStrategy

四种策略决定 Cell 如何选择 Provider:

策略说明
own_only仅使用 Cell 私有 Provider
shared_only仅使用 Hypervisor 共享 Provider
own_first优先私有,fallback 共享
shared_first优先共享,fallback 私有

自动推导


PrivateProviders

Cell 私有 Provider(BYOK):

spec := wesgine.CellSpec{
    PrivateProviders: []config.ProviderConfig{
        {
            Name:     "my-openai",
            Type:     "openai",
            BaseURL:  "https://api.openai.com/v1",
            APIKeyRef: config.SecretRef{Source: "inline", Value: "sk-..."},
            Models: []config.ModelConfig{
                {Name: "gpt-4o", ContextWindow: 128000, SupportsVision: true},
            },
        },
    },
}

AllowedModels

模型白名单:

spec := wesgine.CellSpec{
    AllowedModels: []string{"gpt-4o", "claude-sonnet-4-20250514"},
}

限制 Cell 内可使用的模型列表。


LogicalModelGroups

同款模型多入口分组:

spec := wesgine.CellSpec{
    LogicalModelGroups: map[string][]string{
        "gpt-4o": {"azure-gpt4o", "openai-gpt4o"},
    },
}

DisallowActorProvider

禁止特定 Actor 使用特定 Provider 来源。


SecretRef 三源

Provider 密钥管理的三种来源:

来源说明换机恢复代价
inline明文经 AES-256-GCM 封套后落盘密文与 spec.key 同机
env环境变量不落盘,重放注入方
live运行时动态获取(ProviderLiveKeyFn)不落盘,重放注入方

vault 已删——永无实现方注入。

inline 封套

inline 的明文经 config.MapSecretValues(spec, box.Seal) 走 AES-256-GCM 封套后才进 hypervisor.db。

密钥在 {DataDir}/secrets/spec.key(0600,目录 0700)。


Vision 能力声明

Vision 能力统一声明在 Models[].SupportsVision:

Models: []config.ModelConfig{
    {
        Name:           "gpt-4o",
        ContextWindow:  128000,
        SupportsVision: true,
    },
}

请求含 image ContentBlock 但 model 未声明 SupportsVision=true 时返回 ErrVisionNotSupported。


连通性测试

POST /cells/{id}/providers/test

支持三种测试模式:


Cell 级 Embedding

POST /cells/{id}/embeddings

OpenAI 兼容接口,密钥服务端解析。


Provider 列表

GET /cells/{id}/providers

返回 Cell 私有 Provider 列表。