我把一个 AI 网关的参考实现开源了。如果你在做 AI 应用,早晚要给它加上按用量收费、管理多个用户、让人充值这几件事。这套东西能帮你省掉从零搭的那一段。这篇讲三件事:它解决什么问题,我为什么这么做,你能从里面拿走什么。

为什么会有这个东西

做 AI 应用的人,做着做着都会撞到同一堵墙。

你想让别人用你的应用,就得回答几个很实际的问题:按用量怎么收费,一个 token 值多少钱;每个用户的余额怎么记、怎么扣、怎么保证不出错;他想充值,钱怎么进来、credit 怎么到账;有人拿脚本狂刷你的接口,怎么拦下来。

这几件事听起来不难,真做起来全是细节。余额在并发下算错了,用户要么白嫖要么被多扣。充值回调漏处理一次,用户付了钱 credit 没到,这种事很伤人。

这些事单拎出来都不新鲜,难在细节,而且现成的整套方案都不太趁手。所以我自己拼了一个,然后开源。至于为什么做成现在这个样子,得先说清楚它是给谁用的。

为什么选 serverless,这东西给谁用

先说给谁用,因为这决定了后面每一个选择。它是给个人独立开发者、给还在验证想法的早期项目用的。这个阶段最怕两样东西:固定成本和运维。东西还没人用,就得每月先付一笔服务器钱、还得自己盯着它别挂,这两样都是负担。

市面上成熟的 AI 网关方案不少,功能也齐,但大多有一个共同前提:你得自己找台服务器把它跑起来、自己维护。对一个只想快点验证想法的人,光这一步就够劝退了。

所以我选了 Cloudflare。它是 serverless 的——平时没有请求就不花钱,免费额度对早期项目绰绰有余;不用管服务器,代码推上去就在跑;账本这种要求强一致的东西,用它的持久化对象顶上,不用自己搭数据库集群。整套东西从想法到上线,是分钟级的。

它的边界我也想清楚了,写在这儿免得误导人。它是给"0 到验证"这一段用的起飞台。它不冒充终极架构——等项目真做大、量级上来,大概率得把它重构成更专业的样子,这是预期之内的。恰恰因为它够轻、是 Cloudflare 原生的,你才能几分钟搭起来先验证;那些要自部署的重方案,反而会拖慢你起步。

说到底,这类东西是编码生态里的标准化积木。认证、计费、支付,几乎每块都有现成服务。你真正该练的是知道有哪些积木、各自什么脾气——就说认证,有的服务能直接接微信登录,有的就不行;支付也一样,有的能走微信支付,有的走不了。选之前得先懂它。自己从头造这些,反而是最不必要的那部分。这个项目就是把这些积木拼成一个能跑、能读、能改的样板,让你少从零拼一次。

它大概长什么样

整套东西跑在 Cloudflare Workers 上,用的都是免费额度,平时零固定成本。它有这么几层。

一层是登录。邮箱注册加第三方登录,每个请求都会验证身份,不是解码一下就放行。

一层是计费账本,整个项目的心脏,后面单独说。

一层是充值和支付。对接了一个支付平台的下单和回调,处理了重复回调、退款这些边界情况。

一层是 AI 能力本身。对话、看图、语音转文字都接了,语音还分离线和实时两种,实时那种是边说边出字。

最后一层是限流和防刷。每个用户每分钟、每天能调多少次都有上限,余额也设了顶,免得被人钻空子刷爆。

把这些层连起来,一次调用和一次充值大概是这样走的。

AI 网关的调用与充值链路

计费这层,值得多说两句

计费的核心是一套预扣加结算的账本。

打个比方,像你在酒店前台刷卡预授权。还没消费,它先冻结一笔预估的钱;退房时按实际消费结算,多冻的退回去。这套网关也是这个思路:一个 AI 请求进来,先按上限预扣一笔 credit,调用真跑完了,再按实际用量结算,把多扣的退回去。实时语音那种长连接尤其需要它,因为你事先不知道用户会说多久。

价格上,输入和输出是分开算的。大模型的输出通常比输入贵不少,混在一起算会失真。

还有一个我特意做的决定:所有跟钱有关的规则,倍率、单价、套餐、限额,全都收在一个配置文件里。你 fork 下去想改计费,不用在代码里到处找,打开那一个文件改完就行。这个是刻意收敛的,因为计费规则一旦散在十个地方,正是这类项目最容易长歪的地方。

你能从里面拿走什么

如果你想搞明白计费系统怎么设计,这是一份能读的实现。账本怎么保证不重复扣、预扣和结算怎么配合、价格规则怎么收敛,代码里都摆着,比看文档直观。

如果你想自己搭一个 AI 网关,更省事:fork 下来,改那一个配置文件(价格、套餐、限额),再填上你自己的几个密钥,就能部署起来。

如果你准备在 serverless 上做类似的东西,我踩过的坑基本都写在代码注释和 README 里了,能帮你少绕几个弯。

最后

仓库在这里:github.com/hawkeye-xb/AI-Gateway-Demo。用得上就拿去,有问题提 issue,我看得到。

这一篇讲到这里。