Skip to main content

Agent 网关

前置:写过一次调用大模型 API 的代码。不需要用过任何网关产品,也不需要懂 Kubernetes。

本专题回答:这一层到底替你挡掉了什么,自建还是买现成的,以及它自己要多花多少毫秒。

你的代码里现在大概有这么一行:model="gpt-4o",后面跟着一个写死的 API Key。

它能跑。直到有一天你想接第二家供应商 —— 于是发现两家的请求体长得完全不一样;直到有一天第一家挂了十分钟 —— 于是你想自动切到第二家;直到财务问起哪个团队花了多少钱 —— 于是你发现账单上只有一个总数。

每加一个这样的需求,你就往调用模型的那段代码里塞一段判断。塞到第六个的时候,那段代码已经和业务没什么关系了,它变成了一个专门负责「怎么把请求送出去」的东西。把它从业务里搬出来单独跑,就是这个专题说的网关。

01 篇会带着你把这个过程完整走一遍:从五行代码起步,一个需求一个需求地加,看它怎么长成下面这六件事。

一、网关处理的六件事

一次模型调用在网关里依次经过的六道处理业务代码只写模型名不关心后端① 协议转换抹平各家请求体差异省掉它 —换一家 provider业务代码全改② 路由同名模型下选一个后端省掉它 —所有流量压在同一个后端上③ 容错fallback · 熔断健康检查省掉它 —后端一抖用户就看到报错④ 多租户虚拟密钥 · 配额计费归属省掉它 —账单只有一张算不出谁花的⑤ 安全可观测脱敏 · 过滤审计 · 埋点省掉它 —出了事查不到也没人拦得住⑥ MCP 代理工具聚合工具级授权省掉它 —每个 Agent 自己连一堆外部工具各家 providerMCP Server① ② ③ 只和模型调用有关 —— 这是「LLM 网关」的范围⑥ 是把工具调用也纳进来才长出来的 —— 「Agent 网关」的范围④ ⑤ 两边都要:不管流量打向模型还是工具,都得知道是谁发的、花了多少、有没有越权
六道处理按请求经过的先后顺序排列。前三道决定「这次调用能不能成功」,第四第五道决定「事后能不能说清是谁调的」,第六道是 2026 年才被并进来的新职责。

这六项不是谁设计出来的,是每个把大模型用到一定规模的团队都会重新实现一遍的东西。

1.1 图里这六个词的意思

第一次读这张图,有六个词会挡路。先给出够用的定义,正文各篇再展开:

意思哪一篇细讲
provider提供模型 API 的一方,比如 OpenAI、Anthropic、Bedrock、通义。它们的接口两两不同,这正是①要抹平的东西01
fallback(兜底)首选后端失败时自动改调另一个,业务代码不感知。注意它治的是「这一次调用」,不是「这个任务」03
熔断某个后端连续失败到一定次数后,网关暂时不再往它发请求,冷却一段时间再试。防的是把请求持续喂给一个已经挂了的后端03
虚拟密钥网关自己签发的一套 key。真实的 provider key 只有网关持有,业务方拿到的是虚拟 key,key 上绑着团队、配额和可用模型范围04
配额给某个团队或某把 key 设的用量上限,可按请求数、token 数或美元数计。超了就拒绝或降级04
MCPModel Context Protocol,Anthropic 2024 年底提出、现已成为事实标准的一套协议,规定 Agent 怎么发现和调用外部工具。它对工具的意义,相当于 HTTP 对网页的意义05

二、四个开源实现的形态差异

四个拆解对象分属四种部署形态。形态指的不是功能多少,而是网关代码到底跑在谁的进程里 —— 这一件事决定了它能不能独立升级、崩了会不会带崩业务、每次调用要多付多少延迟:

形态一 · 库业务进程你的代码LiteLLM同一个进程,函数调用LiteLLM · Python装机量最大,功能面最全接入只需改一行 base_url代价 · 与业务同生共死代价 · 受 GIL 限制,吃不住高并发形态二 · 独立进程业务进程agentgateway独立部署,可单独扩缩容agentgateway · RustLinux 基金会治理MCP / A2A 是一等公民代价 · 每次调用多一跳网络延迟代价 · 多一个要自己运维的服务形态三 · Envoy 扩展业务Envoy扩展进�程Envoy 把请求外发给扩展进程处理Envoy AI Gateway · GoEnvoy 官方,K8s CRD 驱动直接复用 Envoy 的成熟生态代价 · 受 Envoy 的扩展模型约束代价 · 不在 K8s 上基本没法用形态四 · Wasm 插件业务Higress 网关进程Wasm 沙箱插件跑在网关进程内的沙箱里Higress · Go国内落地最多插件可热插拔,改策略不重启代价 · 沙箱内能做的事受限代价 · 跨实例共享状态要自建从左到右,网关代码离业务代码越来越远:耦合越来越轻,能独立演进;同时多出来的网络跳数与运维对象也越来越多。
四种形态的真正差别不在功能清单,而在这张图上方的拓扑 —— 网关代码到底跑在谁的进程里。这决定了它能不能独立升级、崩了会不会带崩业务、以及每次调用要多付多少延迟。

2.1 图里这四个词的意思

意思
GILGlobal Interpreter Lock,CPython 的全局解释器锁。同一时刻只允许一个线程执行 Python 字节码,所以纯 Python 服务很难靠多线程吃满多核。这是 LiteLLM 作为库嵌进业务进程时最主要的性能天花板
ext_procExternal Processing,Envoy 的一种扩展方式。Envoy 把请求通过 gRPC 外发给一个独立进程处理,拿回结果再继续转发。好处是扩展逻辑用什么语言写都行,代价是每次调用多一次进程间通信
CRDCustom Resource Definition,Kubernetes 的自定义资源。有了它,配置网关就变成「写一段 YAML apply 上去」,和配置 Deployment、Service 是同一套操作方式
proxy-wasm 沙箱一套让 WebAssembly 模块跑在代理内部的规范。插件被编译成 Wasm 字节码,装在网关进程里的沙箱中运行 —— 能热插拔、崩了不带崩网关,但只能通过规范开放的那些接口和外界打交道,做不了任意系统调用

三、正文构成

#标题读完能回答的问题
01网关是什么我到底需不需要这个东西?从五行代码一路加需求,看它是怎么被逼出来的
02四种形态它该跑在我的进程里,还是单独起一个服务?这个选择之后要付什么代价
03路由与容错有五个 key 该怎么轮着用?一家挂了怎么自动切,切的时候怎么不让用户等两遍超时
04多租户与配额怎么让每个团队只能用自己那份额度,以及为什么「花了多少钱」这件事只能事后算
05MCP 网关十几个 MCP 工具怎么统一管起来,怎么做到「这个 Agent 只准调这三个工具」
06缓存很多人问的是同一个问题,能不能不真调模型?以及「意思差不多」的缓存什么时候会答错人
07Token 速率与 QoS大客户嫌吐字慢,怎么给他留一条更快的通道
08云厂商怎么做阿里云 · AWS · 华为云 · 腾讯云 各自把这层做成了什么样,能不能直接买
09国外托管网关Kong · Cloudflare · Azure · Apigee · Vercel · OpenRouter 的能力边界与定价模型
10性能与形态代价加了这一层,每次请求多等多久?这个数怎么自己压出来

四、拆解对象

4.1 开源实现

项目协议语言选取理由
BerriAI/litellm56,709NOASSERTIONPython装机量最大,功能面最全,正在用 Rust 重写内核
higress-group/higress9,138Apache-2.0Go国内落地最多,Wasm 插件形态的代表
agentgateway4,419Apache-2.0RustLF 治理,唯一为 MCP / A2A 原生设计
envoyproxy/ai-gateway1,937Apache-2.0Gov1.0 已发布,Envoy 官方,K8s CRD 驱动
maximhq/bifrost7,414Apache-2.0Go性能对照组

Kong(★44,001)与 Traefik(★64,488)star 更高但非 AI 原生,仅在形态对比时引用。

4.2 Portkey 的状态变更

Portkey 曾是主要的开源 AI 网关之一。Palo Alto Networks 于 2026-04-30 宣布收购、05-29 完成交割,Portkey 成为 Prisma AIRS 的核心 AI 网关。

开源仓库最后一次提交为 2026-05-25,最后一个 release 停在 v1.15.2(2026-01-12)。最后几个提交均为安全修复(redact provider options in logsdisable logs when admin token not set)。

这是开源 AI 网关的第一次大规模整合,也是本专题通向 Agent 安全的衔接点。

五、与其他专题的关系