mirror of
https://github.com/lanqian528/chat2api.git
synced 2026-06-19 21:05:19 +08:00
Merge pull request #13 from LanQian528/curl_cffi
feat support arkose service
This commit is contained in:
commit
58ede42839
52
README.md
52
README.md
@ -1,11 +1,34 @@
|
||||
# CHAT2API
|
||||
|
||||
🤖 一个简单的ChatGPT TO API代理,支持GPT3.5、GPT4.0
|
||||
|
||||
🌟 无需账号即可使用免费、无限的GPT3.5
|
||||
|
||||
💥 支持AccessToken使用账号,支持GPT4.0
|
||||
|
||||
🔍 以假乱真,回复格式与真实api完全一致,支持max_tokens,stream等参数,并且支持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' \
|
||||
|
||||
## 高级设置
|
||||
|
||||
默认情况不需要设置,除非你有需求
|
||||
默认情况都不需要设置,除非你有需求
|
||||
|
||||
### 环境变量
|
||||
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user