CellSpec Provider 配置
wesgine CellSpec 中 Provider 相关字段的声明式配置。
ProviderStrategy
四种策略决定 Cell 如何选择 Provider:
| 策略 | 说明 |
|---|---|
own_only | 仅使用 Cell 私有 Provider |
shared_only | 仅使用 Hypervisor 共享 Provider |
own_first | 优先私有,fallback 共享 |
shared_first | 优先共享,fallback 私有 |
自动推导
- 仅私有非空 →
own_only - 仅共享非空 →
shared_only - 两侧皆非空 → 必须显式声明(否则
ErrProviderStrategyUnset) - 两侧皆空 → 可保持 unset
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
支持三种测试模式:
- 空(默认):chat 测试
embedding:embedding 测试vision:vision 挑战码测试
Cell 级 Embedding
POST /cells/{id}/embeddings
OpenAI 兼容接口,密钥服务端解析。
Provider 列表
GET /cells/{id}/providers
返回 Cell 私有 Provider 列表。