Python开源LLM-Bridge

三份订阅,一个端点——开源了 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 的请求不会假装支持,采样参数(temperaturemax_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(claudecodex loginagy)。

自带的聊天界面支持流式、每个会话单独选模型、多会话并发,还有一个 API 视图——直接给你贴好当前模型的 cURL / Python / JS 片段。主题跟随系统明暗。模型输出经 marked 渲染后一律过 DOMPurify——模型的输出是不可信输入,这条也不破例。

小结

LLM-Bridge 想解决的问题很窄:三份已经付过钱的订阅,配额别散在三个界面里。

  • 对外一个 OpenAI 端点:所有现成工具零改动接入,内部用同一种规范格式收拢三家差异;
  • 对内三条官方通道:claude 走 Agent SDK,codex / agy 走官方 CLI 子进程,网关不碰 token;
  • 边界写在明处:只做聊天、单用户、本地优先——刻意的克制,不是没做完。

MIT 协议,代码在 github.com/mahui/llm-bridge。后面几篇会把合规红线、适配层设计、子进程生命周期这些踩过的坑一篇篇拆开讲。

留言

  • 加载中…

留言先审后发,通过后公开显示;邮箱只有站主可见。