2023-09-07 18:48:56 +08:00
2023-09-07 18:48:56 +08:00
2023-09-07 18:48:56 +08:00
2023-09-07 18:48:56 +08:00
up
2023-03-29 17:55:21 +08:00
2023-06-13 16:26:25 +08:00
2023-06-13 16:26:25 +08:00
2023-06-13 18:50:34 +08:00

Orca

Proxy for OpenAI API, written by golang

解决两个问题:

  1. 缓存重复请求,节省费用
  2. 内部使用不需要 token走流量监控

访问记录会记在 prometheus 和 elastic可选

注意目前只能代理 chatcompletions 两个接口,其他像 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_USERORCA_ES_PASS 留空

改完后直接敲 make 可运行

注意所有请求会缓存在 static/cache 目录

使用

声明变量 OPENAI_API_KEYOPENAI_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 后可以自己分析了,这是简单的效果截图

Grafana

Kibana

Docker

misc/docker 下有个简单脚本用来构建镜像

先按 部署 一节修改 env.sh,如果使用 elastic tls 需要将 http-ca.crt 替换成你的

make run 是尝试本地运行 docker 镜像

make install 是拷到目标主机上将镜像作为服务后台运行

具体操作需要看一下 Makefile 文件,主要是目录、端口等习惯问题

我运行的方式比较笨拙,只是公司内网跑没考虑太多安全性(比方说 scp env.sh 这个操作),如果有更优雅的方式欢迎指点我,提前感谢

TODO

  • 完善 docker image
  • 内置 web 端查询流量/查看每个请求
Description
No description provided
Readme 719 KiB
Languages
Go 78.9%
Shell 15.4%
Makefile 4.2%
Dockerfile 1.5%