三份订阅,一个端点——开源了 LLM-Bridge
把 Claude Code、Codex、Antigravity 三个订阅统一到一个 OpenAI 兼容 API 后面。讲讲它做什么,以及刻意不做什么。
如果你同时付费买了 Claude、ChatGPT(Codex)和 Google 的 Antigravity,那你手里有三份订阅、三个 CLI、三个交互界面,配额各管各的。想在自己的脚本里调一下,还得记三套命令、三种输出格式。
LLM-Bridge 把这三家放到一个 OpenAI 兼容的本地端点后面,再配一个自带的聊天界面。复用每个工具自己的订阅登录——不用买 API Key,不用从哪儿抠 token。
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8787/v1", api_key="unused")
for model in ["claude/claude-sonnet-5", "codex/gpt-5.5", "agy/gemini-3.5-flash-medium"]:
r = client.chat.completions.create(model=model, messages=[{"role": "user", "content": "Hi!"}])
print(model, "→", r.choices[0].message.content)
同一个 OpenAI 客户端,换个 model 字符串,就从 Claude 切到 GPT 再切到 Gemini。这就是全部意图。
为什么是「OpenAI 兼容」
不是因为 OpenAI 的格式最好,而是因为它事实上是通用插座。几乎每一个 LLM 客户端、SDK、编辑器插件都能把 base_url 指向一个自定义地址。选它做对外协议,等于让所有现成工具零改动接进来——你已有的 Python openai 库、你编辑器里的 AI 插件、你随手写的 curl,改一个地址就能用。
于是内部也用 OpenAI Chat Completions 格式作为唯一的规范中间格式。请求进来是它,三个后端各自的原生输出转回它,再吐出去。三家后端的差异被压在适配层里,对外只有一种形状。
三个后端,各走各的官方通道
| 后端 | 走什么 | 典型模型 |
|---|---|---|
| claude | claude-agent-sdk(SDK 自带 CLI) |
Fable 5、Opus 4.8、Sonnet 5、Haiku 4.5 |
| codex | codex exec --json 子进程 |
GPT-5.5、GPT-5.4、GPT-5.4-mini… |
| agy | agy -p - 子进程(Antigravity CLI) |
Gemini 3.5/3.1、Claude 4.6 Thinking、GPT-OSS 120B |
三家没有一行是自己拼后端 API 请求的。claude 交给官方 Agent SDK,codex 和 agy 各自 shell 出官方 CLI。认证、token 刷新、订阅计费,全部由各家自己的 harness 负责,网关一个字节的 token 都不碰。 这条线不是洁癖,是这个项目能不能存在的前提——为什么,单开了一篇讲。
刻意不做的那些
一个工具的边界,往往比它的功能更能说明它是什么。LLM-Bridge 明确不做这些:
- 只做聊天。不支持 tool calling、不支持图片等多模态。带
tools的请求不会假装支持,采样参数(temperature、max_tokens)接收但不转发——底层 CLI 根本不暴露这些旋钮,假装转发只会骗自己。 - 单用户、本地优先。默认只听
127.0.0.1,没有限流、不存任何凭证、CORS 锁死在自带 UI 的来源。它是你自己机器上的个人网关,不是给一个团队扛流量的服务。 - 不碰 token。全部走官方 harness,绝不抽取或重放 OAuth token——供应商明令禁止(Anthropic 2026 年 1 月上线服务端拦截、4 月全面强制),直连的后端 API 现在直接回 403。
这些不是「还没做」,是想清楚了不做。把它们写进 README 的第一屏,是为了让用它的人一开始就知道边界在哪,而不是用到一半撞墙。
装和跑
uv tool install git+https://github.com/mahui/llm-bridge
llm-bridge
然后打开 http://127.0.0.1:8787。前提:Python 3.12+、uv,以及至少一个已登录的 CLI(claude、codex login 或 agy)。
自带的聊天界面支持流式、每个会话单独选模型、多会话并发,还有一个 API 视图——直接给你贴好当前模型的 cURL / Python / JS 片段。主题跟随系统明暗。模型输出经 marked 渲染后一律过 DOMPurify——模型的输出是不可信输入,这条也不破例。
小结
LLM-Bridge 想解决的问题很窄:三份已经付过钱的订阅,配额别散在三个界面里。
- 对外一个 OpenAI 端点:所有现成工具零改动接入,内部用同一种规范格式收拢三家差异;
- 对内三条官方通道:claude 走 Agent SDK,codex / agy 走官方 CLI 子进程,网关不碰 token;
- 边界写在明处:只做聊天、单用户、本地优先——刻意的克制,不是没做完。
MIT 协议,代码在 github.com/mahui/llm-bridge。后面几篇会把合规红线、适配层设计、子进程生命周期这些踩过的坑一篇篇拆开讲。
留言