在AI驱动的业务系统中,业务层与模型供应商(如OpenAI、阿里云百炼、豆包等)之间往往存在接口不统一、模型切换繁琐、故障无容错、配置耦合度高等问题。infra-ai模块作为两者之间的核心中间层,核心目标就是解决这些痛点,通过规范化的设计,实现业务与模型的解耦,提升系统的可扩展性、容错性和可维护性。
本文将从宏观视角,拆解infra-ai模块的核心定位、包结构划分、核心设计理念,帮助大家建立对该模块的全局认知,为后续深入拆解路由核心奠定基础。
一、infra-ai模块核心定位:四大核心问题的解决方案
infra-ai模块的核心价值,在于作为业务层与模型供应商之间的"桥梁",统一承接业务层的AI调用需求,再路由到合适的模型供应商,全程解决四大核心问题,让业务层无需关注底层模型的细节:
1. 统一接口
不同模型供应商的接口规范差异较大(如OpenAI的ChatCompletion接口、阿里云百炼的Chat接口),infra-ai模块封装统一的接口标准,业务层只需调用模块提供的统一接口,无需关注不同供应商的接口差异,降低业务开发成本。
2. 多模型路由
支持配置多个模型供应商(如主用OpenAI、备用豆包),根据业务需求、模型健康状态、配置规则,自动路由到合适的模型,实现多模型的灵活切换和负载均衡。
3. 故障转移
当某个模型供应商出现故障(如接口超时、返回异常)时,模块可自动切换到备用模型,避免因单个供应商故障导致业务中断,提升系统的高可用性。
4. 配置驱动
整个路由体系、模型配置均通过YAML配置驱动,无需修改代码,只需调整配置,即可实现模型切换、供应商替换、路由规则调整,极大提升系统的可配置性和可维护性。
二、包结构划分:9个包职责清晰,分层解耦
infra-ai模块通过9个包的合理划分,实现职责隔离、分层解耦,每个包的职责单一明确,便于开发、维护和扩展,整体分为三大模块:底层基础设施、路由核心、能力子系统,具体划分如下:
1. 底层基础设施(5个包):模块运行的基础支撑
底层基础设施包负责模块的基础配置、通用工具、网络通信等,为上层功能提供支撑,具体包括:
-
config:封装模块所有配置类,对应YAML配置文件,实现配置的统一加载和管理;
-
enums:定义模块通用的枚举类(如模型类型、供应商类型、故障状态等),规范常量定义;
-
http:封装HTTP请求工具,负责与各个模型供应商的接口通信,处理请求/响应的序列化与反序列化;
-
token:负责模型供应商的token管理、权限校验,保障接口调用的安全性;
-
util:提供模块通用的工具方法(如字符串处理、加密解密、异常处理等),复用通用逻辑。
2. 路由核心(1个包):模块的核心调度中枢
- model:路由核心包,封装多模型路由的核心逻辑,包含模型选择、健康检查、路由执行等核心组件,是整个模块的"大脑"。
3. 能力子系统(3个包):承接业务层的具体AI能力需求
能力子系统对应AI的核心能力,封装业务层可直接调用的接口,每个包对应一种AI能力,具体包括:
-
chat:封装对话类AI能力,对应业务层的对话、生成类需求;
-
embedding:封装向量嵌入能力,对应文本向量生成、语义相似度计算等需求;
-
rerank:封装重排序能力,对应检索结果优化、相关性排序等需求。
这种包结构划分,实现了"基础设施支撑、核心路由调度、能力分层提供"的架构,确保每个模块职责清晰,降低耦合度,便于后续扩展新的AI能力(如新增image包支持图像生成)。
三、核心设计理念:配置驱动 + 三层接口 + 路由组件 + 设计模式
infra-ai模块的宏观设计,围绕"解耦、可扩展、高可用"三大目标,通过四大核心设计理念,构建稳定、灵活的中间层架构。
1. 配置驱动设计:一份YAML配置,驱动整个路由体系
模块采用"配置驱动"的设计思路,将所有与模型、供应商相关的配置(如供应商地址、token、模型列表、路由规则等)集中在YAML配置文件中,核心设计亮点:
-
供应商配置与模型候选配置分离,清晰区分"供应商基础信息"和"可调用模型列表";
-
切换模型、替换供应商无需修改代码,只需调整YAML配置,重启服务即可生效;
-
支持动态配置(可选),可通过配置中心实时更新配置,无需重启服务,提升系统灵活性。
2. 三层接口设计:职责清晰,分层解耦
模块采用三层接口设计,自上而下实现业务层与模型供应商的完全解耦,每层职责单一,便于维护和扩展,具体分层如下:
-
业务层接口:对外提供的统一接口(LLMService / EmbeddingService / RerankService),业务层直接调用该层接口,无需关注底层实现;
-
路由实现:中间层路由逻辑(RoutingXxxService),承接业务层接口请求,根据配置和路由规则,选择合适的模型供应商;
-
供应商接口:底层接口封装(ChatClient / EmbeddingClient / RerankClient),对应不同模型供应商的接口实现,负责与供应商接口直接通信。
三层接口的设计,让业务层与模型供应商完全隔离,当需要新增供应商、修改接口逻辑时,只需修改底层供应商接口或路由实现,不影响业务层代码。
3. 路由核心四大组件:分工明确,协同工作
路由核心(model包)包含四个核心组件,各有分工、协同工作,共同完成多模型的路由与选择,构成模块的"调度中枢":
-
ModelSelector(模型选择器):核心组件,负责根据路由规则、模型优先级、健康状态,选择合适的模型;
-
ModelHealthStore(模型健康存储):负责维护所有模型的健康状态,判断模型是否可用、是否熔断,为ModelSelector提供选择依据;
-
ModelRoutingExecutor(路由执行器):负责执行路由逻辑,调用选中模型的供应商接口,处理请求转发和响应封装;
-
ModelTarget(模型目标封装):封装模型调用的上下文信息(如供应商地址、token、模型参数等),为路由执行提供统一的参数封装。
4. 多种设计模式协同:提升可扩展性与容错性
模块融合多种设计模式,解决不同场景下的设计痛点,提升系统的可扩展性、可维护性和容错性:
-
策略模式:实现供应商可插拔,不同供应商的接口实现对应不同的策略,新增供应商只需新增策略类,无需修改核心逻辑;
-
模板方法模式:复用OpenAI兼容协议,对于符合OpenAI接口规范的供应商,通过模板方法复用通用逻辑,减少重复开发;
-
注册表模式:实现供应商、模型的自动发现,新增供应商或模型后,通过注册表自动注册,无需手动配置;
-
熔断器模式:提供容错保护,当某个模型供应商频繁出现故障时,自动熔断该供应商,避免大量失败请求拖垮系统,同时触发故障转移。
四、总结:宏观设计的核心价值
infra-ai模块的宏观设计,核心是通过"中间层"的定位,实现业务层与模型供应商的解耦,解决统一接口、多模型路由、故障转移、配置驱动四大核心问题。
9个包的职责划分实现了分层解耦,配置驱动设计提升了系统的可维护性,三层接口设计清晰了各层职责,路由核心组件与多种设计模式的协同,保障了系统的可扩展性和高可用性。
本文作为宏观设计解析,旨在帮助大家建立infra-ai模块的全局视角。接下来,我们将深入路由核心,拆解多模型路由与智能选择的底层细节------包括ModelSelector的优先级排序算法、首选模型提升机制、深度思考模型的过滤逻辑、禁用和熔断候选的过滤策略,以及ModelTarget的完整构建过程,敬请关注。