
1. 多模型时代的应用困境与中间层破局思路过去一年我陆续帮几个团队把大模型能力接进他们的业务系统从客服工单自动分类、合同条款抽取到内部知识库问答场景五花八门。但真正让我头疼的从来不是选哪个模型这件事本身而是选完之后的一地鸡毛今天业务方说要用某个新出的推理模型试试效果明天老板要求把调用成本压下来后天运维又跑来说某个供应商的接口超时率飙升。每一次变动都意味着要翻遍代码里散落各处的 API 调用点改密钥、改地址、改参数格式改完还要重新测一遍。这种状态持续了不到两个月我就下定决心必须在这堆应用和那一堆模型之间塞进去一个统一的中间层。这个中间层现在行业里普遍叫它AI 网关也有人叫LLM Gateway。它的定位其实和传统微服务架构里的API 网关非常像——你回想一下当年后端服务从单体拆成微服务之后如果没有网关每个服务都要自己处理鉴权、限流、路由、日志重复且混乱网关一上这些横切关注点全部收敛到一层业务服务只管自己的业务逻辑。AI 网关干的是同一件事只不过它面对的不是普通的 REST 接口而是大模型的推理接口处理的是Token的进出、模型的调度、以及像MCP这类新兴协议带来的工具调用编排。说白了AI 网关要解决的核心问题是让你的应用和具体某个模型解耦。应用只认网关这一个入口至于背后到底是哪家、哪个版本、哪个价位的模型由网关来决定。这样一来换模型就像换数据库连接串一样改配置就行不用动业务代码。这篇文章我想把 AI 网关这件事从头到尾讲透包括它到底该有哪些能力、怎么选型、怎么落地、踩过哪些坑。适合正在做 AI 应用架构的工程师、技术负责人也适合刚接触这块、想搞清楚为什么不能直接调模型 API的开发者。2. AI 网关到底解决什么问题从直连模型的五个痛点说起2.1 痛点一模型供应商的锁定与切换成本直连模型最直接的后果就是供应商锁定。你在代码里写死了某家的 SDK请求体格式、返回结构、错误码全是那家的规范。等到你想换一家或者想同时用两家做 A/B 对比就会发现改动量大得惊人。我见过一个项目光是切换模型供应商就改了三十多个文件因为每个文件里都硬编码了模型名称和 endpoint。AI 网关的第一个价值就是统一抽象。它对外暴露一套标准的接口格式通常兼容业界主流的对话补全规范对内则负责把标准请求翻译成各家模型的实际格式。应用侧永远只跟标准格式打交道供应商的差异被网关吃掉了。这就好比你家所有电器都用统一规格的插座至于墙里走的是哪家电跟你插插头这件事没关系。2.2 痛点二密钥管理与安全边界模糊把模型 API Key 直接写进应用配置是很多团队起步阶段的常规操作但这在安全上是个大隐患。一旦某个前端服务或者日志系统泄露了配置密钥就裸奔了。而且多个应用共用一把密钥出了问题根本定位不到是谁在滥用。网关在这里扮演密钥托管与访问控制的角色。真正的模型密钥只存在网关里应用拿到的是网关自己签发的凭证。网关可以针对每个应用、每个团队做细粒度的权限控制谁能调哪个模型、每天能调多少次、单次请求的 Token 上限是多少。这种分层设计让密钥的暴露面从到处都是收敛到只有网关一处。2.3 痛点三成本失控与用量黑盒大模型的计费是按Token来的输入和输出分别计价不同模型单价差好几倍。如果没有统一的计量你根本不知道钱花在哪了。我遇到过一个月账单突然翻三倍的情况排查半天才发现是某个测试环境忘了关一直在跑批量任务。网关天然是流量的必经之路所以它是最理想的计量点。每一次请求经过它都能记录下哪个应用调的、调的哪个模型、输入多少 Token、输出多少 Token、耗时多久、成功还是失败。有了这些数据成本归因、预算告警、异常检测才有基础。这也是为什么我一直强调Token 用量统计不是网关的附加功能而是核心功能。2.4 痛点四可靠性——单点故障与限流应对任何一家模型服务商都可能出现抖动、限流甚至短时不可用。如果你的应用只连了一家那对方一挂你的功能就全废了。手动做故障转移那得在应用层写一堆重试和降级逻辑每个应用都要写一遍。网关可以做智能路由与故障转移。当主模型返回限流或超时错误时网关自动把请求转发到备用模型当某个供应商的健康检查连续失败时网关把它从可用池里摘掉。对应用来说它只是发了一次请求背后发生了什么它不需要知道。这种能力在高峰期尤其救命我实测过配置了自动降级之后模型供应商偶发抽风导致的用户侧报错率能下降一个数量级。2.5 痛点五可观测性缺失出问题只能靠猜直连模式下你想知道最近一小时哪个模型最慢哪类请求最容易失败平均首 Token 延迟是多少基本只能靠翻应用日志而且各应用日志格式还不统一。网关作为统一入口可以标准化地采集这些指标对接监控系统做成仪表盘。下面这张表把直连和经过网关的差异列清楚方便你对照自己团队的现状维度直连模型 API经过 AI 网关切换模型改代码、重新测试改配置、即时生效密钥管理散落在各应用集中托管、按应用授权成本统计基本靠估算按应用/模型精确计量故障转移应用层各自实现网关统一处理可观测性日志格式不一标准化指标采集限流控制难以统一集中策略管理3. 核心能力拆解一个合格的 AI 网关该有哪些模块3.1 统一接口层把千差万别的模型 API 抹平统一接口层是网关的门面。它的设计目标很明确让应用用同一套请求格式访问所有模型。目前业界事实上的标准是兼容主流对话补全接口的格式请求体里包含模型名、消息列表、温度、最大 Token 数等参数返回体包含生成内容和用量信息。但这里有个细节容易被忽略不同模型的参数并不完全对等。比如有的模型支持思考模式有的支持结构化输出有的对温度参数的取值范围要求不同。网关在翻译请求时需要做参数映射与能力协商。我的做法是维护一张模型能力表记录每个模型支持哪些参数、取值范围是什么网关在转发前做校验和转换不支持的参数要么忽略要么报错避免把非法请求透传给上游。{ model: gpt-4o, messages: [ {role: system, content: 你是一个助手}, {role: user, content: 帮我总结这段话} ], temperature: 0.7, max_tokens: 1024, stream: true }上面是应用发给网关的标准请求。网关收到后根据model字段查路由表找到对应的上游供应商把请求翻译成对方要求的格式再发出去。返回时反向翻译统一成标准格式回给应用。整个过程应用无感知。3.2 路由与调度让请求找到最合适的模型路由是网关的大脑。最简单的路由是按模型名直连但真正有价值的是策略路由。我总结了几种常用策略按成本路由简单任务走便宜的小模型复杂任务走贵的大模型。可以基于请求长度、关键词或分类器来判断。按负载路由同一模型有多个供应商渠道时按当前延迟或错误率做加权分发。按能力路由需要工具调用的请求只发给支持MCP或函数调用的模型。灰度路由新模型上线时先切 5% 流量试水观察指标再逐步放量。路由表的配置我建议用声明式的方式管理比如 YAML 文件方便版本控制和审计。下面是个简化示例routes: - name: default-chat match: model: standard targets: - provider: vendor-a model: small-fast weight: 70 - provider: vendor-b model: small-cheap weight: 30 fallback: - provider: vendor-a model: medium这个配置的意思是请求标准模型时70% 走 A 家的小快模型30% 走 B 家的小便宜模型如果都失败了降级到 A 家的中档模型。权重和降级链都可以动态调整不用重启服务。3.3 计量与配额Token 账本怎么记才准Token 计量看着简单实际有不少坑。首先输入 Token 和输出 Token 要分开记因为计价不同。其次流式响应下输出 Token 是边生成边返回的你得在流结束时才能拿到准确总数或者边流边累加。第三不同供应商返回的用量字段名和口径可能不一致有的把系统提示也算进去有的不算网关需要做归一化。我的经验是网关在转发请求前先做一次本地 Token 估算用分词器或近似算法请求返回后再用上游返回的准确值覆盖。这样即使上游没返回用量也有个兜底。配额控制则基于这个账本给每个应用设日/月额度接近阈值时告警超了就拒绝或降级。注意Token 估算和实际计费值可能有偏差尤其是中文和代码场景。不要把估算值直接当账单用它只适合做实时拦截最终对账还是要以上游返回为准。3.4 可观测性指标、日志、链路一个都不能少可观测性三件套——指标、日志、链路追踪网关都要覆盖。指标方面我重点关注这几个请求总量、成功率、P95 延迟、首 Token 延迟、各模型 Token 消耗、各应用调用分布。日志要记录完整的请求元信息但注意脱敏用户输入的内容可能含敏感信息不能原样落盘。链路追踪这块网关要能生成或透传 trace id这样一次请求从应用到网关再到上游模型整条链路能串起来。排查为什么这次特别慢的时候这个能力太重要了。我一般用 OpenTelemetry 标准来做兼容性好对接现有监控体系也方便。3.5 MCP 与工具调用网关的新战场MCPModel Context Protocol这两年被讨论得很多它本质上是一套让模型能够调用外部工具和数据的协议。当你的应用需要模型去查数据库、读文件、调内部接口时MCP 就派上用场了。但工具调用会带来新的复杂度工具的定义、鉴权、执行、结果回传这些如果都放在应用里做又会回到重复建设的老路。AI 网关在这里可以承担工具注册与调用编排的职责。应用把可用的工具注册到网关网关负责把工具描述注入到发给模型的请求里模型返回工具调用意图时网关执行工具并把结果回填给模型形成闭环。这样应用只需要关心我要什么结果不用关心工具怎么调。当然MCP 生态还在快速演进网关对它的支持要留足扩展性别把协议写死。4. 落地实操从零搭一个能用的 AI 网关4.1 技术选型自研、开源还是云服务这是每个团队都会纠结的第一个问题。我把三条路线的特点列出来路线优势劣势适合场景自研完全可控、贴合业务工作量大、维护成本高有专门平台团队、需求特殊开源方案起步快、社区支持定制需改源码、版本升级有风险中小团队、标准需求云服务免运维、开箱即用数据出境顾虑、成本随量增长快速验证、无运维资源我的建议是除非你有非常特殊的合规或定制需求否则不要一上来就自研。先用开源方案跑起来把核心流程跑通等真正遇到开源满足不了的瓶颈再考虑局部自研或二次开发。很多团队在自研上投入了几个月最后发现做出来的东西和开源方案功能差不多还欠了一堆技术债。4.2 部署架构网关本身的高可用怎么做网关成了所有 AI 请求的必经之路它自己就不能是单点。基本要求是无状态、可水平扩展。网关实例不保存会话状态所有状态配额、路由表、密钥放在外部存储里比如 Redis 加数据库。这样你起三个实例挂在负载均衡后面挂一个不影响服务。配置的更新要走热加载不能改个路由表就重启服务。我的做法是配置存数据库网关实例定期拉取或订阅变更通知收到变更后原子替换内存里的配置。密钥这类敏感配置要加密存储网关启动时解密加载。# 一个简化的健康检查脚本用于负载均衡探活 curl -sf http://localhost:8080/healthz || exit 1健康检查接口要轻量别在里面做重操作否则探活本身就成了负担。我一般让它只检查进程存活和关键依赖如 Redis连通性不检查上游模型——上游抖动不该导致网关被摘除。4.3 关键配置路由、限流、降级的参数怎么定参数没有标准答案得根据你的业务特点来。我分享几个我常用的起点值你可以在此基础上调单请求超时非流式 60 秒流式首 Token 15 秒、整体 120 秒。超过就断开避免连接堆积。重试次数最多 2 次且只对幂等的、明确可重试的错误如 429、503重试。超时不重试因为重试大概率还是超时。限流阈值按应用维度设 QPS 上限初期可以设得宽松些观察一周实际峰值再收紧。降级触发某供应商连续 5 次请求失败或错误率超过 20%自动摘除 60 秒后再试探恢复。这些值我都是踩过坑才定下来的。比如重试次数一开始设了 5 次结果上游一慢网关自己就被重试流量压垮了形成了雪崩。后来改成 2 次并且加了熔断才稳定下来。4.4 一次完整请求的旅程从应用到模型再回来我们把一次请求的完整路径走一遍这样你对网关的工作流程会有直观认识应用带着网关签发的凭证向网关发起标准格式的请求。网关先做鉴权验证凭证有效性和权限范围。然后做配额检查看该应用今日额度是否还有剩余。接着做参数校验检查请求体是否符合标准格式、模型名是否存在。进入路由决策根据路由表选出目标供应商和模型。请求翻译把标准格式转成目标供应商的格式注入真实密钥。转发请求同时启动计时和用量估算。收到响应后反向翻译统一成标准格式。记录用量和指标更新配额账本。把响应流式或一次性返回给应用。这十步里任何一步出错都要有明确的错误码和日志方便定位。我特别强调第 9 步不能省哪怕请求失败了也要记录失败原因否则你永远不知道失败率是怎么来的。5. 踩坑实录那些文档里不会写的经验5.1 流式响应的坑别在流中间做重活流式响应是 AI 应用的标配但它在网关里处理起来比普通响应麻烦得多。数据是一块块来的你不能等全部收完再转发那样就失去了流式的意义。我的做法是边收边转边发收到一块就翻译一块、转发一块。但这里有个陷阱如果你在流的每一块上都做复杂的日志记录或指标计算会显著拖慢转发速度。我踩过的坑是一开始在每块数据上都写一条日志结果高并发时日志系统被打爆网关延迟飙升。后来改成只在流开始和结束时记录关键信息中间块只做累加计数问题就解决了。另外流式响应的错误处理也特殊——如果流已经开始返回了才发现上游出错你没法再返回一个标准的错误响应只能中断流并在流的末尾附加错误标记应用侧要能识别这种情况。5.2 Token 计量的偏差估算和实际对不上怎么办前面提过 Token 估算的问题这里展开说。不同模型的分词方式不同同一个中文句子在不同模型里切出来的 Token 数可能差 20% 以上。如果你用一套分词器去估算所有模型误差会累积。我的应对策略是分层处理对于返回了准确用量的供应商直接用它的值对于没返回的用该模型对应的分词器估算并标记为估算值。在对账时估算值只做参考不作为计费依据。同时我会定期用实际账单反推校准估算系数让估算尽量贴近实际。提示如果你的业务对成本极其敏感建议优先选择那些在响应里返回准确用量字段的模型供应商能省掉很多对账麻烦。5.3 密钥轮换怎么做到不停机换密钥密钥轮换是个容易被忽视的运维需求。供应商可能要求定期换密钥或者密钥泄露了要紧急更换。如果换密钥要重启网关那就意味着服务中断。我的方案是双密钥并行网关同时持有旧密钥和新密钥配置更新后新请求用新密钥旧密钥保留一段时间用于处理已经在途的请求。等确认没有请求还在用旧密钥了再把它移除。整个过程对应用完全透明。这个机制我建议在网关设计初期就考虑进去后期加会比较麻烦。5.4 常见问题速查表下面这张表是我在实际运维中整理的高频问题和排查思路直接拿去用现象可能原因排查方向大量 401 错误凭证过期或密钥失效检查网关凭证签发和上游密钥有效期请求超时集中出现上游限流或网络抖动看上游错误码分布检查熔断是否触发Token 用量异常增长某应用死循环或测试环境未关按应用维度看用量排行定位异常源流式响应卡顿网关转发逻辑阻塞检查流处理是否做了重操作路由不生效配置未热加载或缓存未刷新确认配置变更通知是否送达各实例成本突然上升路由策略把流量导向了贵模型核对路由权重和降级链配置5.5 几个我反复强调的实操心得第一网关的日志一定要带 trace id否则多实例部署时你根本串不起一次请求的完整路径。第二限流要分维度光有全局限流不够要能按应用、按模型、按用户分别限不然一个应用能把整个网关拖垮。第三降级别降得太狠我见过配置成主模型一失败就直接返回错误的其实完全可以降级到备用模型用户体验好很多。第四定期做故障演练手动把某个供应商的配置改成不可用看网关能不能正确切换别等真出事才发现降级逻辑有 bug。6. 网关之后这套架构还能怎么演进把 AI 网关跑起来之后你会发现它其实是个很好的能力沉淀平台。最开始它只是个转发和计量层但随着接入的应用越来越多你可以往上叠加更多价值。比如做提示词管理把常用的系统提示集中管理、版本化应用引用提示 ID 而不是硬编码文本比如做缓存层对相同或相似的请求做结果缓存直接省下重复的 Token 开销再比如做评测与对比让同一批请求同时打到多个模型对比输出质量和成本为选型提供数据支撑。我个人在实际操作中的体会是AI 网关的价值不在于它一开始有多强大而在于它给了你一个统一的抓手。当模型生态还在快速变化、新协议新能力层出不穷的时候有一个中间层帮你隔离变化你的应用才能保持稳定。至于这个中间层是自己搭还是用现成的用多重的方案都取决于你团队当下的阶段和资源。但有一点是确定的只要你在认真做 AI 应用迟早会需要它早建比晚建主动。