统一配置契约 v0.3
Issue: #1505
以前
在 v0.3 之前,仓库里存在多份部分重叠的配置契约:
- 路由器运行时消费扁平的 Go 配置
- Python CLI 使用自己的嵌套 YAML 及合并/默认逻辑
- 控制面板与引导流程导入 YAML,但仍假设旧版顶层
signals与decisions - Helm 与 Operator 各自以不同方式翻译配置
- DSL 将路由语义与旧版
BACKEND、GLOBAL预期混在一起
这带来三个长期问题:
- 同一概念需要在多个 schema 层反复编辑。
- 端点、API Key 与模型语义被混在一起。
- 运行时默认依赖
router-defaults.yaml等外部模板,难以推理与替换。
旧模型的问题
CLI 与路由器漂移
Python CLI 与 Go 路由器没有单一的 schema 所有者。用户可能通过 CLI、控制面板或 Kubernetes 构建配置,仍会遇到结构不一致。
模型语义与部署绑定纠缠
逻辑模型同时承载:
- 语义路由身份
- 端点绑定
- API Key
- 提供商模型 ID
导致难以复用。若多个逻辑模型指向同一后端,配置仍会重复后端细节。
DSL 范围过宽
DSL 适合表达路由语义,但旧版 BACKEND 与 GLOBAL 块使其看起来也像部署与运行时状态的编写入口,在本地、面板与 Kubernetes 工作流下不可持续。
v0.3 契约
v0.3 定义唯一 canonical 配置:
version:
listeners:
providers:
routing:
global:
各节含义
providers:部署绑定与提供商默认值routing:语义路由图global:稀疏的路由器级运行时覆盖
DSL 边界
DSL 仅拥有:
routing.modelCardsrouting.signals- 用于信号协调与派生路由输出的
routing.projections routing.decisions
不再拥有端点、API Key、监听器或路由器全局运行时设置。