搞不定 Sora 的 API 乱象,我手搓了一个轻量级网关:Prism

135 阅读3分钟

最近这段时间我一直在折腾 AI 漫剧,主要是在用 Sora、Runway 这些视频生成模型。

但是在对接各个三方渠道的时候,发现过程真的太痛苦了:

  1. 渠道极不稳定:手里买的各种三方渠道,今天这个崩,明天那个维护,必须得备着好几个号。
  2. 接口标准五花八门:有的模型参数叫 prompt,有的叫 text;获取结果的方式更是灾难,有的必须轮询去查,有的又是 Webhook 回调,写业务代码的时候得写一堆 if-else 去适配。
  3. New API 确实强,但难啃:本来想用现成的 New API 也就是 One API 那一套,但研究了一圈发现它的逻辑太庞大,对我这种专注于“视频生成异步任务”的需求来说有点重,而且我也没太研究明白怎么用它完美解决视频生成的复杂回调流程。

一怒之下,我自己动手写了一个轻量级的 AI Gateway —— 取名 Prism (棱镜)。

这就相当于一个“大管家”,我在前端只管发标准指令,底下的脏活累活(轮询、适配、重试)全交给它。目前自己用着还挺顺手,整理了一下分享出来。

Prism 是个啥?

简单说,Prism 是一个 轻量级的 AI 聚合网关

它把 Midjourney、Runway、Sora 这些乱七八糟的接口统一封装起来。无论上游怎么变,我对内调用的接口永远是固定的。

核心解决了什么痛点?

  • 拒绝参数焦虑 (Unified API) 不管上游模型参数多奇葩,Prism 提供一套统一的 API(支持文生图、图生视频等)。我想生成视频,就调这一个接口,剩下的差异 Prism 去抹平。
  • 搞定异步流程 (Async Task Engine) 这是做视频生成最烦人的地方。上游有的要轮询,有的给回调。Prism 内部写了个异步任务引擎,支持 同步等待、轮询、回调 三种模式。你只管调接口,结果准备好了它会告诉你。
  • 多渠道路由 手里有多个渠道账号?它可以自动负载均衡,这个号没额度了自动切下一个,保证我的漫剧生成不断档。
  • 单文件部署 为了省事,我把 React 前端构建产物直接嵌入进了 Go 的二进制文件里。扔到服务器上,改个配置,直接运行,不用折腾 Nginx。

技术栈

既然是自己用,就选了最顺手且性能好的组合:

  • 后端:Go (Gin + GORM),用了 Asynq 做异步任务处理,Redis 做缓存队列。
  • 前端:React 19 + TypeScript + Tailwind CSS 4,看着清爽就行。
  • 基建:MySQL + Redis。

简单的后台预览

做了一个可视化的管理后台,主要用来配置渠道、看任务状态。还顺手内置了 Token 和余额体系,方便以后万一要开放给朋友用,也能计个费。

tongji.png

prism.png

快速把玩

如果你也受够了对接各种 AI 视频接口的苦,或者想搭建一个自己的中转站,可以试试:

1. 环境准备

需要 Go 1.25+ (后端), MySQL 和 Redis。

2. 配置文件

复制一份配置,把数据库连上:

# configs/config.yaml
database:
  host: 127.0.0.1
  dbname: prism
redis:
  addr: 127.0.0.1:6379

3. 编译与运行

我写了个脚本,前后端一起编译成一个二进制文件:

# 编译 (产出 linux amd64 文件)
build.bat

# 拿着 dist 目录下的文件,上传服务器运行即可
chmod +x prism
./prism

服务默认跑在 23523 端口,打开浏览器就能看到后台。

碎碎念

目前这个项目主要是满足我个人做漫剧的 API 转发需求,肯定还有很多不完善的地方。

比起 New API 这种成熟的大项目,Prism 更侧重于 视频/图像生成的异步任务流处理轻量化部署

代码还在持续优化中,功能也在慢慢加。如果你也有类似的需求,欢迎试用!

github.com/EaseeSoft/P…