资讯动态

semantic-router 统一配置契约 v0.3:从多入口配置漂移走向单一 Canonical YAML

发布时间:2026/10/13 1:50:34 来源:尧图企业网站定制
后端API网关模型推理服务AI Agent【免费下载链接】semantic-routerAn open, programmable decision layer for models and compute.项目地址https://gitcode.com/gh_mirrors/sem/semantic-router点击查看免费下载本文围绕 semantic-router 提案文档 unified-config-contract-v0-3.md 展开系统讲解 v0.3 统一配置契约的动机、providers/routing/global三大分节模型、DSL 与路由语义的边界、内置默认值策略以及vllm-sr config migrate迁移命令的用法与底层实现。读完本文你可以理解为什么“一份 YAML 配置整台路由器”成为可能并能结合仓库源码核对契约的解析、校验与迁移链路。背景v0.3 之前为什么需要统一配置契约在 v0.3 之前semantic-router 仓库中并存多份部分重叠的配置契约路由器运行时消费扁平的 Go 配置Python CLI 使用自己的一套嵌套 YAML 及合并/默认逻辑控制面板与引导流程导入 YAML但仍假设旧版顶层signals与decisionsHelm 与 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 Canonical 契约五个顶层节v0.3 定义了唯一 canonical 配置version: listeners: providers: routing: global:各节含义providers部署绑定与提供商默认值routing语义路由图global稀疏的路由器级运行时覆盖。从当前仓库的参考配置 config/config.yaml 看canonical 契约在后续演进中扩展为八个顶层节version、listeners、providers、evaluation、routing、entrypoints、recipes、global其中evaluation承载操作者自有的基准定义与模型度量记录entrypoints将请求面向的模型名映射到顶层routing或具名 reciperecipes定义共享 providers 与全局基础设施的隔离路由档案。这一扩展在现行英文提案 unified-config-contract-v0-3.md 中有完整表格化说明。DSL 只拥有路由语义v0.3 明确划定了 DSL 的边界。DSL 仅拥有routing.modelCardsrouting.signals用于信号协调与派生路由输出的routing.projectionsrouting.decisions。DSL 不再拥有端点、API Key、监听器或路由器全局运行时设置。这样DSL 回归其“路由语义的编写视图”定位而不再隐式承担部署语言的角色。部署绑定拆分模型语义与后端访问解耦v0.3 将模型语义与部署绑定显式分离这是契约中最关键的一处重构routing.modelCards承载语义目录数据规模、上下文窗口、描述、能力等routing.modelCards[].loras承载每个逻辑模型的 canonical LoRA 适配器目录providers.defaults承载提供商级默认如default_model、reasoning_families、default_reasoning_effortproviders.models直接承载各模型的访问绑定每个providers.models[].backend_refs[]项自带传输与鉴权字段如endpoint、base_url、protocol、auth_header、auth_prefix、api_key、api_key_envrouting.decisions[].modelRefs[].lora_name与对应routing.modelCards[].loras条目解析故lora_name现在是受支持的路由契约的一部分而非仅运行时逃生舱。以仓库中的参考配置为例config/config.yaml 的providers.models条目展示了完整的部署绑定形态providers: defaults: model: qwen3-8b reasoning_effort: medium models: - name: qwen3-8b reasoning: family: qwen3 provider_model_id: qwen3-8b-instruct api_format: openai reliability: lb_policy: least_request retry_count: 2 retry_on: connect-failure,refused-stream consecutive_5xx: 5 base_ejection_time: 30s max_ejection_percent: 50 health_check_path: /health health_check_interval: 10s health_check_timeout: 2s pricing: currency: USD prompt_per_1m: 0.18 cached_input_per_1m: 0.04 cache_write_per_1m: 0.225 completion_per_1m: 0.42可以看到语义字段param_size、context_window_size、capabilities等位于routing.modelCards而可靠性策略、定价、provider_model_id等部署细节全部收敛到providers一侧。信号与决策只引用逻辑模型名不再触碰端点或凭据。决策侧的 lora_name 契约在片段示例 config/fragments/decision/single/domain-computer-science.yaml 中可以看到lora_name作为一等路由字段的用法routing: decisions: - name: computer-science-route description: Route computer science requests to the higher-reasoning model tier. priority: 100 rules: operator: AND conditions: - type: domain name: computer science modelRefs: - model: qwen3-32b use_reasoning: true lora_name: computer-science-expert这里的computer-science-expert必须与routing.modelCards中qwen3-32b条目下的loras目录对齐参考配置中该模型声明了同名适配器这正是提案所说“lora_name现为受支持的路由契约的一部分”的具体体现。全局默认由路由器自身持有v0.3 的另一个核心决策是路由器级默认由路由器自身持有不再依赖第二份用户维护的默认文件。具体规则路由器提供类型化的内置默认global:仅覆盖需要修改的字段global.router聚合路由引擎控制项含config_sourceglobal.services聚合共享 API 与运行时服务global.stores聚合有存储支撑的服务global.integrations聚合辅助运行时集成global.model_catalog聚合路由器持有的模型资产含embeddings、system、external、classifiers、modules以及如embedding_config.top_k等嵌入回退旋钮global.model_catalog.modules存放路由器自有模块设置如prompt_compression、prompt_guard、classifier、hallucination_mitigation、feedback_detector、modality_detector省略的字段保留内置默认。这使本地、面板、Helm 与 Operator 在相同基线上一致。从 Go 运行时源码看global.router的控制项落在 canonical_global.go 中类型化的结构体字段上如ConfigSourceYAML 键为config_source这意味着默认值合并、字段校验与文档一致性都可以由编译器与测试共同约束而不是散落在模板文本里。config/config.yaml 的global:节展示了一个详尽的覆盖样例包含router.enabled、router.config_source: file、router.fallback重试与熔断参数、router.model_selectionhybrid/router_dc/automix/ml 等多种选择策略参数等。各入口如何统一到同一契约统一契约的价值在于所有配置入口最终汇聚到同一个 canonical 解析器。引导导入远程引导导入可拉取并应用完整 canonical YAML保留“一份远程 YAML 即可配置整台路由器”的初衷。DSL 导入DSL 导入仍接受完整路由器配置 YAML但仅将routing节反编译为 DSL静态部署与全局运行时设置保留在 YAML 中。关键在于一条硬性规则路由器解析器对稳态运行时配置仅接受 canonical v0.3 YAML。旧版混排布局须先经显式迁移。进程内 CRD 协调路径也通过global.router.config_source: kubernetes回到同一 canonical 解析器而不再维护单独的稳态运行时布局。仓库配置资产的重新组织v0.3 契约落地后仓库不再在config/intelligent-routing/等目录下提供大型完整示例树而是改为片段化组织config/config.yaml 是详尽的 canonical 参考配置config/fragments/signal/、config/fragments/decision/、config/fragments/algorithm/、config/fragments/plugin/ 存放可复用的路由片段config/fragments/decision/按布尔规则形状组织single、and、or、not、composite五个子目录config/fragments/algorithm/按路由策略族组织looper、selection等仅测试台使用的配置位于 e2e/config/运行时支持示例如 config/runtime/response-cache/保持独立因其不属于面向用户的配置契约。片段示例 config/fragments/decision/single/domain-business.yaml 展示了片段的标准形状——以routing:为根、仅包含可合并的decisions子集便于按布尔形状组合到任意 canonical 配置中。一致性由测试兜底go test ./pkg/config/...与make agent-lint约束config/config.yaml与公开配置契约对齐且保持详尽。仓库中 docs_contract_test.go 即为该机制的实现它断言 config/README.md 与文档面必须提及config/fragments/signal/、config/fragments/decision/等路径以及global.router.config_source等关键契约词防止参考配置、schema、示例与公开文档再次漂移。Helm 与 OperatorHelm values 与 Operator 配置对齐到相同 canonical 概念而非另造稳态路由器 schema。面板、Helm chart 与 operator 可以辅助用户编写或传输配置但产出的文档仍使用同一契约。迁移路径vllm-sr config migrate旧配置可用如下命令迁移vllm-sr config migrate --config old-config.yaml该命令将旧配置重写为 canonical 的providers/routing/global覆盖混排嵌套布局与旧版扁平运行时布局如顶层keyword_rules、model_config、vllm_endpoints、provider_profiles。CLI 侧的命令定义在 general.py支持三个选项--config源配置文件路径默认config.yaml--output迁移后的输出路径默认config.migrated.yaml--force允许覆盖已存在的输出文件。执行流程见 config.py 中的migrate_config_command是加载源配置 → 调用migrate_config_data生成 canonical 结构 → 渲染为 YAML → 对迁移产物做校验 → 写出文件并打印迁移笔记migration notes。迁移笔记区分为“变更说明”与“需要人工处理的事项”两类提示操作者在投产前审查结果、通过部署的 secret 机制解析凭据。迁移的核心逻辑位于 config_migration.py 的migrate_config_data从源码可以看到它具体做了什么_move_legacy_routing_blocks把旧版顶层signals/decisions移入routing_move_legacy_flat_signal_blocks把旧版扁平信号块如顶层keyword_rules按LEGACY_SIGNAL_KEY_TO_CANONICAL映射到routing.signals_migrate_legacy_flat_model_bindings与_build_legacy_backend_catalog将旧版model_config、vllm_endpoints、provider_profiles三块拼合把address:port拼成endpoint把 profile 的base_url、auth_header、auth_prefix等并入每个backend_refs项_persist_provider_models把散落的default_model、reasoning_families、default_reasoning_effort收拢进providers.defaults并删除已废弃的providers.backends、auth_profiles、model_targets顶层键语义字段param_size、context_window_size、description、capabilities、loras等被回填到routing.modelCards对应条目。旧版键名清单定义在 config_contract.py 中LEGACY_PROVIDER_DEFAULT_KEYSdefault_model、reasoning_families、default_reasoning_effort与LEGACY_PROVIDER_KEYS额外含model_config、vllm_endpoints、provider_profiles与提案描述的迁移覆盖范围一一对应。迁移行为还有专项测试验证如 test_config_migrate_looper_endpoint.py 与 test_config_migrate_model_runtime.py。清理过程中vllm-sr init已被移除canonicalconfig.yaml现在是唯一预期由用户编写的稳态文件交互式或图形化编写工具必须导出同一份文档。结果一套公开的配置叙事v0.3 契约落地后仓库只保留一套公开的配置叙事完整路由器配置位于 canonical YAMLDSL 是该配置的路由语义视图部署绑定位于providers.defaults与providers.models[]运行时覆盖位于global.router、global.services、global.stores、global.integrations、global.model_catalog模型相关模块在global.model_catalog.modules结构信号density使用单一内置多语言归一化路径不再暴露按规则的normalize_by选择global.router.config_source是文件配置与 Kubernetes CRD 协调之间的 canonical 开关内置默认由路由器持有仓库样例资产按signal/decision/algorithm/plugin片段组织而非并行完整配置示例。这消除了旧有 CLI/路由器/面板/Helm/Operator 的漂移使各环境共享同一契约。需要说明的边界是该契约统一的是配置所有权并不要求每个编写入口以同一种形式暴露所有高级字段也不把 DSL 变成部署语言的替代品——DSL 导入/导出始终围绕同一份 canonicalrouting文档进行不会发明另一套稳态 schema。延伸阅读现行英文提案含八节契约表格与 entrypoints/recipes 扩展website/docs/proposals/unified-config-contract-v0-3.md详尽 canonical 参考配置config/config.yaml路由片段资产config/fragments/迁移命令实现src/vllm-sr/cli/config_migration.py契约一致性测试src/semantic-router/pkg/config/docs_contract_test.go赞分享后端API网关模型推理服务AI Agent【免费下载链接】semantic-routerAn open, programmable decision layer for models and compute.项目地址https://gitcode.com/gh_mirrors/sem/semantic-router点击查看免费下载相关推荐semantic-router 配置契约深度解析v0.3 规范布局、字段所有权与 canonical 加载管线semantic router 配置契约深度解析v0.3 规范布局、字段所有权与 canonical 加载管线 semantic router 是 vLLM后端API网关模型推理服务AI Agentsemantic-router 模型配置完全指南Model 身份、Provider 绑定与推理契约的 v0.3 实践semantic router 模型配置完全指南Model 身份、Provider 绑定与推理契约的 v0.3 实践 导读 在 vLLM Semantic R后端API网关模型推理服务AI AgentGitHub Desktop的Stash实用指南如何优雅地暂存和恢复未完成改动GitHub Desktop的Stash实用指南如何优雅地暂存和恢复未完成改动 在 GitHub Desktop 中Stash暂存功能是 Git 桌面工桌面应用版本控制开发工具上一篇告别财务混乱Actual Budget API客户端实战指南下一篇[项目名称] - 知识文档创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑