AI 中转站 / AI 网关 架构模板
代表产品:One API、New API、LiteLLM、Helicone、Portkey、OpenRouter、Cloudflare AI Gateway 一句话定位:在你的应用和众多大模型供应商之间,架一个统一的「中间层」——用一套(通常是 OpenAI 兼容的)接口接入所有模型,并集中做鉴权、计费、限流、负载均衡、故障转移、缓存与可观测。
1. 一句话定位
AI 网关 = LLM 时代的 API 网关 + 反向代理。它本身不产生任何智能,价值全在「治理」:把原本散落在各处、直连各家模型的调用,收拢成一个可统一管控的入口。
它解决的问题特别朴素:当你的代码里到处是「调 OpenAI」「调 Claude」「调 DeepSeek」,各家接口不同、各家会挂、花了多少钱没人说得清——这时你需要一个中间层,把这些横切关注点(鉴权、限流、计费、容错、观测)一次性收编。
它就是 04 · 架构模式 里 BFF / 网关和代理思想,套在「调大模型」这件事上的产物。
2. 业务本质:它在解决什么问题
它有两种典型用途,对应两种业务本质:
- (A)企业内部治理:团队里几十个应用都要调模型,需要统一管 key、统一限额、统一看账单、一家供应商抖动能自动切换。网关让「调模型」变得可管、可控、可审计。
- (B)「中转站」分发模式:运营方聚合上游(可能是多个账号、多个供应商),对下游用户按量计费、二次分发 key。它卖的是「省心 + 聚合 + 计费」——下游不必各自注册各家、不必管理多个 key,用一个接口、一个账户就能用上所有模型。
不论哪种,它的核心都是「把调用大模型这件事产品化、可治理化」。它不替你思考,它替你收银、调度、兜底、记账。
3. 核心需求与约束
功能性需求:
- [ ] 统一接口(通常 OpenAI 兼容),屏蔽各供应商差异
- [ ] 多供应商 / 多模型路由
- [ ] key 管理与分发、按用户 / 团队计费与配额
- [ ] 限流、负载均衡、故障转移(重试 / 切换上游)
- [ ] 缓存(省钱)、用量日志与可观测
- [ ] (可选)内容审核 / 护栏
非功能性需求 / 质量属性:
| 质量属性 | 目标 | 为什么对这类系统重要 |
|---|---|---|
| 附加延迟 | 极低(毫秒级) | 网关夹在关键路径上,自己绝不能拖慢请求 |
| 可用性 | 极高 | 它是单点,挂了 = 所有模型调用全挂 |
| 流式透传 | 必须 | LLM 是流式输出的,网关要原样转发,不能缓冲 |
| 成本可见 | 精确到 token | 计费 / 配额的根基 |
关键约束(不可逾越的边界):
- 🔴 它是关键路径上的单点:必须无状态、可水平扩、配置可热更新,否则就是全局故障点。
- 🔴 响应是流式的:必须边收边转(SSE 透传),不能等模型生成完再返回。
- 🔴 上游不可靠且各异:各家会限流、会抖动、价格和能力都不同。
- 🔴 上游 key 就是钱:绝不能泄露给下游或日志。
4. 架构全景图
你的应用 / 下游用户(用统一的 OpenAI 兼容接口)
│ 一个 base_url + 一个 key
▼
┌──────────────────────────────────────────────────────────────┐
│ AI 网关(无状态,可水平扩) │
│ ① 鉴权 + 配额检查 ② 限流 │
│ ③ 路由 / 负载均衡:按价格 / 延迟 / 健康度选一个上游 │
│ ④ 缓存:命中则直接返回(省一次调用) │
│ ⑤ 调上游,失败则【故障转移】到下一个上游 │
│ ⑥ 流式透传 token ⑦ 解析 usage → 记账扣费 │
└───┬───────────────────────────────────────────┬──────────────┘
│ 转发(并原样回传流) │ 旁路异步
▼ ▼
┌───────────────────────────────┐ ┌──────────────────────┐
│ 上游 LLM 供应商(多家、多 key) │ │ 用量 / 日志 / 计费存储 │
│ OpenAI / Claude / Gemini / 自建│ │ (可观测、出账单) │
└───────────────────────────────┘ └──────────────────────┘灵魂在于:网关自己什么模型都不跑,它是个「聪明的收费站」——所有车(请求)都从这过一道,被鉴权、计价、限速、必要时改道,但车还是开向上游的模型。
5. 组件职责
- 统一接入层:对外暴露一套(OpenAI 兼容)接口,内部用适配器把它翻译成各家上游的协议。为什么需要:让下游「写一次,调所有」,屏蔽供应商差异——这是适配器模式的经典应用。
- 鉴权与 key 管理:校验下游 key、管理上游 key 池、做二次分发。为什么需要:上游 key 是钱,必须由网关托管、绝不外泄。
- 路由 / 负载均衡 / 故障转移:在多个上游 / 多个 key 间选择,失败自动重试或切换。为什么需要:别把鸡蛋放一个篮子,单家挂了不能全挂。
- 限流与配额:按用户 / 团队限速、限额。为什么需要:防滥用、防超支(每个 token 都是钱)。
- 缓存:相同(或相似)请求直接返回缓存结果。为什么需要:LLM 调用又贵又慢,缓存是最大的省钱杠杆之一。
- 计量与计费:解析每次响应的 token 用量,记账扣费。为什么需要:没有计量就既管不住成本、也出不了账单。
- 可观测 / 日志:每一笔调用的延迟、成本、成败。为什么需要:看不见就管不了。
6. 关键数据流
场景一:一次普通转发(网关的日常)
1. 下游带 key 发请求 ──▶ 网关:鉴权 + 查配额(够不够额度?)
2. 限流通过 ──▶ 查缓存:命中则直接返回(省一次上游调用)
3. 未命中 ──▶ 路由选一个健康的上游 ──▶ 转发请求
4. 上游开始流式吐 token ──▶ 网关【边收边原样转发】给下游(SSE 透传)
5. 流结束 ──▶ 解析 usage(prompt/completion token 数)──▶ 异步记账扣费第 4 步是关键:网关绝不能等上游把整段生成完再转,否则流式体验全毁。它必须是「透明管道」。
场景二:上游故障转移
路由选中的上游返回 429(限流)或 5xx / 超时:
──▶ 网关按【故障转移链】切到下一个上游(或换一个 key)
──▶ 重试(指数退避)
──▶ 全部上游都失败,才向下游返回错误
── 下游全程无感:它只知道「我调了一次,拿到了结果」7. 数据模型与存储选择
核心实体:下游用户 / key / 配额;上游供应商 / key 池;用量流水(token、费用、延迟);路由配置;缓存。
| 数据 | 存储类型 | 为什么 |
|---|---|---|
| 用户 / key / 配额 | 关系型 | 要事务、强一致(扣额度不能错) |
| 路由 / 模型配置 | 关系型 + 内存缓存 | 频繁读、要可热更新 |
| 用量 / 计费流水 | 时序 / 列存 | 海量追加、按时间和用户聚合出账单 |
| 响应缓存 | 内存级 KV | 命中要快,有 TTL |
| 限流计数 | 内存级 KV | 高频读写、滑动窗口 |
8. 关键架构决策与权衡 ⭐
决策 1:流式响应,透传还是缓冲?(网关的红线)⭐
- 缓冲:等上游生成完整再返回——实现简单,但下游要干等十几秒,流式体验荡然无存。
- 透传:边收边转(SSE 逐块转发)。
- 取向:必须透传。代价是连接管理、错误中途恢复更复杂,但这是 LLM 网关的基本素养。
决策 2:自建部署,还是用托管?(不同阶段的关键选型)⭐
- 托管(如 OpenRouter、Cloudflare AI Gateway):零运维、开箱即用,但有第三方依赖、数据要经过它、定制有限。
- 自部署(如 One API、LiteLLM):完全可控、数据自留、可深度定制,但要自己保高可用、自己运维。
- 取向:个人 / 起步用托管或单机自部署够了;团队 / 平台级要自部署并做高可用。详见第 12 节。
决策 3:缓存——精确缓存还是语义缓存?⭐
- 精确缓存:请求完全相同才命中,安全但命中率低。
- 语义缓存:请求「语义相似」就返回缓存——命中率高、更省钱,但有答非所问的风险(相似 ≠ 等价)。
- 取向:默认精确缓存;语义缓存只在容忍度高的场景谨慎开启,且要能配相似度阈值。
决策 4:负载均衡 / 路由策略怎么定?
- 轮询:简单均摊。按价格:优先便宜的上游。按延迟 / 健康度:优先快的、活的。
- 取向:多数用「健康度优先 + 故障转移链」打底,叠加价格 / 延迟权重。核心是别把所有流量压在一家上。
9. 规模化与瓶颈
- 第一个瓶颈:网关自身吞吐。 → 破解:网关无状态,直接水平扩 N 份 + 前置负载均衡。
- 第二个瓶颈:上游限流(各家都有 RPM/TPM 上限)。 → 破解:多账号 / 多 key 轮换、请求排队、按配额削峰。
- 第三个瓶颈:计费写入量大。 → 破解:用量记账异步化(先转发,再落账),别挡在关键路径上。
- 第四个瓶颈:配置 / 限流状态的一致性(多个网关实例)。→ 破解:用共享的内存级存储(集中式限流计数与配置)。
10. 安全与合规要点
- 🔴 上游 key 绝不外泄:它是钱。下游只持有网关发的下游 key,永远看不到上游 key;日志也要脱敏。
- 多租户隔离:不同下游用户 / 团队的额度、数据、日志严格隔离。
- 防滥用:限流、异常用量告警、key 泄露检测。
- 内容合规:作为流量必经之地,可在此统一接内容审核 / 护栏。
- 提示注入:网关透传的是用户内容,本身不解释它,但要意识到下游模型面临注入风险(见 AI 对话产品模板 第 10 节)。
11. 常见误区 / 反模式
- ❌ 缓冲完整响应再返回 → ✅ 流式透传,网关是透明管道。
- ❌ 把网关做成有状态、难扩的单点 → ✅ 无状态 + 水平扩 + 共享状态外置。
- ❌ 不解析 token、不计量 → ✅ 按 usage 记账,否则成本失控、出不了账单。
- ❌ 滥用语义缓存导致答非所问 → ✅ 默认精确缓存,语义缓存谨慎开。
- ❌ 把上游 key 暴露 / 打进日志 → ✅ 上游 key 由网关独占托管、脱敏。
- ❌ 只接一家上游,它一挂全挂 → ✅ 多上游 + 故障转移链。
12. 演进路线:MVP → 成长期 → 成熟期(不同阶段怎么设置)
| 阶段 | 规模量级 | 怎么设置(具体) | 此时该操心什么 |
|---|---|---|---|
| MVP / 个人 | 单应用、少量调用 | 直接用托管(OpenRouter / Cloudflare AI Gateway),或单机起一个 One API / LiteLLM,接 1–2 个上游就够 | 别过度建设,先跑通「统一接口 + 看得到花了多少钱」 |
| 成长 / 团队 | 多应用、多团队 | 自部署 LiteLLM / One API:配多供应商路由 + 故障转移、按团队配额限流、加一层内存级缓存、用关系库存用量 | 容错、配额、缓存命中率、把单 token 成本压下来 |
| 成熟 / 平台 | 对外分发 / 大规模 | 网关多副本高可用 + 集中式限流;接入专业可观测(如 Helicone);精细计费与多租户隔离;按需开语义缓存与护栏 | 高可用、精确计费、合规、滥用治理 |
13. 可复用要点
- 💡 网关 / 中间层是「把横切关注点集中化」的经典手法。 鉴权、限流、计费、观测、容错——与其在每个应用里重写一遍,不如收编到一个入口。
- 💡 适配器模式屏蔽供应商差异:对外一套接口,对内 N 个适配器。「写一次,调所有」适用于任何「对接多个异构第三方」的场景。
- 💡 故障转移 = 别把鸡蛋放一个篮子。 任何强依赖外部、且外部会挂的系统,都该有「主挂了切备」的链路。
- 💡 缓存是 LLM 系统最大的省钱杠杆之一——这一点和 AI 对话产品、模型推理服务 的 prompt / 前缀缓存一脉相承。
🎯 随堂检验
- A它自己跑大模型
- B用一个统一入口集中做鉴权、计费、限流、容错、缓存
- C负责训练模型
参考原型与延伸阅读
本模板基于以下真实开源项目与公开文档的架构理念整理。想深入,直接读它们的代码与文档——比任何二手讲解都可靠。
🔧 开源原型(可直接读代码):
- songquanpeng/one-api — 最流行的中文 LLM API 管理 & 分发系统,统一接口 + key 管理 + 二次分发,「中转站」的典型实现。
- BerriAI/litellm — 用 OpenAI 格式调用 100+ 模型的网关 / 代理,内置成本追踪、负载均衡、故障转移、限流。
- Helicone/ai-gateway — Rust 写的高性能开源 AI 网关,主打负载均衡、缓存、限流、可观测。
- Portkey-AI/gateway — 极轻量(<1ms 附加延迟)的开源 AI 网关,路由 + 护栏 + 多供应商。
📖 工程文档 / 资料:
- Cloudflare AI Gateway 文档 — 托管型 AI 网关:缓存、限流、重试、可观测,理解「托管方案怎么设计」。
- jasonkuperberg/ai-gateway-resources — AI 网关选型与集成资料汇总(OpenRouter / LiteLLM / Portkey / Kong / Cloudflare)。
📌 一句话记住 AI 网关:它不跑任何模型,它是「调用大模型」这件事的收费站与调度台——所有设计都在回答『怎么用一个统一入口,把鉴权、计费、限流、容错、缓存、观测一次性管好』。