Merge pull request #13 from LanQian528/curl_cffi

feat support arkose service
This commit is contained in:
LanQian 2024-04-20 22:44:50 +08:00 committed by GitHub
commit 58ede42839
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 79 additions and 30 deletions

View File

@ -1,11 +1,34 @@
# CHAT2API
🤖 一个简单的ChatGPT TO API代理支持GPT3.5、GPT4.0
🌟 无需账号即可使用免费、无限的GPT3.5
💥 支持AccessToken使用账号支持GPT4.0
🔍 以假乱真回复格式与真实api完全一致支持max_tokensstream等参数并且支持token数计算
## Features
> 特点
>
> - [x] 免登录 GPT3.5
> - [x] 使用 AccessToken
> - [x] GPT3.5 对话
> - [x] GPT4.0 对话
> - [x] Tokens 计算
> - [x] Stream 流式传输
> - [x] 配置 PROXY 代理
> - [x] 配置 BASE_URL
> - [x] 重试次数设置
> - [x] ArkoseToken
>
>
> TODO
>
> - [ ] GPT4.0 画图、工具
> - [ ] GPTs
## Deploy
### 直接部署
@ -28,7 +51,7 @@ docker run -d \
lanqian528/chat2api:latest
```
### Docker Compose部署
### (推荐) Docker Compose部署
创建一个新的目录例如chat2api并进入该目录
@ -39,6 +62,12 @@ cd chat2api
在此目录中下载库中的docker-compose.yml文件
```bash
wget https://raw.githubusercontent.com/LanQian528/chat2api/main/docker-compose.yml
```
修改docker-compose.yml文件中的环境变量保存后
```bash
docker-compose up -d
```
@ -57,17 +86,18 @@ curl --location 'http://127.0.0.1:5005/v1/chat/completions' \
## 常见问题
- 错误代码:
- `401`当前IP不支持免登录请尝试更换IP地址或者在环境变量 `PROXY_URL` 中设置代理。
- `403`当前IP地址被 CF 盾拦截请尝试更换IP地址或者在环境变量 `PROXY_URL` 中设置代理。
- `429`当前IP请求1小时内请求超过限制请稍后再试或更换ip。
- `500`:服务器内部错误,请求失败。
- `502`:服务器网关错误,或网络不可用,请尝试更换网络环境。
- 来自`Xiaofei`的礼物:将环境变量设置为 `FREE35_BASE_URL=https://auroraxf.glitch.me/api``FREE35_BASE_URL=https://api.angelxf.cf/api` 可无视CF盾和IP问题。
> - 错误代码:
> - `401`当前IP不支持免登录请尝试更换IP地址或者在环境变量 `PROXY_URL` 中设置代理。
> - `403`当前IP地址被 CF 盾拦截请尝试更换IP地址或者在环境变量 `PROXY_URL` 中设置代理。
> - `429`当前IP请求1小时内请求超过限制请稍后再试或更换ip。
> - `500`:服务器内部错误,请求失败。
> - `502`:服务器网关错误,或网络不可用,请尝试更换网络环境。
## 使用GPT4
#### 目前支持外部服务提供ArkoseToken
> #### 目前支持外部服务提供 ArkoseToken
>
> #### 推荐使用 docker-compose 方式部署, 已内置 Arkose 服务
1. 设置环境变量ARKOSE_TOKEN_URL
@ -78,7 +108,7 @@ curl --location 'http://127.0.0.1:5005/v1/chat/completions' \
- 请求体:
```request body
{
blob: "rFYaxQNEApDlx/Db.KyrE79pAAFBs70CYtbM4pMNUsc7jIkLGdiDs7vziHRGe78bqWXDo0AYyq2A10qIlcTt89lBYXJqCbONC/nD8C199pEZ/c9ocVKKtM27jZQ7fyOpWd9p5qjKeXT4xEGBFpoE3Re1DwdQeijYp7VMJQyw7RYN+IDB1QEx3aKSO6aTI+ivnhw9ztfn/p1SkvAyyOhur/ArF08WQ+rXQpxpttaSQlzMsIwlYbuUUuYE2f9JrQaYG7qip1DKvju111P6wTNy4QVlMXG32VrzaOWh4nmQ0lOcZ1DmN6u2aeJZotffHV2zOOQAqqnParidTbN+qFre2t77ZwBuGKGqLyT8LeOp02GdFwcyw0kkeX+L7vwYAzBpjA5ky0r0X+i8HpzWt8QCyWzEW9kHn9LLCTwg2MOumzjb66Ad4WDe+C1bAcOKuEyXiYh+a1cWZAOdzEuxEg90yCfI7DZR94BsoDR85gEC/Og88i098u5HV7hZZEOQ6J8fmi68FSyPkN7oLCmBsZCMAZqzapNP/MkeIMExrdw7Jf/PtMrZN4bwM56mWfyIJf5h/zXu8PUajVwE9Pj/M5VtB0spZg49JNeHExosVCAB0C0JW+T8vEIwoqiY4pRQ0lbMHTQZFpU2xURTgcgh+m6g1SEYR1FY3de1XnzfiTQq1RTNJPydj5xpt6r6okr8yIJdRhmVXlQI+pS7vi3+Lls2hnpr7L+l1mcUIMPZNBCs3AUFJNpp6SwQjZkPvKggg1p+uS6PdvKRizM9O9+FKc103AhuSia8KTrvU8tWhBhCzIHCD4LNfnkjuBWSdbDttva4AEXUoPuKkQCWaBzq4lQPUIHFOM9HmNe738vVkNdAuOYffxDNegcpIxLVgZGfbgLQ="
"blob": "rFYaxQNEApDlx/Db.KyrE79pAAFBs70CYtbM4pMNUsc7jIkLGdiDs7vziHRGe78bqWXDo0AYyq2A10qIlcTt89lBYXJqCbONC/nD8C199pEZ/c9ocVKKtM27jZQ7fyOpWd9p5qjKeXT4xEGBFpoE3Re1DwdQeijYp7VMJQyw7RYN+IDB1QEx3aKSO6aTI+ivnhw9ztfn/p1SkvAyyOhur/ArF08WQ+rXQpxpttaSQlzMsIwlYbuUUuYE2f9JrQaYG7qip1DKvju111P6wTNy4QVlMXG32VrzaOWh4nmQ0lOcZ1DmN6u2aeJZotffHV2zOOQAqqnParidTbN+qFre2t77ZwBuGKGqLyT8LeOp02GdFwcyw0kkeX+L7vwYAzBpjA5ky0r0X+i8HpzWt8QCyWzEW9kHn9LLCTwg2MOumzjb66Ad4WDe+C1bAcOKuEyXiYh+a1cWZAOdzEuxEg90yCfI7DZR94BsoDR85gEC/Og88i098u5HV7hZZEOQ6J8fmi68FSyPkN7oLCmBsZCMAZqzapNP/MkeIMExrdw7Jf/PtMrZN4bwM56mWfyIJf5h/zXu8PUajVwE9Pj/M5VtB0spZg49JNeHExosVCAB0C0JW+T8vEIwoqiY4pRQ0lbMHTQZFpU2xURTgcgh+m6g1SEYR1FY3de1XnzfiTQq1RTNJPydj5xpt6r6okr8yIJdRhmVXlQI+pS7vi3+Lls2hnpr7L+l1mcUIMPZNBCs3AUFJNpp6SwQjZkPvKggg1p+uS6PdvKRizM9O9+FKc103AhuSia8KTrvU8tWhBhCzIHCD4LNfnkjuBWSdbDttva4AEXUoPuKkQCWaBzq4lQPUIHFOM9HmNe738vVkNdAuOYffxDNegcpIxLVgZGfbgLQ="
}
```
@ -91,7 +121,7 @@ curl --location 'http://127.0.0.1:5005/v1/chat/completions' \
## 高级设置
默认情况不需要设置,除非你有需求
默认情况不需要设置,除非你有需求
### 环境变量

View File

@ -224,7 +224,11 @@ class ChatService:
arkose_dx = arkose.get("dx")
arkose_client = Client()
try:
r2 = await arkose_client.post(self.arkose_token_url, json={"blob": arkose_dx}, timeout=15)
r2 = await arkose_client.post(
url=self.arkose_token_url,
json={"blob": arkose_dx},
timeout=15
)
self.arkose_token = r2.json()['token']
except Exception as e:
raise HTTPException(status_code=403, detail="Arkose required")
@ -327,17 +331,18 @@ class ChatService:
async def send_conversation(self):
url = f'{self.base_url}/conversation'
model = model_proxy.get(self.model, self.model)
r = await self.s.post(url, headers=self.headers, json=self.chat_request, timeout=600)
if r.status_code == 200:
rtext = r.text.split("\n")
return await chat_response(rtext, model, self.prompt_tokens, self.max_tokens)
else:
if "application/json" == r.headers.get("Content-Type", ""):
detail = r.json().get("detail", r.json())
try:
r = await self.s.post(url, headers=self.headers, json=self.chat_request, timeout=600)
if r.status_code == 200:
rtext = r.text.split("\n")
return await chat_response(rtext, model, self.prompt_tokens, self.max_tokens)
else:
detail = r.content
if r.status_code == 403:
raise HTTPException(status_code=r.status_code, detail="cf-please-wait")
raise HTTPException(status_code=r.status_code, detail=detail)
if "application/json" == r.headers.get("Content-Type", ""):
detail = r.json().get("detail", r.json())
else:
detail = r.content
if r.status_code == 403:
raise HTTPException(status_code=r.status_code, detail="cf-please-wait")
raise HTTPException(status_code=r.status_code, detail=detail)
except HTTPException as e:
raise HTTPException(status_code=e.status_code, detail=str(e))

View File

@ -1,14 +1,28 @@
version: '3'
services:
app:
chat2api:
image: lanqian528/chat2api:latest
container_name: chat2api
restart: unless-stopped
ports:
- '5005:5005'
# environment:
environment:
# - AUTHORIZATION=your_first_token, your_second_token
# - FREE35_BASE_URL=https://chat.openai.com/backend-anon, https://auroraxf.glitch.me/api, https://api.angelxf.cf/api
# - HISTORY_DISABLED=false
# - PROXY_URL=your_first_proxy, your_second_proxy
# - FREE35_BASE_URL=https://chat.openai.com/backend-anon
# - CHATGPT_BASE_URL=https://chat.openai.com/backend-api
# - HISTORY_DISABLED=true
- PROXY_URL=your_first_proxy, your_second_proxy
- ARKOSE_TOKEN_URL=http://127.0.0.1:5006/token
# - RETRY_TIMES=3
arkose:
image: lanqian528/funcaptcha_solver:latest
container_name: funcaptcha_solver
restart: unless-stopped
ports:
- '5006:5006'
environment:
- VERSION=2.4.5
- HASH=6c9d6e9be9aa044cc5ce9548b4abe1b0
- PROXY_URL=your_first_proxy