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

写了个开源小工具 Proxify,帮你统一管理、轻松调用各类大模型 API

  •  
  •   LemonLeon · 3 天前 · 896 次点击

    我是 Poixe AI 团队的技术负责人。花费近两周时间,我们将平台核心网关模块抽象出来,封装成了一个独立的、轻量的开源项目。

    GitHub 仓库:https://github.com/poixeai/proxify

    演示站点:https://proxify.poixe.com/

    home_zh_bg|690x459

    Proxify 是一个开源、轻量、可以自己部署的 AI 接口反向代理

    背景介绍

    场景 1

    在日常开发 AI 应用过程中,一些项目需要同时接入 OpenAI 、Claude ,偶尔还要测试一下 DeepSeek 或者 Gemini 。

    结果就是,代码里管理着一堆不同的 API_BASE_URLAPI_KEY ,每次切换或者新增服务,都得去改配置文件,还得小心翼翼地处理各种网络问题,尤其是那些“只可意会”的网络限制。

    配置一多,代码就显得乱七'八糟,维护起来也心累。我们就在想,有没有一种更优雅的方式?

    场景 2

    一些 AI 模型厂商提供的 API 针对流式响应,存在卡顿,不丝滑的情况,比如 Azure OpenAI 。

    要实现类似打字机的效果,往往需要在应用层(开发者)花费大量的时间精力来做优化,是否有现成的中间层来实现?

    找了一圈,市面上有一些大而全的网关,但感觉有点“杀鸡用牛刀”,而且配置复杂,资源占用严重。

    于是,我们做了一个决定:将我们自己平台的核心网关模块抽象出来,封装成一个独立的、轻量的开源项目,分享给整个社区。

    功能特性

    1. 统一化的接口,告别杂乱配置

    Proxify 的核心功能就是反向代理。你可以通过一个简单的 JSON 文件,集中管理所有上游 API 。

    routes.json 配置文件示例:

    {
      "routes": [
        {
          "name": "OpenAI",
          "path": "/openai",
          "target": "https://api.openai.com"
        },
        {
          "name": "Claude",
          "path": "/claude",
          "target": "https://api.anthropic.com"
        }
        ...
      ]
    }
    

    配置好之后,你的代码调用方式会变得异常清爽:

    https://proxify.poixe.com 可替换为你部署的 Proxify 程序地址

    所有切换逻辑都在 Proxify 的配置里,你的业务代码无需任何改动。更棒的是,这个配置文件支持热加载 ,修改后无需重启服务,立刻生效。

    2. 平滑如丝的流式输出

    直接转发大模型的 SSE 流,部分 AI 模型厂商体验往往不佳,如 Azure 的成段吐字。我们在 Proxify 中内置了同 Poixe AI 网关的流式平滑输出模块

    它能做什么?

    你可以把它想象成一个智能缓冲区。当上游模型突然“爆发”式地吐出一大段文本时,Proxify 会先把它们接住,然后像打字机一样,以平滑、均匀的速度一点点地流式传输给客户端。提升了用户体验。

    同时,针对流式输出,内置了心跳保活机制,定时发送心跳,有效防止了因网络空闲导致的连接意外中断。

    3. 安全与隐私

    代码完全开源,逻辑透明可审计。可自由二次开发、私有化部署,避免供应商锁定。

    你可以把它部署在任何你自己的服务器上。所有请求数据只在你的客户端和你的服务器之间流转,不经过任何第三方,彻底杜绝隐私泄露的风险。

    部署过程也极其简单,我们提供了 Docker 镜像,只需准备好两个配置文件,一行命令即可启动。整个程序由 Golang 编写,性能高,资源占用低,0.5G 内存的小服务器也能跑起来。

    开始使用

    1. 确定目标服务

    浏览 Proxify 支持的 API 列表,找到您需要使用的服务及其对应的代理前缀。

    2. 替换基础 URL

    在您的代码中,将原始 API 的基础 URL 替换为 Proxify 的代理地址,并附加上一步中确定的服务前缀。

    # 原始地址:
    https://api.openai.com/v1/chat/completions
    
    # 替换为:
    http://proxify.poixe.com/openai/v1/chat/completions
    

    3. 发送请求

    一切准备就绪。使用您原有的 API 密钥和请求参数,像往常一样发起请求即可,无需任何其他更改。

    您的 API 密钥、请求头( Header )和请求体( Body )等所有其他部分都保持不变。

    4. 代码示例

    # cURL example using /openai proxy endpoint
    curl https://proxify.poixe.com/openai/v1/chat/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer API_KEY" \
      -d '{
        "model": "gpt-5",
        "messages": [
          {"role": "system", "content": "You are a helpful assistant."},
          {"role": "user", "content": "Hello!"}
        ],
        "stream": false
      }'
    
    // Node.js example using /openai proxy endpoint
    import OpenAI from "openai";
    
    const openai = new OpenAI({ 
        apiKey: "API_KEY", 
        baseURL: "https://proxify.poixe.com/openai/v1",
    });
    
    async function main() {
        const completion = await openai.chat.completions.create({
            model: "gpt-5",
            messages: [
                { role: "system", content: "You are a helpful assistant." },
                { role: "user", content: "Hello!" }
            ],
        });
    
        console.log(completion.choices[0].message.content);
    }
    
    main();
    

    部署教程

    本节仅展示通过 Docker 部署的方式,更多请参考官方 Github 仓库。

    1. 准备工作:配置环境与路由

    Proxify 项目已经内置了 .env.exampleroutes.json.example 示例文件。 您只需复制并稍作修改,即可快速启动。

    2. 开始部署:从 Docker Hub 拉取镜像

    在确认 .envroutes.json 均配置正确后,执行:

    # 1. 从 Docker Hub 拉取最新镜像
    docker pull terobox/proxify:latest
    
    # 2. 查看镜像列表
    docker images
    
    # 3. 运行容器,并挂载配置文件
    docker run -d \
      --name proxify \
      -p 7777:7777 \
      -v $(pwd)/routes.json:/app/routes.json \
      -v $(pwd)/.env:/app/.env \
      --restart=always \
      poixeai/proxify:latest
    
    # 补充:查看日志
    docker logs proxify -f
    
    # 补充:停止容器
    docker stop proxify
    
    # 补充:删除容器
    docker rm proxify
    
    

    写在最后

    欢迎来 GitHub 仓库给我们一个 Star ,或者随时提出你的想法和建议!

    5 条回复    2025-10-26 11:48:23 +08:00
    xianwei7315
        1
    xianwei7315  
       3 天前
    一直在用你们的站,原来在这里宣传呀
    LemonLeon
        2
    LemonLeon  
    OP
       3 天前
    @xianwei7315 V2EX 质量很高,大家素质也高:)
    Pony996
        3
    Pony996  
       3 天前
    对话模型的中转平台意义不大了,newapi 已经占据了大部分市场了,而且没啥难度,现在缺做视频、音频、图片模型的统一平台,就连 newapi 对这方面都支持都不太好,这块市场太缺了,但是这块适配器来也是真的难,没有统一规范,且调用格式及其不统一,有的一个模型分好几种数据格式调用,谁能把这块做起来谁就是下一个 newapi
    LemonLeon
        4
    LemonLeon  
    OP
       3 天前
    @Pony996 是这样的,音频、视频的客户端产品也少。
    Pony996
        5
    Pony996  
       59 分钟前
    @LemonLeon 少就是因为对接太难,有解决方案我立马开干
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2411 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 04:47 · PVG 12:47 · LAX 21:47 · JFK 00:47
    ♥ Do have faith in what you're doing.