v1.5.11 Update README.md
Some checks failed
Build Docker Image / main (push) Has been cancelled

This commit is contained in:
lanqian528 2024-10-27 21:55:57 +08:00
parent 2d2ce1c4ed
commit 3d2c35c7d6
4 changed files with 76 additions and 53 deletions

118
README.md
View File

@ -30,7 +30,7 @@
### 最新版本号存于 `version.txt`
> 已完成
### 逆向API 功能
> - [x] 流式、非流式传输
> - [x] 免登录 GPT-3.5 对话
> - [x] GPT-3.5 模型对话(传入模型名不包含 gpt-4则默认使用 gpt-3.5,也就是 text-davinci-002-render-sha
@ -40,17 +40,59 @@
> - [x] 支持 GPTs传入模型名gpt-4-gizmo-g-*
> - [x] 支持 Team Plus 账号(需传入 team account id
> - [x] 上传图片、文件(格式为 API 对应格式,支持 URL 和 base64
> - [x] WebUI[http://127.0.0.1:5005](http://127.0.0.1:5005),不支持登录使用, 网关副产品,因此不做维护)
> - [x] 可作为网关使用,可多机分布部署
> - [x] 多账号轮询,同时支持 AccessToken 和 RefreshToken
> - [x] 多账号轮询,同时支持 `AccessToken``RefreshToken`
> - [x] 请求失败重试,自动轮询下一个 Token
> - [x] Tokens 管理,支持上传、清除
> - [x] 定时使用 RefreshToken 刷新 AccessToken / 每次启动将会全部非强制刷新一次每4天晚上3点全部强制刷新一次。
> - [x] 定时使用 `RefreshToken` 刷新 `AccessToken` / 每次启动将会全部非强制刷新一次每4天晚上3点全部强制刷新一次。
> - [x] 支持文件下载,需要开启历史记录
> - [x] 支持 O1-Preview/mini 模型推理过程输出
> - [x] 支持 `O1-Preview/mini` 模型推理过程输出
### 官网镜像 功能
> - [x] 支持官网原生镜像
> - [x] 后台账号池随机抽取,`Seed` 设置随机账号
> - [x] 输入 `RefreshToken``AccessToken` 直接登录使用
> - [x] 支持 O1-Preview/mini、GPT-4、GPT-4o/mini
> - [x] 敏感信息接口禁用、部分设置接口禁用
> - [x] /login 登录页面,注销后自动跳转到登录页面
> - [x] /?token=xxx 直接登录, xxx 为 `RefreshToken``AccessToken``SeedToken` (随机种子)
> TODO
> - [ ] 暂无,欢迎提 issue
> - [ ] 镜像支持 `GPTs`
> - [ ] 暂无,欢迎提 `issue`
## 逆向API
完全 `OpenAI` 格式的 API ,支持传入 `AccessToken``RefreshToken`,可用 GPT-4, GPT-4o, GPTs, O1-Preview, O1-Mini
```bash
curl --location 'http://127.0.0.1:5005/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{Token}}' \
--data '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Say this is a test!"}],
"stream": true
}'
```
将你账号的 `AccessToken``RefreshToken` 作为 `{{ Token }}` 传入。
也可填写你设置的环境变量 `Authorization` 的值, 将会随机选择后台账号
如果有team账号可以传入 `ChatGPT-Account-ID`,使用 Team 工作区:
- 传入方式一:
`headers` 中传入 `ChatGPT-Account-ID`
- 传入方式二:
`Authorization: Bearer <AccessToken 或 RefreshToken>,<ChatGPT-Account-ID>`
如果设置了 `AUTHORIZATION` 环境变量,可以将设置的值作为 `{{ Token }}` 传入进行多 Tokens 轮询。
> - `AccessToken` 获取: chatgpt官网登录后再打开 [https://chatgpt.com/api/auth/session](https://chatgpt.com/api/auth/session) 获取 `accessToken` 这个值。
> - `RefreshToken` 获取: 此处不提供获取方法。
> - 免登录 gpt-3.5 无需传入 Token。
## Tokens 管理
@ -58,10 +100,24 @@
2. 访问 `/tokens` 或者 `/{api_prefix}/tokens` 可以查看现有 Tokens 数量,也可以上传新的 Tokens ,或者清空 Tokens。
3. 请求时传入 `AUTHORIZATION` 中配置的 `授权码` 即可使用轮询的Tokens进行对话 `AUTHORIZATION` 可以配置多个值,用英文逗号分隔。
3. 请求时传入 `AUTHORIZATION` 中配置的 `授权码` 即可使用轮询的Tokens进行对话
![tokens.png](docs/tokens.png)
## 官网原生镜像
1. 配置环境变量 `ENABLE_GATEWAY``true`,然后运行程序, 注意开启后别人也可以直接通过域名访问你的网关。
2. 在 Tokens 管理页面上传 `RefreshToken``AccessToken`
3. 访问 `/login` 到登录页面
![login.png](docs/login.png)
4. 进入官网原生镜像页面使用
![chatgpt.png](docs/chatgpt.png)
## 环境变量
每个环境变量都有默认值,如果不懂环境变量的含义,请不要设置,更不要传空值,字符串无需引号。
@ -74,17 +130,17 @@
| 请求相关 | CHATGPT_BASE_URL | `https://chatgpt.com` | `https://chatgpt.com` | ChatGPT 网关地址,设置后会改变请求的网站,多个网关用逗号分隔 |
| | PROXY_URL | `http://ip:port`,<br/>`http://username:password@ip:port` | `[]` | 全局代理 URL出 403 时启用,多个代理用逗号分隔 |
| | EXPORT_PROXY_URL | `http://ip:port`<br/>`http://username:password@ip:port` | `None` | 出口代理 URL防止请求图片和文件时泄漏源站 ip |
| | ARK0SE_TOKEN_URL | `https://example.com/token` | `[]` | 获取 Ark0se token 的地址 |
| | USER_AGENTS | `["ua1", "ua2"]` | `[]` | 设置随机使用的 UserAgent 列表(可降低风控),不设置则使用默认的 Chrome 浏览器对应UA |
| 功能相关 | HISTORY_DISABLED | `true` | `true` | 是否不保存聊天记录并返回 conversation_id |
| | POW_DIFFICULTY | `00003a` | `00003a` | 要解决的工作量证明难度,不懂别设置 |
| | RETRY_TIMES | `3` | `3` | 出错重试次数,使用 AUTHORIZATION 会自动轮询下一个账号 |
| | ENABLE_GATEWAY | `true` | `true` | 是否启用网关模式WEBUI |
| | CONVERSATION_ONLY | `false` | `false` | 是否直接使用对话接口如果你用的网关支持自动解决pow和ark0se才启用 |
| | RETRY_TIMES | `3` | `3` | 出错重试次数,使用 `AUTHORIZATION` 会自动随机/轮询下一个账号 |
| | CONVERSATION_ONLY | `false` | `false` | 是否直接使用对话接口,如果你用的网关支持自动解决 `POW` 才启用 |
| | ENABLE_LIMIT | `true` | `true` | 开启后不尝试突破官方次数限制,尽可能防止封号 |
| | UPLOAD_BY_URL | `false` | `false` | 开启后按照 `URL+空格+正文` 进行对话,自动解析 URL 内容并上传,多个 URL 用空格分隔 |
| | CHECK_MODEL | `false` | `false` | 检查账号是否支持传入模型开启后可以稍微避免4o返回3.5内容,但是会增加请求时延,且并不能解决降智问题 |
| | SCHEDULED_REFRESH | `false` | `false` | 是否定时刷新 AccessToken 开启后每次启动程序将会全部非强制刷新一次每4天晚上3点全部强制刷新一次。 |
| | SCHEDULED_REFRESH | `false` | `false` | 是否定时刷新 `AccessToken` 开启后每次启动程序将会全部非强制刷新一次每4天晚上3点全部强制刷新一次。 |
| | RANDOM_TOKEN | `true` | `true` | 是否随机选取后台 `Token` ,开启后随机后台账号,关闭后为顺序轮询 |
| 网关功能 | ENABLE_GATEWAY | `false` | `false` | 是否启用网关模式,开启后可以使用镜像站,但也将会不设防 |
## 部署
### Zeabur 部署
@ -132,42 +188,6 @@ wget https://raw.githubusercontent.com/LanQian528/chat2api/main/docker-compose-w
docker-compose up -d
```
## 使用
1. 在网页使用,直接访问以下地址,仅支持使用免登 GPT-3.5
```
http://127.0.0.1:5005
```
2. 使用 API ,支持传入 AccessToken 或 RefreshToken可用 GPT-4, GPT-4o, GPTs
```bash
curl --location 'http://127.0.0.1:5005/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{OpenAI APIKEY}}' \
--data '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Say this is a test!"}],
"stream": true
}'
```
将你账号的 `AccessToken``RefreshToken` 当作 `OpenAI APIKEY` 传入。
如果有team账号可以传入 `ChatGPT-Account-ID`,使用 Team 工作区:
- 传入方式一:
`headers` 中传入 `ChatGPT-Account-ID`
- 传入方式二:
`Authorization: Bearer <AccessToken 或 RefreshToken>,<ChatGPT-Account-ID>`
如果设置了 `AUTHORIZATION` 环境变量,可以将设置的值当作 `OpenAI APIKEY` 传入进行多 Tokens 轮询。
> - `AccessToken` 获取: chatgpt官网登录后再打开 [https://chatgpt.com/api/auth/session](https://chatgpt.com/api/auth/session) 获取 `accessToken` 这个值。
> - `RefreshToken` 获取: 此处不提供获取方法。
> - 免登录 gpt-3.5 无需传入 Token。
## 常见问题

BIN
docs/chatgpt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 KiB

BIN
docs/login.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

View File

@ -58,22 +58,25 @@ logger.info("-" * 60)
logger.info(f"Chat2Api {version} | https://github.com/lanqian528/chat2api")
logger.info("-" * 60)
logger.info("Environment variables:")
logger.info("------------------------- Security -------------------------")
logger.info("API_PREFIX: " + str(api_prefix))
logger.info("AUTHORIZATION: " + str(authorization_list))
logger.info("CHATGPT_BASE_URL: " + str(chatgpt_base_url_list))
logger.info("AUTH_KEY: " + str(auth_key))
logger.info("ARK0SE_TOKEN_URL: " + str(ark0se_token_url_list))
logger.info("------------------------- Request --------------------------")
logger.info("CHATGPT_BASE_URL: " + str(chatgpt_base_url_list))
logger.info("PROXY_URL: " + str(proxy_url_list))
logger.info("EXPORT_PROXY_URL: " + str(export_proxy_url))
logger.info("---------------------- Functionality -----------------------")
logger.info("HISTORY_DISABLED: " + str(history_disabled))
logger.info("POW_DIFFICULTY: " + str(pow_difficulty))
logger.info("RETRY_TIMES: " + str(retry_times))
logger.info("ENABLE_GATEWAY: " + str(enable_gateway))
logger.info("CONVERSATION_ONLY: " + str(conversation_only))
logger.info("ENABLE_LIMIT: " + str(enable_limit))
logger.info("UPLOAD_BY_URL: " + str(upload_by_url))
logger.info("CHECK_MODEL: " + str(check_model))
logger.info("SCHEDULED_REFRESH: " + str(scheduled_refresh))
logger.info("USER_AGENTS: " + str(user_agents_list))
logger.info("RANDOM_TOKEN: " + str(random_token))
logger.info("------------------------- Gateway --------------------------")
logger.info("ENABLE_GATEWAY: " + str(enable_gateway))
logger.info("-" * 60)