mirror of
https://github.com/zhengkai/orca.git
synced 2025-12-19 18:32:23 +08:00
readme
This commit is contained in:
73
README.md
73
README.md
@@ -1,8 +1,75 @@
|
||||
Orca
|
||||
======
|
||||
|
||||
openai api proxy
|
||||
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 端查询流量/查看每个请求
|
||||
|
||||
1
misc/db/.gitignore
vendored
1
misc/db/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
*.sql
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
DB="orca"
|
||||
|
||||
DIR="$(dirname "$(readlink -f "$0")")" && cd "$DIR" || exit 1
|
||||
|
||||
mkdir -p table
|
||||
|
||||
for T in $(echo "SHOW TABLES" | mysql "$DB" --skip-column-names); do
|
||||
|
||||
/usr/bin/mysqldump \
|
||||
--default-character-set=binary \
|
||||
--add-drop-database \
|
||||
--add-drop-table \
|
||||
--add-locks \
|
||||
--hex-blob \
|
||||
--quick \
|
||||
--skip-dump-date \
|
||||
"${DB}" "${T}" > "table/${T}.sql"
|
||||
done
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
DB="orca"
|
||||
|
||||
DIR="$(dirname "$(readlink -f "$0")")" && cd "$DIR" || exit 1
|
||||
|
||||
/usr/bin/mysqldump \
|
||||
--default-character-set=binary \
|
||||
--add-drop-database \
|
||||
--add-drop-table \
|
||||
--add-locks \
|
||||
--hex-blob \
|
||||
--quick \
|
||||
--skip-dump-date \
|
||||
--databases "$DB" \
|
||||
> "${DB}-full.sql"
|
||||
@@ -1,18 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
DB="orca"
|
||||
|
||||
DIR="$(dirname "$(readlink -f "$0")")" && cd "$DIR" || exit 1
|
||||
|
||||
/usr/bin/mysqldump \
|
||||
--no-data \
|
||||
--default-character-set=binary \
|
||||
--add-drop-database \
|
||||
--add-drop-table \
|
||||
--add-locks \
|
||||
--hex-blob \
|
||||
--quick \
|
||||
--skip-dump-date \
|
||||
--databases "$DB" \
|
||||
| sed 's# AUTO_INCREMENT=[0-9]*##g' \
|
||||
> "${DB}-struct.sql"
|
||||
@@ -1,6 +0,0 @@
|
||||
CREATE USER 'orca'@'172.17.0.0/24' IDENTIFIED WITH caching_sha2_password BY 'orca';
|
||||
GRANT USAGE ON *.* TO 'orca'@'172.17.0.0/24';
|
||||
ALTER USER 'orca'@'172.17.0.0/24' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, LOCK TABLES ON `orca`.* TO 'orca'@'172.17.0.0/24';
|
||||
ALTER USER 'orca'@'172.17.0.0/24' ;
|
||||
@@ -1,6 +0,0 @@
|
||||
CREATE USER 'orca'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'orca';
|
||||
GRANT USAGE ON *.* TO 'orca'@'localhost';
|
||||
ALTER USER 'orca'@'localhost' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, LOCK TABLES ON `orca`.* TO 'orca'@'localhost';
|
||||
ALTER USER 'orca'@'localhost' ;
|
||||
BIN
misc/img/grafana.png
Normal file
BIN
misc/img/grafana.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 90 KiB |
BIN
misc/img/kibana.png
Normal file
BIN
misc/img/kibana.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 295 KiB |
@@ -5,5 +5,5 @@
|
||||
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="elastic"
|
||||
export ORCA_ES_PASS="a0iKg{Q,}!7T95Z"
|
||||
export ORCA_ES_USER=""
|
||||
export ORCA_ES_PASS=""
|
||||
|
||||
Reference in New Issue
Block a user