在自托管大模型服务中,AI 网关不只是反向代理。掘金一篇针对 QuantumNous/new-api 的源码解析,将项目要解决的问题概括为三类:请求发给谁、不同模型协议如何互通、调用费用如何计算。New API 采用 AGPLv3 协议,fork 自 one-api。
请求入口:管理面与数据面分离
文章将系统分为管理面和数据面:/api 承载控制台操作,/v1、/v1beta、/v1/tasks 承担对 AI 客户端的中继转发。一次 POST /v1/chat/completions 会经过认证、限流、渠道分发、预扣费、重试、适配转发和流式结算七步。
请求体在整个处理过程中只保留一份副本。common/body_storage.go 会将小请求放在内存、大请求落盘,并支持反复 Seek。解析 model、协议转换、透传和重试重放都读取同一份数据;外发请求还会补齐 ContentLength 和 GetBody,避免 HTTP 传输层重试时发出空 body。
请求调度:倒排索引与换渠道重试
调度要回答“哪个渠道能服务某个模型”。直接查询渠道表需要逐条解析 models 字段,难以利用索引。New API 将渠道、模型、分组的关系预先反向排列,物化成 abilities 表,并用 group、model、channel_id 组成复合主键,使高频查询变成一次索引查找。渠道配置变化时,系统在事务内先删后插维护。
在 abilities 之上,GetRandomSatisfiedChannel 负责选择具体渠道。失败重试不是原路重发,而是每轮重新选择渠道。首轮使用最高优先级层,第一次重试降到次高层,超出后固定最低层;auto 分组会先耗尽当前分组层级,再切换下一分组。平滑加权随机在平均权重小于 10 时先放大 100 倍,避免小权重渠道被整数运算“饿死”。
同一会话可优先复用上次成功的渠道;一个渠道可配置多个上游密钥并轮询使用,只有全部密钥失败才禁用整个渠道。重试决策函数 DecideRelayRetry 只有 99 行,包含 9 个 return 分支,按优先级处理会话、渠道错误、不可重试标记、次数耗尽和状态码等情况。默认重试码区间包括 100-199、300-399、401-407、409-499、500-503、505-523、525-599,因此 429 和大部分 5xx 可重试;400、408、504、524 明确不重试。决策原因会写入请求日志,渠道禁用等副作用异步执行。
协议适配:以 OpenAI Chat 为枢纽
协议适配层目前有 47 个渠道适配器,共享同一个 Adaptor 契约,由 GetAdaptor 根据 apiType 分发。格式转换被拆成可组合的纯函数,网络请求交给 DoApiRequest、DoFormRequest、DoWssRequest 三个公共实现。接入新渠道时,开发者主要关心 URL、鉴权头和请求体格式。文章以 Claude 适配器为例,其代码只有 182 行。
四种协议互转的注册表共有 12 个转换器,但并非两两直连,而是以 OpenAI Chat 为中心的星型结构。真正承担转换逻辑的是 6 个直连转换器,覆盖 Claude 与 Chat、Gemini 与 Chat、Chat 与 Responses;其余 6 个通过组合完成。例如 Claude 到 Gemini 会先转为 OpenAI Chat,再转为 Gemini。新增协议只需补充该协议与 Chat 的双向转换,存量路径可自动复用。
转换层约 2600 行。无法映射的字段会生成包含 code、path、severity 的诊断信息,并提供 allow、safe、strict 三档损耗策略。流式转发由 StreamScannerHandler 统一处理并发、超时、保活和断开,渠道只需提供格式翻译闭包。素材指出,只有上游返回 200 后才进入流式引擎;若上游先返回 429 或 500,客户端尚未收到数据,请求可以回到重试循环。
计费与额度:预扣、结算与限流
计费被概括为“预扣—结算—退款”的账本机制。请求进入后,系统先通过 tokenkit 本地估算输入,再结合定价信息组装费用,并使用 Redis Lua 原子扣减。流式返回阶段,SSE 数据逐帧转发给客户端,最终按上游真实 usage 结算。
额度治理还包括限流。New API 同时使用总数令牌桶和成功数滑动窗口,其中失败不占用成功额度。这可以避免上游异常或请求失败时,用户的可用额度被无效消耗。
从源码看,生产级大模型网关的关键不在单点能力,而在调度、适配和计费三套机制的配合。调度决定请求路径,协议适配决定兼容范围,计费决定运营边界。对于需要自托管模型服务、接入多渠道密钥或进行内部成本核算的团队,New API 的源码提供了一个可拆解的工程样本。
原创文章,作者:点点,如若转载,请注明出处:https://www.dian8dian.com/cong-new-api-yuan-ma-kan-sheng-chan-ji-ai-wang-guan-diao-du