Orca
Proxy for OpenAI API, written by golang
解决两个问题:
- 缓存重复请求,节省费用
- 内部使用不需要 token,走流量监控
访问记录会记在 prometheus 和 elastic(可选)
注意目前只能代理 chat 和 completions 两个接口,其他像 fine-tune 什么的还要走长连接,太麻烦了还没搞
为什么要写这个
OpenAI 目前的后台非常惨,一个 org 下好几个帐号,都没法看清每个帐号每天花了多少钱,有一天费用暴增,我都不知道是不是我还是同事消耗的,还是 token 泄漏了,我需要一个更详细、实时的监控。而且我那个程序本来是有缓存的,但是 dev 和 prod 没法共享缓存,所以在想如果走一个统一的代理还能节省每个程序单独写缓存。基于这两点,写了这个代理,目前在公司内部小量使用。
部署
在 server/build 目录,将 sample-env.sh 复制为 env.sh 并修改,
export OPENAI_API_KEY="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"
export ORCA_WEB=":22035"
export ORCA_ES_ADDR="https://10.0.84.49:9200/"
export ORCA_ES_USER=""
export ORCA_ES_PASS=""
ORCA_WEB 是代理对外监听地址,不写 IP 表示监听所有
如果不使用 elastic 可以把 ORCA_ES_USER 和 ORCA_ES_PASS 留空
改完后直接敲 make 可运行
注意所有请求会缓存在 static/cache 目录
使用
声明变量 OPENAI_API_KEY 和 OPENAI_API_BASE,大部分 OpenAI 脚本应该都会认这两个变量
由于 OPENAI_API_KEY 不再是真正的 key(而是上一节 env.sh 里的),建议写个自己好懂的,比如 zhengkai.common,这样能在统计时做区分
export OPENAI_API_KEY="zhengkai.common"
export OPENAI_API_BASE=http://10.0.84.49:22035/v1
prometheus endpoint 在服务启动后 /_metrics 路径
流量 log 打在 prometheus 和 elastic 后可以自己分析了,这是简单的效果截图
Docker
misc/docker 下有个简单脚本用来构建镜像
先按 部署 一节修改 env.sh,如果使用 elastic tls 需要将 http-ca.crt 替换成你的
make run 是尝试本地运行 docker 镜像
make install 是拷到目标主机上将镜像作为服务后台运行
具体操作需要看一下 Makefile 文件,主要是目录、端口等习惯问题
我运行的方式比较笨拙,只是公司内网跑没考虑太多安全性(比方说 scp env.sh 这个操作),如果有更优雅的方式欢迎指点我,提前感谢
TODO
- 完善 docker image
- 内置 web 端查询流量/查看每个请求

