From ff58a9c110469aec38a326a244ba4004a944626d Mon Sep 17 00:00:00 2001 From: LanQian <5499636+LanQian528@users.noreply.github.com> Date: Sat, 20 Apr 2024 22:44:06 +0800 Subject: [PATCH] feat support arkose service --- README.md | 52 +++++++++++++++++++++++++++++++++--------- chatgpt/ChatService.py | 33 +++++++++++++++------------ docker-compose.yml | 24 +++++++++++++++---- 3 files changed, 79 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 320e0a7..e14790f 100644 --- a/README.md +++ b/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' \ ## 高级设置 -默认情况不需要设置,除非你有需求 +默认情况都不需要设置,除非你有需求 ### 环境变量 diff --git a/chatgpt/ChatService.py b/chatgpt/ChatService.py index bac13da..8c1b21a 100644 --- a/chatgpt/ChatService.py +++ b/chatgpt/ChatService.py @@ -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)) diff --git a/docker-compose.yml b/docker-compose.yml index 2e82246..d6efca7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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