1
0

Merge pull request #39 from BlueSkyXN/master

This commit is contained in:
Antonio Cheong 2023-05-29 22:51:15 +08:00 committed by GitHub
commit 5498f51b88
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 307 additions and 0 deletions

View File

@ -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
View 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`)

View 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后会导致一直会新建对话不会删除或编辑旧的对话所以你需要自行清理。

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 KiB

75
docs/Docker_CN.md Normal file
View 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
View 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
View 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```