diff --git a/README.md b/README.md index 80fb2e7..12acdb7 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - 支持所有类型的接口 (`/v1/*`) - 提供 Prometheus Metrics 统计接口 (`/v1/metrics`) - 按照定义顺序请求 OpenAI 上游 -- 识别 ChatCompletions Stream 请求,针对 Stream 请求使用 5 秒超时。对于其他请求使用60秒超时。 +- 识别 ChatCompletions Stream 请求,针对 Stream 请求使用 5 秒超时。对于其他请求使用 60 秒超时。 - 记录完整的请求内容、使用的上游、IP 地址、响应时间以及 GPT 回复文本 - 请求出错时发送 飞书 或 Matrix 消息通知 @@ -27,37 +27,37 @@ 3. 打开终端,并进入到仓库目录中。 4. 在终端中执行以下命令来编译代码: - + ``` make ``` - + 这将会编译代码并生成可执行文件。 5. 编译成功后,您可以直接运行以下命令来启动负载均衡 API: - + ``` ./openai-api-route ``` - + 默认情况下,API 将会在本地的 8888 端口进行监听。 - + 如果您希望使用不同的监听地址,可以使用 `-addr` 参数来指定,例如: - + ``` ./openai-api-route -addr 0.0.0.0:8080 ``` - + 这将会将监听地址设置为 0.0.0.0:8080。 6. 如果数据库不存在,系统会自动创建一个名为 `db.sqlite` 的数据库文件。 - + 如果您希望使用不同的数据库地址,可以使用 `-database` 参数来指定,例如: - + ``` ./openai-api-route -database /path/to/database.db ``` - + 这将会将数据库地址设置为 `/path/to/database.db`。 7. 现在,您已经成功编译并运行了负载均衡和能力 API。您可以根据需要添加上游、管理上游,并使用 API 进行相关操作。 @@ -68,30 +68,28 @@ ``` Usage of ./openai-api-route: - -add - 添加一个 OpenAI 上游 -addr string 监听地址(默认为 ":8888") + -upstreams string + 上游配置文件(默认为 "./upstreams.yaml") -database string 数据库地址(默认为 "./db.sqlite") - -endpoint string - OpenAI API 基地址(默认为 "https://api.openai.com/v1") -list 列出所有上游 -noauth 不检查传入的授权头 - -sk string - OpenAI API 密钥(sk-xxxxx) ``` +以下是一个 `./upstreams.yaml` 文件配置示例 + +```yaml +- sk: "secret_key_1" + endpoint: "https://api.openai.com/v2" +- sk: "secret_key_2" + endpoint: "https://api.openai.com/v1" + timeout: 30 +``` + +请注意,程序会根据情况修改 timeout 的值 + 您可以直接运行 `./openai-api-route` 命令,如果数据库不存在,系统会自动创建。 - -### 上游管理 - -您可以使用以下命令添加一个上游: - -```bash -./openai-api-route -add -sk sk-xxxxx -endpoint https://api.openai.com/v1 -``` - -另外,您还可以直接编辑数据库中的 `openai_upstreams` 表进行 OpenAI 上游的增删改查管理。改动的上游需要重启负载均衡服务后才能生效。 diff --git a/main.go b/main.go index c6c9eb0..911b7ca 100644 --- a/main.go +++ b/main.go @@ -17,11 +17,8 @@ func main() { dbAddr := flag.String("database", "./db.sqlite", "Database address") upstreamsFile := flag.String("upstreams", "./upstreams.yaml", "Upstreams file") listenAddr := flag.String("addr", ":8888", "Listening address") - addMode := flag.Bool("add", false, "Add an OpenAI upstream") listMode := flag.Bool("list", false, "List all upstream") - sk := flag.String("sk", "", "OpenAI API key (sk-xxxxx)") noauth := flag.Bool("noauth", false, "Do not check incoming authorization header") - endpoint := flag.String("endpoint", "https://api.openai.com/v1", "OpenAI API base") flag.Parse() log.Println("Service starting") @@ -48,26 +45,9 @@ func main() { db.AutoMigrate(&Record{}) log.Println("Auto migrate database done") - if *addMode { - if *sk == "" { - log.Fatal("Missing --sk flag") - } - newUpstream := OPENAI_UPSTREAM{} - newUpstream.SK = *sk - newUpstream.Endpoint = *endpoint - err = db.Create(&newUpstream).Error - if err != nil { - log.Fatal("Can not add upstream", err) - } - log.Println("Successuflly add upstream", *sk, *endpoint) - return - } - if *listMode { - result := make([]OPENAI_UPSTREAM, 0) - db.Find(&result) fmt.Println("SK\tEndpoint") - for _, upstream := range result { + for _, upstream := range upstreams { fmt.Println(upstream.SK, upstream.Endpoint) } return