V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
shuaijinchao

一行代码,让 Claude Code / Gemini / Codex 接入任意 LLM

  •  
  •   shuaijinchao · 21 小时 22 分钟前 · 1950 次点击

    大家好,我是帅进超,曾参与并主导过 Apache APISIX 、CNCF APIOAK 、Orange 等 API 网关的开发。最近我在做一个新项目 — Nyro,一个专为 Agent 设计的原生 AI 网关。


    一、AI Coding Agent 的现状

    OpenAI 、Anthropic 、Google 等各家一线 LLM 厂商都提供了自家的 AI Coding Agent —— Codex CLI 、Claude Code 、Gemini CLI 且迭代速度之快,几乎以周为单位在刷新,上周还是新功能,这周就已经全部成为了标配。

    厂商不计成本的投入 Agent 的开发,这背后共同逻辑是:把开发者锁定在自家的模型生态内,完成从工具到模型的端到端闭环。而数据交互技术协议就是锁定工具与模型的一种重要手段,Claude Code 只走 Anthropic 协议,Codex CLI 绑定 OpenAI Responses API 协议,Gemini CLI 依赖 Google 自家的 GenerateContent 协议,工具越好用,对原厂模型的依赖就越深,迁移成本也越高。


    二、AI Coding Agent 的使用问题

    虽然各大 LLM 厂商都提供了功能强大、生态完善的 CLI 工具,但国内开发者来说,带来了几个现实问题:

    原厂模型:网络和费用是门槛

    Anthropic 、OpenAI 、Google 在国内均无法直接访问,需要代理,Anthropic 更是对国内访问严格限制;原厂旗舰模型的 API 百万 Token 输出价格均在 20 美元左右,开发场景的高强度使用成本是必须要考虑的问题。相比之下,国内的 DeepSeek 、GLM 、Kimi 、MiniMax 在价格和访问上有明显优势,部分模型的性能已经相当可观。

    国产模型:协议支持好,但限速 / 配额是硬伤

    好消息是,国内的 GLM (智谱)、Kimi (月之暗面)、MiniMax 都陆续跟进,提供了 OpenAI 兼容协议和 Anthropic 协议,接入 Claude Code 这类工具在技术上已经没有障碍。

    坏消息是,各家推出的 Coding Plan 普遍有比较严格的限速和配额限制。真正重度使用下来,很容易碰到 429 报错、响应变慢、或者单日配额跑完等问题,用起来体验大打折扣。

    Codex CLI & Gemini CLI 的协议壁垒:国产模型全军覆没

    Codex CLI 走 OpenAI Responses API,Gemini CLI 走 Google GenerateContent ——这两套都是各家相对较新的接口规范。而目前国内主流模型提供商( DeepSeek 、GLM 、Kimi 、MiniMax 等)只跟进实现了 OpenAI Chat Completions 兼容层。这意味着,即使你有这些模型的 API Key ,也无法直接把它们接入 Codex CLI 和 Gemini CLI 。

    三个工具,三套协议,三套配置

    Claude Code 用 Anthropic 协议,Codex CLI 用 Responses API 协议,Gemini CLI 用 Gemini GenerateContent 协议。想把某个模型同时接入这三个工具,要么自己写协议转换程序,逐一修改各工具的配置文件 —— 格式不同、路径不同,换个模型还得重来一遍。


    三、什么是 Nyro ?

    Nyro 是一个桌面原生的 AI 网关。 它让 Claude Code 、Codex CLI 、Gemini CLI 等任意 AI 工具,无需改动任何配置,就能无缝接入 100+ LLM 提供商。Nyro 实现了 OpenAI 、Anthropic 、Gemini 等主流协议的毫秒级协议重写和跨协议工具调用适配。在此基础上,还提供负载均衡、语义缓存、访问控制和用量监控等能力。

    Claude Code · Codex CLI · Gemini CLI · OpenCode
         OpenAI SDK · Anthropic SDK · Gemini SDK
                  Any HTTP API Client
                          ↓
                  Nyro AI Gateway
                (localhost:19530)
                          ↓
        OpenAI · Anthropic · Google · DeepSeek
        MiniMax · xAI · Zhipu · Ollama · ...
    
    

    GitHub: https://github.com/NYROWAY/NYRO


    四、使用场景对比

    场景:把 DeepSeek V3 同时接入 Claude Code 、Codex CLI 、Gemini CLI

    之前的做法

    # 第一步:自己实现或找一个 Anthropic Messages → OpenAI Completions 的协议转换服务
    # 第二步:改 Claude Code 配置
    vim ~/.claude/settings.json
    
    # 第三步:自己实现或找一个 OpenAI Responses → OpenAI Completions 的协议转换服务
    # 第四步:改 Codex CLI 配置
    vim ~/.codex/auth.json
    vim ~/.codex/config.toml
    
    # 第五步:自己实现或找一个 Google GenerateContent → OpenAI Completions 的协议转换服务
    # 第六步:改 Gemini CLI 配置
    vim ~/.gemini/.env
    vim ~/.gemini/settings.json
    
    # 三个工具,三套协议,五个配置文件,格式不同、路径不同,换个模型还得重来一遍。
    

    用 Nyro 的做法

    第一步:Providers → New ,填入 DeepSeek 的 Base URL 和 API Key
    第二步:Routes → New ,设置虚拟模型名,选择 DeepSeek 作为目标
    第三步:Connect → 选择 Claude Code / Codex CLI / Gemini CLI ,点击 Sync
    

    后续更换模型或提供商,只需在路由配置中修改目标即可,客户端无需做任何调整。

    三个工具、三套协议、五个配置文件 → 三步操作、一次同步、客户端零改动。


    五、快速上手

    安装

    macOS (推荐)

    brew tap nyroway/nyro
    brew install --cask nyro
    

    其他平台

    # macOS / Linux
    curl -fsSL https://raw.githubusercontent.com/nyroway/nyro/master/scripts/install/install.sh | bash
    
    # Windows (PowerShell)
    irm https://raw.githubusercontent.com/nyroway/nyro/master/scripts/install/install.ps1 | iex
    

    也可以直接从 GitHub Releases 下载对应平台的安装包,支持 macOS / Windows / Linux ,Intel 和 ARM 全覆盖。

    安装完成后启动应用:

    ![Nyro 应用启动页面.png]( https://raw.githubusercontent.com/shuaijinchao/docs/master/images/Nyro 应用启动页面.png)


    配置

    第一步:创建提供商

    点击 提供商 → 新增提供商,通过快捷选项选择目标提供商。可选供应商已预设基础配置,只需填写名称API Key,点击创建即可。

    如果厂商的 Base URL 需要代理访问,可以在「系统设置 → 代理」中开启代理转发。

    ![Nyro 提供商创建页面.png]( https://raw.githubusercontent.com/shuaijinchao/docs/master/images/Nyro 提供商创建页面.png)

    第二步:创建路由

    完成提供商创建后,点击 路由 → 新增路由,填写名称虚拟模型 ID,选择目标提供商,点击创建即可。

    路由支持以下进阶能力:

    • 负载均衡:配置多个目标供应商时,支持加权轮询和主备分级两种策略,满足不同场景下的调度需求
    • 访问控制:开启后需在 API Key 中创建访问密钥并绑定路由
    • 精确匹配缓存:基于请求级别的精确缓存,命中后由 Nyro 直接代应答(系统设置 → 精确匹配缓存 → 启用)
    • 语义相似缓存:基于语义相似度的缓存,支持本地 Embedding 模型(如 Ollama ),可自定义相似度阈值,命中后支持流式输出(系统设置 → 语义相似缓存 → 启用)

    ![Nyro 路由创建页面.png]( https://raw.githubusercontent.com/shuaijinchao/docs/master/images/Nyro 路由创建页面.png)

    第三步:工具接入

    完成路由创建后,点击 接入 → 工具接入 → 选择工具 → 同步配置

    Nyro 会自动检测本机已安装的 AI 工具,生成对应的配置文件并写入正确路径,原配置自动备份。

    ![Nyro 工具接入页面.png]( https://raw.githubusercontent.com/shuaijinchao/docs/master/images/Nyro 工具接入页面.png)

    同步完成后,打开终端启动对应工具,可以看到模型 ID 已更新为 Nyro 虚拟模型 ID ,Vibe Coding 开始。

    ![Nyro 终端工具运行效果.png]( https://raw.githubusercontent.com/shuaijinchao/docs/master/images/Nyro 终端工具运行效果.png)

    代码接入

    如果你是通过 SDK 或 HTTP 直接调用,点击 接入 → 代码接入 → 选择协议 → 选择路由 → 复制代码,即可获取对应语言的示例代码。

    ![Nyro 代码接入页面.png]( https://raw.githubusercontent.com/shuaijinchao/docs/master/images/Nyro 代码接入页面.png)

    打开终端 -> 粘贴代码,即可进行验证。

    ![Nyro 终端执行示例代码.png]( https://raw.githubusercontent.com/shuaijinchao/docs/master/images/Nyro 终端执行示例代码.png)


    六、服务端部署

    Nyro 除桌面客户端外,同时支持服务器端部署,适合团队共享或生产环境使用。

    GitHub Releases 下载对应平台架构的二进制文件:

    ![Nyro 发布平台架构列表.png]( https://raw.githubusercontent.com/shuaijinchao/docs/master/images/Nyro 发布平台架构列表.png)

    Server 模式(带控制台 + 数据库)

    ./nyro-server-linux-x86_64 \
      --storage-backend postgres \
      --postgres-dsn "postgres://user:pass@host:5432/db"
    

    启动后通过 http://127.0.0.1:19531 访问控制台,通过 http://127.0.0.1:19530 访问接入端点。

    Standalone 模式(纯 YAML 配置,无控制台)

    # config.yaml
    providers:
      - name: openai
        endpoints:
          openai:
            base_url: https://api.openai.com/v1
        api_key: sk-xxx
     
    routes:
      - name: gpt-4o
        vmodel: gpt-4o
        targets:
          - provider: openai
            model: gpt-4o
    
    ./nyro-server-linux-x86_64 --config config.yaml
    

    Standalone 模式不启动控制台,启动后直接通过 http://127.0.0.1:19530 访问接入端点。

    接入验证

    启动后可通过以下方式验证三种协议均已正常工作:

    OpenAI Completions

    curl http://localhost:19530/v1/chat/completions \
      -H "Authorization: Bearer sk-00000000000000000000000000000000" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "gpt-4o",
        "messages": [{"role": "user", "content": "Hello"}]
      }'
    

    Anthropic Messages

    curl http://localhost:19530/v1/messages \
      -H "x-api-key: sk-00000000000000000000000000000000" \
      -H "anthropic-version: 2023-06-01" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "gpt-4o",
        "max_tokens": 1024,
        "messages": [{"role": "user", "content": "Hello"}]
      }'
    

    Google GenerateContent

    curl http://localhost:19530/v1beta/models/gpt-4o:generateContent \
      -H "x-goog-api-key: sk-00000000000000000000000000000000" \
      -H "Content-Type: application/json" \
      -d '{
        "contents": [{"role": "user", "parts": [{"text": "Hello"}]}]
      }'
    

    最后

    Nyro 目前还处于早期阶段,还有很多功能想做、还有很多细节值得打磨。

    如果你在使用过程中遇到了问题,或者对 AI 网关有任何想法和建议,欢迎直接来留言评论或者去 GitHub 提 Issue 都行,我都会认真看并回复。

    如果觉得这个工具对你有帮助,去 GitHub 点个 Star 是对开发者最直接的支持。

    https://github.com/NYROWAY/NYRO

    35 条回复    2026-04-20 21:27:24 +08:00
    Zoozy
        1
    Zoozy  
       20 小时 44 分钟前
    支持一个
    shuaijinchao
        2
    shuaijinchao  
    OP
       20 小时 42 分钟前
    @Zoozy 多谢
    Hansah
        3
    Hansah  
       20 小时 31 分钟前
    那岂不是可以用 codex 接入薅来的几千个 grok key 了
    shuaijinchao
        4
    shuaijinchao  
    OP
       20 小时 21 分钟前
    @Hansah 可以使用负载均衡在同一个路由里面接入多个提供商
    vpjacob
        5
    vpjacob  
       20 小时 9 分钟前
    ai 写的
    ai 时代有必要说这么细吗。
    bgm004
        6
    bgm004  
       20 小时 2 分钟前
    已 Star ,下午试试看
    Ritter
        7
    Ritter  
       19 小时 59 分钟前
    对比 ccswitch 优势是什么
    bgm004
        8
    bgm004  
       19 小时 37 分钟前
    Received message_stop without a current message
    --------------
    刚刚试了一下,拿 nvidia 试的。。。
    shuaijinchao
        9
    shuaijinchao  
    OP
       19 小时 27 分钟前
    @bgm004 多谢
    shuaijinchao
        10
    shuaijinchao  
    OP
       19 小时 18 分钟前
    @Ritter Nyro 是一个 AI Gateway ,ccswitch 是一个工具配置的聚合工具,它们本质的区别 ccswitch 只为工具提供服务,而 Nyro 不仅可以在桌面客户端为个人用户提供协议转换的能力,还具备商业环境下提供生产级别的大规模 Prompt 调度能力。如果只在本地使用 ccswitch 已经做的很好了。
    nohaneww
        11
    nohaneww  
       18 小时 1 分钟前
    对比 CliProxyApi 有什么不同点或者说优势呢
    shuaijinchao
        12
    shuaijinchao  
    OP
       17 小时 42 分钟前
    @nohaneww CliProxyApi 跟楼上那位兄弟说的 ccswitch 在软件属性上差不多,CliProxyApi 的优势是可以通过 oauth 的方式模拟客户端工具将 api 桥接到 CliProxyApi 中,由 CliProxyApi 转发并维护服务端的请求及认证状态,我理解它的定位更偏向客户端代理,而不是 AI Gateway ,所以你会看到 Nyro 中不止提供了最基础的协议转换,还提供了语义缓存、动态负载均衡、指标、审计等功能;考虑到个人、团队的使用场景 Nyro 还提供桌面版、Servser 版本全平台各指令集架构的支持。
    keepfun
        13
    keepfun  
       17 小时 8 分钟前
    为啥不起一个 响亮 和 ai router 关联度高的名字啊 这个太绕口了
    nh1010
        14
    nh1010  
       16 小时 43 分钟前
    暂时没有 oauth
    nohaneww
        15
    nohaneww  
       16 小时 29 分钟前
    @shuaijinchao #12 我下载试试看
    shuaijinchao
        16
    shuaijinchao  
    OP
       16 小时 29 分钟前
    @keepfun 兄弟这是历史原因,Nyro 的 base 是我之前开发的 APIOAK 项目,它的技术栈 Nginx + Rust + OpenResty 就取了每个技术栈一个字母作为项目名字,后来因为 AI Gateway 和 API Gateway 在底层处理逻辑上的差异比较大就全面转向了 Rust ,名字也保留下来了没有变更。
    shuaijinchao
        17
    shuaijinchao  
    OP
       16 小时 28 分钟前
    @nh1010 你好兄弟,oauth 已经在支持中了,预计这周 codex 的 oauth 就会上线。
    shuaijinchao
        18
    shuaijinchao  
    OP
       16 小时 26 分钟前
    @nohaneww 好的,这个项目刚刚开始起步,还有很多不完善的地方,相信有大家的洞见,可以把它变得越来越完善。
    imnpc
        19
    imnpc  
       16 小时 20 分钟前
    没有 OAuth openAI 的 plus 没办法接入了吧
    shuaijinchao
        20
    shuaijinchao  
    OP
       16 小时 17 分钟前
    @imnpc 是的兄弟,功能已经在 PR 阶段了 https://github.com/nyroway/nyro/pull/58 ,合并发版后就可以使用了。
    zhwithsweet
        21
    zhwithsweet  
       15 小时 22 分钟前
    z.ai API URL 和 openAI 不一样的啊,怎么把 z.ai 的服务通过您这个服务 proxy 到 codex ?
    shuaijinchao
        22
    shuaijinchao  
    OP
       15 小时 9 分钟前
    @zhwithsweet 你好兄弟,接入链路是:Codex → Nyro → z.ai
    Codex 只需要把请求地址指向 Nyro ,Nyro 负责中间的协议转换 —— 收到 Codex 发来的请求后,自动转成 z.ai 能识别的格式发出去,拿到响应后再转回 Codex 能理解的格式返回。整个过程对 Codex 完全透明,只要配置一次就好。
    waityan
        23
    waityan  
       15 小时 8 分钟前
    要不搞个群?没看懂怎么用的
    BenCoper
        24
    BenCoper  
       15 小时 7 分钟前
    zhwithsweet
        25
    zhwithsweet  
       15 小时 6 分钟前
    @shuaijinchao 听起来非常 nice ,晚上试试
    shuaijinchao
        26
    shuaijinchao  
    OP
       14 小时 57 分钟前
    @zhwithsweet 好的,有问题欢迎反馈。
    shuaijinchao
        27
    shuaijinchao  
    OP
       14 小时 56 分钟前
    @BenCoper 没有了解过这个项目,看起来项目很不错。
    shuaijinchao
        28
    shuaijinchao  
    OP
       14 小时 55 分钟前
    @waityan 你好兄弟,说的有道理,可以先加我 wx:xincps ,我来拉群。
    jy01264313
        29
    jy01264313  
       14 小时 20 分钟前
    单独买 api token 都非常贵,之前用 gpt-5.3-codex 一天工作日经常 70-100 刀,但是现在基本都订阅 plus 会员,20 刀一个月,便宜很多。
    用了 plus 会员后,怎么配置这些 proxy 的代理呢?
    teaguexiao
        30
    teaguexiao  
       14 小时 5 分钟前
    Claude Code 通过设置 ANTHROPIC_BASE_URL 和 ANTHROPIC_API_KEY 就能接国产模型,但 Codex / Gemini 的协议转换确实麻烦,这个自动同步配置很实用。
    shuaijinchao
        31
    shuaijinchao  
    OP
       14 小时 0 分钟前   ❤️ 1
    @jy01264313 你好兄弟,这个需求正在 PR 中: https://github.com/nyroway/nyro/pull/58 ,合并发版后即可支持。PR 合并后支持把 ChatGPT Plus 账号作为一个供应商接入 Nyro ,创建一条路由,Nyro 会自动把请求转发给对应账号。如果同时订阅了多个 Plus 账号,还可以把它们组成一个账号池,通过负载均衡自动分配请求,多个账号的额度叠加使用。目前一个朋友在通过 Nyro 这样使用,上面的 PR 就来自这个朋友。希望这个回答对你有帮助。
    shuaijinchao
        32
    shuaijinchao  
    OP
       13 小时 54 分钟前
    @teaguexiao 是的兄弟,Claude Code 协议大部分国产模型都已经支持了,但如果通过 Nyro 接入,可以获得负载均衡(将多家厂商组成一个额度池,解决配额限度等问题)、请求审计能力(检查 Agent 每一条请求细节及消耗)、语义缓存(降低调用成本和优化客户端体验)等功能。
    jukanntenn
        33
    jukanntenn  
       11 小时 56 分钟前
    类似项目挺多的,目前在用的 axonhub
    shuaijinchao
        34
    shuaijinchao  
    OP
       11 小时 37 分钟前
    @jukanntenn 社区中确实有很多优秀的项目,找到满足自己需求的产品用下去就可以。
    jy01264313
        35
    jy01264313  
       10 小时 40 分钟前
    @shuaijinchao 好的感谢
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   4274 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 00:07 · PVG 08:07 · LAX 17:07 · JFK 20:07
    ♥ Do have faith in what you're doing.