Spaces:
Sleeping
Sleeping
File size: 14,014 Bytes
5626813 e84d2c2 5626813 4cf3c73 5626813 a9952c3 5626813 f9ea9d8 c562c66 5626813 5ceee6c 29783f9 5626813 b88718b 7601bc3 0def5d5 4811365 5dcf6b8 69a0bd8 5dcf6b8 6138a55 5dcf6b8 c562c66 5dcf6b8 6138a55 5dcf6b8 6138a55 7601bc3 6138a55 5dcf6b8 30f89d6 5dcf6b8 c562c66 5dcf6b8 30f89d6 5dcf6b8 c562c66 5dcf6b8 30f89d6 7601bc3 0b80fd7 c4dd783 0b80fd7 7601bc3 5dcf6b8 5ceee6c 5dcf6b8 4811365 5dcf6b8 4811365 5dcf6b8 4811365 5dcf6b8 e456750 5dcf6b8 d47c75d 5dcf6b8 5ceee6c 5dcf6b8 4811365 5dcf6b8 4811365 5dcf6b8 4811365 5dcf6b8 0def5d5 5dcf6b8 c562c66 5dcf6b8 24d50bd 5626813 c562c66 73564ed 5dcf6b8 eab29c1 24d50bd c562c66 73564ed 5dcf6b8 7e780d4 3fe8aa3 4779d2a 7e780d4 24d50bd 3fe8aa3 c562c66 5dcf6b8 24d50bd c562c66 eab29c1 5dcf6b8 eab29c1 c562c66 eab29c1 3fe8aa3 a74348f 5626813 c562c66 a74348f 3fe8aa3 83d5faf 26a05be 83d5faf 91970a2 3fe8aa3 d837e9f c562c66 5626813 d4288bd 5626813 0b80fd7 5dcf6b8 a74348f 5dcf6b8 d4288bd 5626813 c4dd783 5626813 c562c66 5dcf6b8 d4288bd 5dcf6b8 d4288bd 5dcf6b8 d4288bd 5626813 d4288bd 5dcf6b8 d4288bd 5dcf6b8 d4288bd 5dcf6b8 d4288bd c562c66 b203e7b 5626813 b203e7b 30f89d6 14740c0 5dcf6b8 c562c66 5626813 c562c66 5dcf6b8 30f89d6 5dcf6b8 14740c0 1b9a85e 14740c0 be104ff 14740c0 be104ff 14740c0 be104ff 14740c0 c562c66 5626813 6630e83 5dcf6b8 6630e83 b29abdd c562c66 5626813 a74348f 5dcf6b8 7e780d4 c562c66 0a7115d c562c66 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 |
<h1 align="center">川虎 ChatGPT 🐯 Chuanhu ChatGPT</h1>
<div align="center">
<a href="https://github.com/GaiZhenBiao/ChuanhuChatGPT">
<img src="https://user-images.githubusercontent.com/70903329/226267132-e5295925-f53a-4e9d-a221-6099583da98d.png" alt="Logo" height="156">
</a>
<p align="center">
<h3>为ChatGPT API提供了一个轻快好用的Web图形界面</h3>
<p align="center">
<a href="https://github.com/GaiZhenbiao/ChuanhuChatGPT/blob/main/LICENSE">
<img alt="Tests Passing" src="https://img.shields.io/github/license/GaiZhenbiao/ChuanhuChatGPT" />
</a>
<a href="https://gradio.app/">
<img alt="GitHub Contributors" src="https://img.shields.io/badge/Base-Gradio-fb7d1a?style=flat" />
</a>
<a href="https://github.com/GaiZhenBiao/ChuanhuChatGPT/graphs/contributors">
<img alt="GitHub Contributors" src="https://img.shields.io/github/contributors/GaiZhenBiao/ChuanhuChatGPT" />
</a>
<a href="https://github.com/GaiZhenBiao/ChuanhuChatGPT/issues">
<img alt="Issues" src="https://img.shields.io/github/issues/GaiZhenBiao/ChuanhuChatGPT?color=0088ff" />
</a>
<a href="https://github.com/GaiZhenBiao/ChuanhuChatGPT/pulls">
<img alt="GitHub pull requests" src="https://img.shields.io/github/issues-pr/GaiZhenBiao/ChuanhuChatGPT?color=0088ff" />
</a>
<br/>
<em>实时回复 / 无限对话 / 保存对话记录 / 渲染公式代码表格 / 语法高亮 / 联网搜索 / 预设Prompt集 / Chat 任何文件</em>
<br/>
<a href="https://www.bilibili.com/video/BV1mo4y1r7eE"><strong>视频教程</strong></a>
·
<a href="https://huggingface.co/spaces/JohnSmith9982/ChuanhuChatGPT"><strong>在线体验</strong></a>
</p>
<p align="center">
<img alt="Animation Demo" src="https://user-images.githubusercontent.com/51039745/226255695-6b17ff1f-ea8d-464f-b69b-a7b6b68fffe8.gif" />
</p>
</p>
</div>
## 目录
|[使用技巧](#使用技巧)|[安装方式](#安装方式)|[疑难杂症解决](#疑难杂症解决)| [给作者买可乐🥤](#捐款) |
| ---- | ---- | ---- | --- |
## 使用技巧
- 使用System Prompt可以很有效地设定前提条件。
- 使用Prompt模板功能时,选择Prompt模板集合文件,然后从下拉菜单中选择想要的prompt。
- 如果回答不满意,可以使用`重新生成`按钮再试一次
- 对于长对话,可以使用`优化Tokens`按钮减少Tokens占用。
- 输入框支持换行,按`shift enter`即可。
- 部署到服务器:将程序最后一句改成`demo.launch(server_name="0.0.0.0", server_port=<你的端口号>)`。
- 获取公共链接:将程序最后一句改成`demo.launch(share=True)`。注意程序必须在运行,才能通过公共链接访问。
- 在Hugging Face上使用:建议在右上角 **复制Space** 再使用,这样能大大减少排队时间,App反应也会更加迅速。
<img width="300" alt="image" src="https://user-images.githubusercontent.com/51039745/223447310-e098a1f2-0dcf-48d6-bcc5-49472dd7ca0d.png">
## 安装方式
### 本地部署
1. **下载本项目**
```shell
git clone https://github.com/GaiZhenbiao/ChuanhuChatGPT.git
cd ChuanhuChatGPT
```
或者,点击网页右上角的 `Download ZIP`,下载并解压完成后进入文件夹,进入`终端`或`命令提示符`。
<img width="200" alt="downloadZIP" src="https://user-images.githubusercontent.com/23137268/223696317-b89d2c71-c74d-4c6d-8060-a21406cfb8c8.png">
2. **填写API密钥**
以下3种方法任选其一:
<details><summary>1. 在图形界面中填写你的API密钥</summary>
这样设置的密钥会在页面刷新后被清除。
<img width="760" alt="image" src="https://user-images.githubusercontent.com/51039745/222873756-3858bb82-30b9-49bc-9019-36e378ee624d.png"></details>
<details><summary>2. 在直接代码中填入你的 OpenAI API 密钥</summary>
这样设置的密钥会成为默认密钥。在这里还可以选择是否在UI中隐藏密钥输入框。
<img width="525" alt="image" src="https://user-images.githubusercontent.com/51039745/223440375-d472de4b-aa7f-4eae-9170-6dc2ed9f5480.png"></details>
<details><summary>3. 在文件中设定默认密钥、用户名密码</summary>
这样设置的密钥可以在拉取项目更新之后保留。
在项目文件夹中新建这两个文件:`api_key.txt` 和 `auth.json`。
在`api_key.txt`中填写你的API-Key,注意不要填写任何无关内容。
在`auth.json`中填写你的用户名和密码。
```
{
"username": "用户名",
"password": "密码"
}
```
</details>
3. **安装依赖**
```shell
pip install -r requirements.txt
```
如果报错,试试
```shell
pip3 install -r requirements.txt
```
如果还是不行,请先[安装Python](https://www.runoob.com/python/python-install.html)。
如果下载慢,建议[配置清华源](https://mirrors.tuna.tsinghua.edu.cn/help/pypi/),或者科学上网。
4. **启动**
```shell
python ChuanhuChatbot.py
```
如果报错,试试
```shell
python3 ChuanhuChatbot.py
```
如果还是不行,请先[安装Python](https://www.runoob.com/python/python-install.html)。
<br />
如果一切顺利,现在,你应该已经可以在浏览器地址栏中输入 [`http://localhost:7860`](http://localhost:7860) 查看并使用 ChuanhuChatGPT 了。
**如果你在安装过程中碰到了问题,请先查看[疑难杂症解决](#疑难杂症解决)部分。**
### 使用Docker运行
<details><summary>如果觉得以上方法比较麻烦,我们提供了Docker镜像</summary>
#### 拉取镜像
```shell
docker pull tuchuanhuhuhu/chuanhuchatgpt:latest
```
#### 运行
```shell
docker run -d --name chatgpt \
-e my_api_key="替换成API" \
-e USERNAME="替换成用户名" \
-e PASSWORD="替换成密码" \
-v ~/chatGPThistory:/app/history \
-p 7860:7860 \
tuchuanhuhuhu/chuanhuchatgpt:latest
```
注:`USERNAME` 和 `PASSWORD` 两行可省略。若省略则不会启用认证。
#### 查看运行状态
```shell
docker logs chatgpt
```
#### 也可修改脚本后手动构建镜像
```shell
docker build -t chuanhuchatgpt:latest .
```
</details>
### 远程部署
<details><summary>如果需要在公网服务器部署本项目,请阅读该部分</summary>
### 部署到公网服务器
将最后一句修改为
```
demo.queue().launch(server_name="0.0.0.0", server_port=7860, share=False) # 可自定义端口
```
### 用账号密码保护页面
将最后一句修改为
```
demo.queue().launch(server_name="0.0.0.0", server_port=7860,auth=("在这里填写用户名", "在这里填写密码")) # 可设置用户名与密码
```
### 配置 Nginx 反向代理
注意:配置反向代理不是必须的。如果需要使用域名,则需要配置 Nginx 反向代理。
又及:目前配置认证后,Nginx 必须配置 SSL,否则会出现 [Cookie 不匹配问题](https://github.com/GaiZhenbiao/ChuanhuChatGPT/issues/89)。
添加独立配置文件:
```nginx
server {
listen 80;
server_name /域名/; # 请填入你设定的域名
access_log off;
error_log off;
location / {
proxy_pass http://127.0.0.1:7860; # 注意端口号
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade; # Websocket配置
proxy_set_header Connection $connection_upgrade; #Websocket配置
proxy_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
```
修改`nginx.conf`配置文件(通常在`/etc/nginx/nginx.conf`),向http部分添加如下配置:
(这一步是为了配置websocket连接,如之前配置过可忽略)
```nginx
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
```
为了同时配置域名访问和身份认证,需要配置SSL的证书,可以参考[这篇博客](https://www.gzblog.tech/2020/12/25/how-to-config-hexo/#%E9%85%8D%E7%BD%AEHTTPS)一键配置
### 全程使用Docker 为ChuanhuChatGPT 开启HTTPS
如果你的VPS 80端口与443端口没有被占用,则可以考虑如下的方法,只需要将你的域名提前绑定到你的VPS 的IP即可。此方法由[@iskoldt-X](https://github.com/iskoldt-X) 提供。
首先,运行[nginx-proxy](https://github.com/nginx-proxy/nginx-proxy)
```
docker run --detach \
--name nginx-proxy \
--publish 80:80 \
--publish 443:443 \
--volume certs:/etc/nginx/certs \
--volume vhost:/etc/nginx/vhost.d \
--volume html:/usr/share/nginx/html \
--volume /var/run/docker.sock:/tmp/docker.sock:ro \
nginxproxy/nginx-proxy
```
接着,运行[acme-companion](https://github.com/nginx-proxy/acme-companion),这是用来自动申请TLS 证书的容器
```
docker run --detach \
--name nginx-proxy-acme \
--volumes-from nginx-proxy \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
--volume acme:/etc/acme.sh \
--env "DEFAULT_EMAIL=你的邮箱(用于申请TLS 证书)" \
nginxproxy/acme-companion
```
最后,可以运行ChuanhuChatGPT
```
docker run -d --name chatgpt \
-e my_api_key="你的API" \
-e USERNAME="替换成用户名" \
-e PASSWORD="替换成密码" \
-v ~/chatGPThistory:/app/history \
-e VIRTUAL_HOST=你的域名 \
-e VIRTUAL_PORT=7860 \
-e LETSENCRYPT_HOST=你的域名 \
tuchuanhuhuhu/chuanhuchatgpt:latest
```
如此即可为ChuanhuChatGPT实现自动申请TLS证书并且开启HTTPS
</details>
---
## 疑难杂症解决
首先,请先尝试拉取本项目的最新更改,使用最新的代码重试。
点击网页上的 `Download ZIP` 下载最新代码,或
```shell
git pull https://github.com/GaiZhenbiao/ChuanhuChatGPT.git main -f
```
如果还有问题,可以再尝试重装 gradio:
```
pip install gradio --upgrade --force-reinstall
```
很多时候,这样就可以解决问题。
### 常见问题
<details><summary><code>TypeError: Base.set () got an unexpected keyword argument</code></summary>
这是因为川虎ChatGPT紧跟Gradio发展步伐,你的Gradio版本太旧了。请升级依赖:
```
pip install -r requirements.txt --upgrade
```
</details>
<details><summary><code>No module named '_bz2'</code></summary>
> 部署在CentOS7.6,Python3.11.0上,最后报错ModuleNotFoundError: No module named '_bz2'
安装python前先下载 `bzip` 编译环境
```
sudo yum install bzip2-devel
```
</details>
<details><summary><code>openai.error.APIConnectionError</code></summary>
> 如果有人也出现了`openai.error.APIConnectionError`提示的报错,那可能是`urllib3`的版本导致的。`urllib3`版本大于`1.25.11`,就会出现这个问题。
>
> 解决方案是卸载`urllib3`然后重装至`1.25.11`版本再重新运行一遍就可以
参见:[#5](https://github.com/GaiZhenbiao/ChuanhuChatGPT/issues/5)
在终端或命令提示符中卸载`urllib3`
```
pip uninstall urllib3
```
然后,通过使用指定版本号的`pip install`命令来安装所需的版本:
```
pip install urllib3==1.25.11
```
参考自:
[解决OpenAI API 挂了代理还是连接不上的问题](https://zhuanlan.zhihu.com/p/611080662)
</details>
<details><summary><code>在 Python 文件里 设定 API Key 之后验证失败</code></summary>
> 在ChuanhuChatbot.py中设置APIkey后验证出错,提示“发生了未知错误Orz”
参见:[#26](https://github.com/GaiZhenbiao/ChuanhuChatGPT/issues/26)
</details>
<details><summary><code>一直等待/SSL Error</code></summary>
> 更新脚本文件后,SSLError [#49](https://github.com/GaiZhenbiao/ChuanhuChatGPT/issues/49)
>
> 跑起来之后,输入问题好像就没反应了,也没报错 [#25](https://github.com/GaiZhenbiao/ChuanhuChatGPT/issues/25)
>
> ```
> requests.exceptions.SSLError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))
> ```
请将`openai.com`加入你使用的代理App的代理规则。注意不要将`127.0.0.1`加入代理,否则会有下一个错误。
例如,在Clash配置文件中,加入:
```
rule-providers:
private:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt"
path: ./ruleset/ads.yaml
interval: 86400
rules:
- RULE-SET,private,DIRECT
- DOMAIN-SUFFIX,openai.com,你的代理规则
```
Surge:
```
[Rule]
DOMAIN-SET,https://cdn.jsdelivr.net/gh/Loyalsoldier/surge-rules@release/private.txt,DIRECT
DOMAIN-SUFFIX,openai.com,你的代理规则
```
</details>
<details><summary><code>网页提示错误 Something went wrong</code></summary>
> ```
> Something went wrong
> Expecting value: 1ine 1 column 1 (char o)
> ```
出现这个错误的原因是`127.0.0.1`被代理了,导致网页无法和后端通信。请设置代理软件,将`127.0.0.1`加入直连(具体方法见上面“一直等待/SSL Error”部分)。
</details>
<details><summary><code>No matching distribution found for openai>=0.27.0</code></summary>
`openai`这个依赖已经被移除了。请尝试下载最新版脚本。
</details>
## Starchart
[![Star History Chart](https://api.star-history.com/svg?repos=GaiZhenbiao/ChuanhuChatGPT&type=Date)](https://star-history.com/#GaiZhenbiao/ChuanhuChatGPT&Date)
## Contributors
<a href="https://github.com/GaiZhenbiao/ChuanhuChatGPT/graphs/contributors">
<img src="https://contrib.rocks/image?repo=GaiZhenbiao/ChuanhuChatGPT" />
</a>
## 捐款
🐯请作者喝可乐~
<img width="350" alt="image" src="https://user-images.githubusercontent.com/51039745/223626874-f471e5f5-8a06-43d5-aa31-9d2575b6f631.JPG">
|