Merge branch 'master' of https://github.com/acheong08/ChatGPT-to-API
This commit is contained in:
commit
4aac6cf560
@ -3,6 +3,8 @@ Create a fake API using ChatGPT's website
|
||||
|
||||
**API endpoint: http://127.0.0.1:8080/v1/chat/completions.**
|
||||
|
||||
[中文文档(Chinese Docs)](README_CN.md)
|
||||
|
||||
## Help needed
|
||||
- Documentation.
|
||||
|
||||
|
54
README_CN.md
Normal file
54
README_CN.md
Normal file
@ -0,0 +1,54 @@
|
||||
# ChatGPT-to-API
|
||||
创建一个模拟API(通过ChatGPT网页版)。使用AccessToken把ChatGPT模拟成OpenAI API,从而在各类应用程序中使用OpenAI的API且不需要为API额外付费,因为模拟成网页版的使用了,和官方API基本互相兼容。
|
||||
|
||||
本中文手册由 [@BlueSkyXN](https://github.com/BlueSkyXN) 编写
|
||||
|
||||
[英文文档(English Docs)](README.md)
|
||||
|
||||
## 认证和各项准备工作
|
||||
|
||||
在使用之前,你需要完成一系列准备工作
|
||||
|
||||
1. 准备ChatGPT账号,最好的PLUS订阅的,有没有开API不重要
|
||||
2. 完善的运行环境和网络环境(否则你总是要寻找方法绕过)
|
||||
3. Access Token和PUID,下面会教你怎么获取
|
||||
4. 选择一个代理后端或者自行搭建
|
||||
5. 你可以在 https://github.com/BlueSkyXN/OpenAI-Quick-DEV 项目找到一些常用组件以及一些快速运行的教程或程序。
|
||||
|
||||
### 获取PUID
|
||||
|
||||
PUID,就是Personal User ID。这是这个项目中一个特色,其他项目没遇到需要这个的,不过还是弄一下吧。(可能直接访问官网才要,使用或搭建的绕过WAF的代理不需要,目前第三方代理源已经可以自带绕过WAF)
|
||||
|
||||
获取链接是 https://chat.openai.com/api/auth/session 打开这个URL会得到一个JSON,最前面的 ```{"user":{"id":"user-XXXX","name":"XXXX","email":"XXX",``` 这里面的 user.id 就是我要的PUID(至少我的实践是这个,我并没有找到作者具体的说明)(有可能需要PLUS用户权限,作者的说明是用于绕过CloudFlare的速率限制)
|
||||
|
||||
### 获取Access Token
|
||||
目前有多种方法和原理,这部分内容可以参考 [TOKEN中文手册](docs\TOKEN_CN.md)
|
||||
|
||||
## 安装和运行
|
||||
|
||||
作者在[英文版介绍](README.md) 通过GO编译来构建二进制程序,但是我猜测这可能需要一个GO编译环境。所以我建议基于作者的Compose配置文件来Docker运行。
|
||||
|
||||
有关docker的指导请阅读 [DOCKER中文手册](docs\Docker_CN.md)
|
||||
|
||||
安装好Docker和Docker-Compase后,通过Compase来启动
|
||||
|
||||
```docker-compose up -d```
|
||||
|
||||
注意,启动之前你需要配置 yml 配置文件,主要是端口和环境变量,各项参数、用法请参考 [中文指导手册](docs\GUIDE_CN.md)
|
||||
|
||||
最后的API端点(Endpoint)是
|
||||
|
||||
```http://127.0.0.1:8080/v1/chat/completions```
|
||||
|
||||
注意域名/IP和端口要改成你自己的
|
||||
|
||||
### 环境变量
|
||||
- `PUID` - 用户ID
|
||||
- `http_proxy` - SOCKS5 或 HTTP 代理 `socks5://HOST:PORT`
|
||||
- `SERVER_HOST` - (default)比如 127.0.0.1
|
||||
- `SERVER_PORT` - (default)比如 8080 by
|
||||
|
||||
### 文件选项
|
||||
- `access_tokens.json` - 附带AccessToken的Json文件
|
||||
- `proxies.txt` - 代理表 (格式: `USERNAME:PASSWORD:HOST:PORT`)
|
||||
|
28
cases/sider/Sider-Config.md
Normal file
28
cases/sider/Sider-Config.md
Normal file
@ -0,0 +1,28 @@
|
||||
# 这是一个指导你如何在Sider程序中应用本程序的API
|
||||
Sider ,一个浏览器插件
|
||||
|
||||
https://chrome.google.com/webstore/detail/difoiogjjojoaoomphldepapgpbgkhkb
|
||||
|
||||
---
|
||||
# 设置
|
||||
|
||||
打开插件自己的设置页,大概是 chrome-extension://difoiogjjojoaoomphldepapgpbgkhkb/options.html?section=general
|
||||
|
||||
找到通用设置-如何访问 ChatGPT 并在任何地方使用它-OpenAI KEY
|
||||
|
||||
在API KEY中填写你的API管理密码
|
||||
|
||||
模型默认即可,获取不到的(接口不一样)
|
||||
|
||||
URL写你的域名/IP+端口,比如 http://127.0.0.1:8080 ,原先完整URL后面的 /v1 什么的不需要填写
|
||||
|
||||
然后直接就能用了
|
||||
|
||||
示例图
|
||||
|
||||
![Sider-example](./Sider-example.png)
|
||||
|
||||
|
||||
# 不足
|
||||
|
||||
- Sider的策略是开启一个聊天,然后始终重复编辑这个对话,使用了本项目API后会导致一直会新建对话,不会删除或编辑旧的对话,所以你需要自行清理。
|
BIN
cases/sider/Sider-example.png
Normal file
BIN
cases/sider/Sider-example.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 311 KiB |
75
docs/Docker_CN.md
Normal file
75
docs/Docker_CN.md
Normal file
@ -0,0 +1,75 @@
|
||||
# 使用阿里源实现Docker安装
|
||||
|
||||
移除旧的
|
||||
|
||||
```yum remove -y docker docker-common docker-selinux docker-engine```
|
||||
|
||||
安装依赖
|
||||
|
||||
```yum install -y yum-utils device-mapper-persistent-data lvm2```
|
||||
|
||||
配置Docker安装源(阿里)
|
||||
|
||||
```yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo```
|
||||
|
||||
检查可用的Docker-CE版本
|
||||
|
||||
```yum list docker-ce --showduplicates | sort -r```
|
||||
|
||||
安装Docker-CE
|
||||
|
||||
```yum -y install docker-ce```
|
||||
|
||||
运行Docker(默认不运行)
|
||||
|
||||
```systemctl start docker```
|
||||
|
||||
配置开机启动Docker
|
||||
|
||||
```systemctl enable docker```
|
||||
|
||||
# 使用官方二进制包安装Docker-Compase
|
||||
|
||||
下载 Docker-Compose 的二进制文件
|
||||
```sudo curl -L "https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose```
|
||||
|
||||
添加可执行权限
|
||||
|
||||
```sudo chmod +x /usr/local/bin/docker-compose```
|
||||
|
||||
验证 Docker-Compose 是否安装成功
|
||||
|
||||
```docker-compose --version```
|
||||
|
||||
启动容器
|
||||
|
||||
```docker-compose up -d```
|
||||
|
||||
关闭容器
|
||||
|
||||
```docker-compose down```
|
||||
|
||||
查看容器(如果启动了这里没有说明启动失败)
|
||||
|
||||
```docker ps```
|
||||
|
||||
# ChatGPT-TO-API的Docker-Compase文件
|
||||
|
||||
```
|
||||
ports:
|
||||
- '31480:31480'
|
||||
environment:
|
||||
SERVER_HOST: 0.0.0.0
|
||||
SERVER_PORT: 31480
|
||||
ADMIN_PASSWORD: TotallySecurePassword
|
||||
# Reverse Proxy - Available on accessToken
|
||||
#API_REVERSE_PROXY: https://bypass.churchless.tech/api/conversation
|
||||
#API_REVERSE_PROXY: https://ai.fakeopen.com/api/conversation
|
||||
PUID: user-7J4tdvHySlcilVgjFIrAtK1k
|
||||
|
||||
```
|
||||
|
||||
- 这里的ports,左边是外部端口,用于外部访问。右边的Docker端口,需要匹配下面程序设置的监听Port。
|
||||
- 如果参数`API_REVERSE_PROXY`为空,则默认的请求URL为`https://chat.openai.com/backend-api/conversation`,并且需要提供PUID。PUID的获取参考 [README_CN.md](README_CN.md)
|
||||
- 这个密码需要自定义,我们构建请求的时候需要它来鉴权。默认是```TotallySecurePassword```
|
||||
|
124
docs/GUIDE_CN.md
Normal file
124
docs/GUIDE_CN.md
Normal file
@ -0,0 +1,124 @@
|
||||
# 中文指导手册
|
||||
|
||||
本中文手册由 [@BlueSkyXN](https://github.com/BlueSkyXN) 编写
|
||||
|
||||
|
||||
[中文文档(Chinese Docs)](README_CN.md) [英文文档(English Docs)](README.md)
|
||||
|
||||
# 基本配置
|
||||
|
||||
有关docker的指导请阅读 [DOCKER中文手册](docs\Docker_CN.md)
|
||||
|
||||
有关Token的指导请阅读 [TOKEN中文手册](docs\TOKEN_CN.md)
|
||||
|
||||
## Docker-Compase配置
|
||||
|
||||
```
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
app:
|
||||
image: acheong08/chatgpt-to-api
|
||||
container_name: chatgpttoapi
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- '10080:10080'
|
||||
environment:
|
||||
SERVER_HOST: 0.0.0.0
|
||||
SERVER_PORT: 10080
|
||||
ADMIN_PASSWORD: TotallySecurePassword
|
||||
API_REVERSE_PROXY: https://ai.fakeopen.com/api/conversation
|
||||
PUID: user-X
|
||||
|
||||
```
|
||||
- ports 左边是外部端口,右边是内部端口,内部端口要和下面环境变量的Server port一致。
|
||||
- Server host/port:监听配置,默认0000监听某一端口。
|
||||
- ADMIN_PASSWORD:管理员密码,HTTP请求时候需要验证。
|
||||
- API_REVERSE_PROXY:接口的反向代理,具体介绍请看下文的后端代理介绍部分。
|
||||
- PUID: user-X,请看[中文文档(Chinese Docs)](README_CN.md) 的介绍
|
||||
|
||||
其他可以不需要设置,包括预设的AccessToken和代理表、HTTP/S5代理。
|
||||
|
||||
|
||||
# 后端代理
|
||||
目前使用PUID+官网URL的方式不是很可靠,建议使用第三方程序或者网站绕过这个WAF限制。
|
||||
|
||||
|
||||
## 公共代理
|
||||
温馨提醒,由于OpenAI用的强力CloudFlareWAF,所以7层转发是无效的(不过4层在浏览器还是可以的)
|
||||
|
||||
目前根据几个大项目的介绍,我找到了这个介绍页 https://github.com/transitive-bullshit/chatgpt-api#reverse-proxy
|
||||
最后得知主要是这两个
|
||||
|
||||
| Reverse Proxy URL | Author | Rate Limits | Last Checked |
|
||||
|-----------------------------------------------|--------------|--------------------------------|--------------|
|
||||
| https://ai.fakeopen.com/api/conversation | @pengzhile | 5 req / 10 seconds by IP | 4/18/2023 |
|
||||
| https://api.pawan.krd/backend-api/conversation | @PawanOsman | 50 req / 15 seconds (~3 r/s) | 3/23/2023 |
|
||||
|
||||
|
||||
## 自建方案
|
||||
|
||||
我经过测试,发现Pandora的API不行,原因可能是发起对话后的返回值会一次性返回一堆信息导致提取失败。不过我亲测GO-ChatGPT-API是可以的。
|
||||
|
||||
GO-ChatGPT-API项目 https://github.com/linweiyuan/go-chatgpt-api
|
||||
|
||||
我是注释掉 ##- GO_CHATGPT_API_PROXY= 的环境变量、换个外部端口后用Docker-Compase启动即可。然后不需要对这个代理接口做其他操作,包括登录。
|
||||
|
||||
搭建好之后最好测试下基本调用能不能用,下面是一个示例,你需要根据实际情况修改。
|
||||
|
||||
|
||||
```
|
||||
curl http://127.0.0.1:8080/chatgpt/conversation \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"model": "gpt-3.5-turbo",
|
||||
"messages": [{"role": "user", "content": "Say this is a test!"}],
|
||||
"temperature": 0.7
|
||||
}'
|
||||
|
||||
```
|
||||
|
||||
如果得到缺少认证的提示比如 ```{"errorMessage":"Missing accessToken."}``` 就说明已经正常跑了
|
||||
|
||||
# 用例
|
||||
|
||||
## 基本提问
|
||||
```
|
||||
curl http://127.0.0.1:10080/v1/chat/completions \
|
||||
-d '{
|
||||
"model": "text-davinci-002-render-sha",
|
||||
"messages": [{"role": "user", "content": "你是什么模型,是GPT3.5吗"}]
|
||||
}'
|
||||
```
|
||||
|
||||
参考回复如下
|
||||
|
||||
```
|
||||
{"id":"chatcmpl-QXlha2FBbmROaXhpZUFyZUF3XXXXXX","object":"chat.completion","created":0,"model":"gpt-3.5-turbo-0301","usage":{"prompt_tokens":0,"completion_tokens":0,"total_tokens":0},"choices":[{"index":0,"message":{"role":"assistant","content":"是的,我是一个基于GPT-3.5架构的语言模型,被称为ChatGPT。我可以回答各种问题,提供信息和进行对话。尽管我会尽力提供准确和有用的回答,但请记住,我并不是完美的,有时候可能会出现错误或者误导性的答案。"},"finish_reason":null}]}
|
||||
```
|
||||
|
||||
请注意无论什么模型提问都只会显示为模型是GPT3.5T-0301。你在网页版看不到消息记录(可能是删除了),Chat不支持并发提问,你需要token轮询。
|
||||
|
||||
## 提交Token
|
||||
通过文件提交
|
||||
|
||||
```
|
||||
curl -X PATCH \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: TotallySecurePassword" \
|
||||
-d "@/root/access_tokens.json" \
|
||||
http://127.0.0.1:10080/admin/tokens
|
||||
|
||||
```
|
||||
|
||||
直接提交
|
||||
|
||||
```
|
||||
curl -X PATCH \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: TotallySecurePassword" \
|
||||
-d '["eyJhbXXX"]' \
|
||||
http://127.0.0.1:10080/admin/tokens
|
||||
```
|
||||
|
||||
要清理Token直接停用删除Docker容器后重新构建运行容器即可
|
24
docs/TOKEN_CN.md
Normal file
24
docs/TOKEN_CN.md
Normal file
@ -0,0 +1,24 @@
|
||||
# 获取Token
|
||||
---
|
||||
# 参考Pandora项目的作者指导
|
||||
|
||||
https://github.com/pengzhile/pandora
|
||||
|
||||
获取Token的技术原理 https://zhile.io/2023/05/19/how-to-get-chatgpt-access-token-via-pkce.html
|
||||
|
||||
## 第三方接口获取Token
|
||||
http://ai.fakeopen.com/auth
|
||||
|
||||
你需要在这个新的网站的指导下安装浏览器插件,官方说明的有效期是14天。支持谷歌微软等第三方登录。(我谷歌注册的OpenAI就可以用这个)
|
||||
|
||||
## 官网获取 Token
|
||||
https://chat.openai.com/api/auth/session
|
||||
|
||||
打开后是个JSON,你需要先登录官方的ChatGPT网页版。里面有一个参数就是AccessToken。
|
||||
|
||||
# 参考go-chatgpt-api项目的作者指导
|
||||
https://github.com/linweiyuan/go-chatgpt-api
|
||||
|
||||
ChatGPT 登录(返回 accessToken)(目前仅支持 ChatGPT 账号,谷歌或微软账号没有测试)
|
||||
|
||||
```POST /chatgpt/login```
|
Reference in New Issue
Block a user