• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Parsifal
V2EX  ›  程序员

分享一个自己做的 AI API 中转服务, Vercel 部署,不用服务器

  •  
  •   Parsifal · 3 days ago · 1835 views

    一直在 V 站潜水,现在做了个只需要 Vercel 部署的轻量级 AI API 中转,大佬们瞅瞅!

    我的核心痛点:

    • 不想搞 VPS ,只想用 Vercel 部署
    • 能随时随地加 API Key 给我的 Hermes 用

    为啥不用现有的:

    • OpenRouter 是 SaaS ,按量付费,长期用不划算
    • OneAPI / new-api 要自己搞服务器,还得维护
    • 我这个就是个纯中转层,轻量、免费、够用

    AI Relay — 基于 Vercel Edge Runtime 的轻量级 AI API 中转

    🔗 GitHub: https://github.com/MoyuFamily/ai-relay

    主要功能:

    • 多 Key 轮换 + 429 自动退避
    • 多 Provider 路由( OpenAI / Claude / DeepSeek / MiMo / 自定义)
    • 熔断器,Provider 挂了自动切换
    • 管理后台,手机也能操作
    • 临时 API Key ( HMAC 签名,用完即焚)
    • 完全兼容 OpenAI SDK ,改个 base_url 就行

    部署: 点击 Deploy 按钮 → 填 3 个 Key → 等 2 分钟 → 搞定


    管理后台截图:

    运行概览

    密钥管理

    辅助工具


    整个项目基本都是由 Hermes 的 4 个 Agent 完成的,从调研、立项、开发到迭代、开源,绝大部分都是 Agent 自己做的,我只是提供权限和要求。

    希望能给大家带来方便,有问题直接提 Issue~

    Supplement 1  ·  21h 55m ago
    ## [2.3.2] - 2026-05-26

    ### Added
    - **Key 添加测试**:单个 Key 输入时支持"测试并添加",提交前自动验证 Key 是否可用。

    ### Fixed
    - **移动端 UI 溢出**:修复 Token 趋势图表 Provider 筛选器和 Fallback Chain 在窄屏下的溢出问题。
    - **名称截断**:Provider 名称限制 8 字符,Model Select 在窄屏自适应截断,避免遮挡。

    ### Changed
    - Provider 名称截断策略优化。
    - 模型选择器最小宽度保障。

    ## [2.3.1] - 2026-05-26

    ### Changed
    - 更新 README 和 Homepage 版本号至 v2.3.0 。
    - 补充 v2.3.0 新功能到文档特性列表:Provider 引导、模型别名管理、优先级规则、用量监控、上游模型发现。
    - 更新 Admin 后台功能列表,体现最新能力。

    ## [2.3.0] - 2026-05-26

    ### Added
    - 新增 Provider CRUD 引导流程( Stepper 三步式:选模板 → 配密钥 → 测试保存),支持 8 个预置模板和自定义 Provider 。
    - 新增模型别名管理能力,支持 CSV 批量导入导出、内联编辑、模型可见性隐藏。
    - 新增优先级规则编辑器,支持拖拽排序、条件组合( AND )和冲突检测(重叠警告 / 重复报错 / 阴影规则)。
    - 新增用量监控仪表盘,支持日期筛选、Provider 维度过滤和用量趋势图表。
    - 新增上游 Provider 模型自动发现能力,可从上游 API 拉取可用模型列表并暂存确认后入库。
    - 新增 Cron 巡检健康探测与用量定时聚合任务。
    - 新增 Provider API Key 长度校验。
    - 新增 Fallback 循环依赖检测与运行时防护,避免配置错误导致无限循环。

    ### Fixed
    - 修复 Provider 弹窗滚动穿透问题。
    - 修复 Vercel Hobby 计划下 Cron 调度频率不兼容问题。
    - 修复 KV 用量统计在未配置限额时的冗余计数开销。
    - 修复 Provider 删除失败问题 (#7)。

    ### Changed
    - 优化部署指南文档结构和内容。
    - 优化 Setup Wizard 在缺失环境变量配置时的引导提示。
    19 replies    2026-05-26 18:09:07 +08:00
    MangoCloud
        1
    MangoCloud  
       2 days ago
    部署后报错了,点击密钥管理,Failed to fetch provider configuration
    不知道怎么加服务商的 key ,方便的话可 v 或者其他方式联系下
    geeek
        2
    geeek  
       2 days ago
    @MangoCloud 要在 vercel 里新增个 Storage 选择 Upstash 免费的 Redis ,关联到 ai-relay 后再重新部署就好了
    Parsifal
        3
    Parsifal  
    OP
       2 days ago
    @MangoCloud 是的是的,不好意思,前面写漏了使用说明,需要自己到 Vercel 后台创建下 Storage ,然后 connect 到这个项目。
    Parsifal
        4
    Parsifal  
    OP
       2 days ago
    @geeek 👍
    Parsifal
        5
    Parsifal  
    OP
       2 days ago
    oakgeol
        6
    oakgeol  
       2 days ago
    有没有可能加上一个冷却机制,部分 api 限流一分钟多少次的,这样可以设定冷却期内调用其余的 api
    Parsifal
        8
    Parsifal  
    OP
       2 days ago
    @oakgeol 这个场景是啥?目前的策略是,你配置了 fallback ,如果失败了,自然会用 fallback 里的渠道,应用方 Agent 是无感知的。
    oakgeol
        9
    oakgeol  
       2 days ago
    @Parsifal 只能算是一个很小的很小的 case 吧 在 fallback 的基础之上,冷却期每个 api 轮换分担压力
    Parsifal
        10
    Parsifal  
    OP
       2 days ago
    @oakgeol 哦,是类似 CPA 里那种不同策略?一个会话一个 API Key 死命蹬完,还是一个会话请求随机分配到不同 API Key 这种的?
    oakgeol
        11
    oakgeol  
       2 days ago
    @Parsifal 对的对的,有时候有的 api 你连续的用他会限制你的用量,如果随机分配,每个都有自己的冷却休息时间,api 就不会限制你了,类似 Antigravity 你如果用它的 flash 用的太狠了不光是五小时限制,还会 Weekly limit 。有些 API 也是类似的这种情况如果说你轮换使用随机使用,这样的话都达不到他们的这种单位时间内的限制。可能这个需求可能非常小众吧。
    Parsifal
        12
    Parsifal  
    OP
       2 days ago
    @oakgeol 了解,这个需求,产品 agent 有规划,之前他定位了 P2 ,所以没有做在这次迭代里。后面迭代我们看看。
    MangoCloud
        13
    MangoCloud  
       1 day ago
    部署好了,不过连接 v2 上推广的中转站,不知道是不是网络不通
    1. ❌ 验证失败:API Key 无效: Timeout (10s) (Status: unknown)
    2. 添加中转站到供应商的时候,模型要一个加么,能不能自动获取导入
    Parsifal
        14
    Parsifal  
    OP
       1 day ago
    @MangoCloud 1 、可能是测试的模型不支持,可以手动选一下; 2 、在做了
    Parsifal
        15
    Parsifal  
    OP
       1 day ago
    @MangoCloud 更新了
    Parsifal
        16
    Parsifal  
    OP
       1 day ago
    v2.3.0 — UX 四迭代全量上线 Latest
    🚀 新功能
    Provider CRUD 引导流程:Stepper 三步式(选模板 → 配密钥 → 测试保存),支持 8 个预置模板和自定义 Provider
    模型别名管理:CSV 批量导入导出、内联编辑、模型可见性隐藏
    优先级规则编辑器:拖拽排序、条件组合( AND )、冲突检测(重叠警告 / 重复报错 / 阴影规则)
    用量监控仪表盘:日期筛选、Provider 维度过滤、用量趋势图表
    上游模型自动发现:从上游 API 拉取可用模型列表,暂存确认后入库
    Cron 巡检:健康探测与用量定时聚合
    Provider API Key 长度校验
    🔧 修复
    Provider 弹窗滚动穿透
    Vercel Hobby 计划 Cron 调度频率不兼容
    KV 用量统计冗余计数开销
    Provider 删除失败 (#7)
    📐 优化
    部署指南文档结构优化
    Setup Wizard 缺失配置引导增强
    Fallback 循环依赖检测与运行时防护
    breakplus
        17
    breakplus  
       1 day ago
    添加 key ,提示保存成功,但是密钥管理里面始终显示 0 ,没有添加成功
    RELAY_ADMIN_KEY
    用于访问后台管理页。
    通过
    RELAY_API_KEY
    用于调用 Relay API 。
    通过
    Upstash Redis
    Upstash Redis 已配置,用量统计与配额可持久化。
    通过
    服务商密钥
    至少一个上游服务商有可用密钥。
    未通过
    breakplus
        18
    breakplus  
       1 day ago
    @breakplus 不好意思看错了,是需要点击服务商添加 key
    Parsifal
        19
    Parsifal  
    OP
       1 day ago
    @breakplus 是的,目前给服务商加 key 有两个方法:
    1 、就是在密钥配置列表里,选择你需要的服务商,然后先测试,提示该 key 可用后,点添加,就可以添加成功
    2 、辅助功能里也可以添加,把自定义 key 勾上,然后也是先测试,提示可用后,点添加

    然后就是最好配合 fallback 使用,如果你有多个可用的不同供应商 api key 的话。如果同个供应商的,直接添加多个 key 进去,也会走用完自动切到下一个的逻辑。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2757 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 15:34 · PVG 23:34 · LAX 08:34 · JFK 11:34
    ♥ Do have faith in what you're doing.