mirror of
https://github.com/zhengkai/orca.git
synced 2026-02-04 16:42:26 +08:00
76 lines
2.7 KiB
Markdown
76 lines
2.7 KiB
Markdown
Orca
|
||
======
|
||
|
||
Proxy for [OpenAI API](https://platform.openai.com/docs/api-reference), written by golang
|
||
|
||
解决两个问题:
|
||
|
||
1. 缓存重复请求,节省费用
|
||
2. 内部使用不需要 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 端查询流量/查看每个请求
|