大家好,我是老刘
今天不聊Flutter,开源一个我自用的小工具。
先跟大家算一笔账。
10个AI订阅、10个agent、4台PC,一共要配置多少次?
这就是我前阵子面对的事,今天老刘先把过程和踩的坑都讲清楚,最后工具直接给大家。
400次配置,差点把我逼疯
老刘的AI订阅比较多,主要是不同渠道赠送的,还有自己买来测试的。比如千问token plan、火山方舟、opencode go等等,总共有差不多10个。
我尝试的agent也比较多,codex、Claude Code、opencode、oh-my-pi、copilot、workbuddy等等,差不多也有10个。
虽然大部分是用来测试Harness的,并非主力。
另外我平常用的PC也有四台(工作需要,不同客户的场景不同)。
所以问题来了,我需要在不同agent上配置各种provider。
算一下大约是 10 × 10 × 4 = 400。
这个工作量可不小。
而且除了OpenRouter这种非常知名的provider,很多provider在工具里是需要手工配置的。
更有甚者,有些agent对自定义provider不支持模型自动获取,需要手工添加模型。
最夸张的是火山方舟这样的token plan,本身就不支持模型列表接口。
所以如果再乘上常用模型的数量,这个工作量就是天文数字了。
类似cc switch这样的工具只能解决一台PC的问题,多台PC之间无法同步,而且还需要本地起一个gateway服务。
我是真被这事折腾够了,于是想了个办法,顺手把它开源了。
这是个干啥的东西
GitHub地址
一个本地Web管理工具,把Cloudflare免费的AI Gateway,变成agent能直接用的统一大模型网关。

它能帮你干三件事。
在本地管理Cloudflare AI Gateway
建gateway、存各家厂商的Key(BYOK)、自动发现模型、生成模型列表,全程不用去Cloudflare控制台瞎折腾。
一键部署转发Worker
对agent暴露标准的OpenAI兼容接口,/v1/chat/completions加/v1/models,是个agent就能接。
统一模型列表
把所有provider的模型整合成一个/v1/models,还能隐藏不用的模型。Openrouter那几百个模型,只挑选几个有用的。
最终效果:你所有的PC、所有的agent,只需要填一个Base URL加一个token,就能用上你所有的订阅。
以后新增、删除订阅,只操作一次,处处生效。
怎么安装
一条命令搞定。
bash
npm install -g ai-gateway-desk
这个方案是踩坑踩出来的
一开始我想在Cloudflare的worker上部署一个litellm或者Portkey。
刚开始搞,发现Cloudflare提供了一个免费的AI Gateway。
这不巧了吗,连部署worker的麻烦都省了。
结果没想到,Cloudflare AI Gateway是个大坑。
- 它有自己的私有认证字段,有些agent无法直接支持。甚至有些不能自定义header的agent都无法接入。
- 它的compat模式只支持
/api/v1这个path,特殊的path比如/xxx/v3不支持。但我用provider spec模式,就失去了网关的意义。 - 它的配置界面异常难用,还经常莫名其妙地失败。
- 它没办法把所有provider的模型整理成一个
/models接口。
当我把各种订阅、token plan都配置到Cloudflare AI Gateway后,才陆续发现这些坑。
但这个时候,沉没成本已经很高了。
所以我当时做了一个简单的封装层,部署在Cloudflare的worker上,名叫ai-gateway-desk-worker。
功能很简单。agent的llm请求到ai-gateway-desk-worker上,worker将其转换、添加Cloudflare AI Gateway需要的私有认证字段,然后再交给Cloudflare AI Gateway。这样对agent来说,就是一个标准的chat completions接口了。
另外增加了三个功能。
- 对类似
/xxx/v3这样的特殊path,worker将其转换为provider spec模式交给Cloudflare AI Gateway,agent看到的还是一个标准的网关接口。 - 整合一个
/models接口,让agent能自动获取gateway上的所有可用模型。 - 可以自己配置
/models接口返回的模型列表,例如隐藏自己不用的模型。这个功能对Openrouter很有用,我把Openrouter的几百个模型都隐藏了,只保留几个自己用到的。
bash
agent(codex / Claude Code / opencode ...)
│
│ 发标准 OpenAI 请求,只填一个 Base URL + token
▼
ai-gateway-desk-worker(封装层)
│
│ 补上 Cloudflare 私有认证字段
│ 转换 /xxx/v3 这类特殊 path
│ 聚合所有模型成一个 /models
▼
Cloudflare AI Gateway
│
▼
各家 provider(千问 / 火山方舟 / OpenRouter ...)
它就是agent和Cloudflare AI Gateway之间的翻译官,agent完全不用管Cloudflare的私有协议,像接普通OpenAI接口一样接进来就行。
这时候这个工具还是自用的,配置通过手工修改配置文件和一个简单cli进行。
后来同事发现了,想让我给他们也用上。
但我发现很多私有的内容是写在代码里面的,比如管理token、比如Cloudflare的账户id。
所以就利用AI把代码整理出来,然后添加了一个简单的web管理界面。
这就是现在的第一版ai-gateway-desk了。
客观说两句,好在哪、坑在哪
先说这个工具好在哪。
配置一次,处处生效
所有PC、所有agent只填一个Base URL加一个token。以后新增、删除订阅,只在工具里操作一次。
Key都在自己手里
各家厂商的Key存在你自己的Cloudflare账户里(BYOK),转发Worker也部署在你自己的账号下,数据不经过别人的服务器。
模型列表干净可控
自动发现各家provider的模型,整合成一个/v1/models,还能隐藏不用的。OpenRouter那几百个模型,只留几个自己用的,agent拉到的列表清清爽爽。

不用碰Cloudflare控制台
建gateway、配provider、管模型,全在本地Web界面完成。Cloudflare那个控制台有多难用,用过的都懂。
底层能力免费白嫖
日志、安全护栏、模型智能路由这些gateway能力,都是Cloudflare AI Gateway自带的,免费额度对个人和小组织完全够用。
再说坑,你也得知道。
DNS污染问题
封装层部署在Cloudflare workers上,众所周知worker默认的url有dns污染问题。
所以最好是加一个自己的域名访问就没有这个问题了。
免费服务容易429
Cloudflare AI Gateway本身应该是运行在边缘节点上的,现在用的人也不少。
所以对一下免费的AI服务,比如opencode zen免费层,这些免费服务大部分都会基于ip进行限流,Cloudflare AI Gateway就更容易碰到429 rate limit。
但如果你是管理付费订阅,就完全不用担心这种问题。反正老刘在付费订阅上从来没有碰到因为ip原因的429。
也有可能是还没来得及因为ip限流,5小时额度就用完了😭
下一步计划
因为很多同事反馈免费模型容易429的问题,我在考虑要不要加一个Portkey,可以部署在本地,这样可以最大程度避免429的概率。
但是如果你的网络运营商不给力,其实这个功能的作用就比较有限。
老刘自己测试,公司的ip可能一般效果不好。
家用网络,北京这边的好像还不错,一般不会429。但是暑假老刘去太原,就不太好,基本不可用。
所以这个功能还是看大家的意愿,如果需要的人多,我再加。
如果你也和老刘一样有订阅多、agent多、配置烦的问题,可以去点个star试试,地址再贴一次。
安装方法
bash
npm install -g ai-gateway-desk
最后也想问问大家,你平时同时用几个agent?provider配置是怎么解决的?评论区聊聊。
🤝 如果看到这里的同学对客户端或者Flutter开发感兴趣,欢迎联系老刘,我们互相学习。
🎁 私信免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。可以作为Flutter学习的知识地图。
💬 : laoliu_dev
📂 老刘也把自己历史文章整理在GitHub仓库里,方便大家查阅。