File size: 11,882 Bytes
311aa10
 
c562c66
311aa10
 
 
 
 
 
e5fe5de
13a39e1
f885103
156fd34
 
8f00c3d
c562c66
ace559b
 
30f89d6
ace559b
f9ea9d8
5c0e47d
f5e944f
f9ea9d8
c562c66
 
 
 
83dfb9a
 
9192b22
 
 
 
 
 
782e48a
d4ca6d8
5ceee6c
29783f9
 
 
 
 
 
782e48a
0ab07ca
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
 
 
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
5dcf6b8
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
3fe8aa3
c562c66
a74348f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3fe8aa3
 
 
 
 
83d5faf
 
 
 
 
 
 
 
 
 
 
 
 
 
26a05be
 
83d5faf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91970a2
3fe8aa3
c562c66
 
d4288bd
 
0b80fd7
 
 
 
 
 
 
 
5dcf6b8
 
 
 
a74348f
5dcf6b8
d4288bd
5dcf6b8
c562c66
5dcf6b8
d4288bd
5dcf6b8
d4288bd
 
 
 
5dcf6b8
d4288bd
5dcf6b8
d4288bd
5dcf6b8
 
 
d4288bd
5dcf6b8
d4288bd
 
 
 
 
 
 
5dcf6b8
d4288bd
 
 
 
 
 
 
c562c66
b203e7b
5dcf6b8
b203e7b
30f89d6
14740c0
5dcf6b8
c562c66
 
5dcf6b8
c562c66
5dcf6b8
30f89d6
5dcf6b8
 
 
 
 
14740c0
1b9a85e
 
 
14740c0
 
be104ff
 
 
 
 
 
 
 
14740c0
be104ff
 
14740c0
 
 
 
 
 
be104ff
14740c0
 
c562c66
 
5dcf6b8
6630e83
5dcf6b8
 
 
 
6630e83
 
c562c66
 
5dcf6b8
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
<img height="128" align="left" src="https://user-images.githubusercontent.com/51039745/222689546-7612df0e-e28b-4693-9f5f-4ef2be3daf48.png" alt="Logo">

# 川虎 ChatGPT 🐯 Chuanhu ChatGPT

[![LICENSE](https://img.shields.io/github/license/GaiZhenbiao/ChuanhuChatGPT)](https://github.com/GaiZhenbiao/ChuanhuChatGPT/blob/main/LICENSE)
[![Base](https://img.shields.io/badge/Base-Gradio-fb7d1a?style=flat)](https://gradio.app/)
[![Bilibili](https://img.shields.io/badge/Bilibili-%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B-ff69b4?style=flat&logo=bilibili)](https://www.bilibili.com/video/BV1mo4y1r7eE)

---

为ChatGPT API提供了一个Web图形界面。在Bilibili上[观看视频教程](https://www.bilibili.com/video/BV1mo4y1r7eE/)。也可以在Hugging Face上[在线体验](https://huggingface.co/spaces/JohnSmith9982/ChuanhuChatGPT)。

![Animation Demo](https://user-images.githubusercontent.com/51039745/223148794-f4fd2fcb-3e48-4cdf-a759-7aa463d3f14c.gif)


## 重大更新 🎉🎉🎉

- 像官方ChatGPT那样实时回复
- 无限长度对话
- 改进的保存/加载功能
- 从Prompt模板中选择预设
- 将大段代码显示在代码块中
- 渲染输出中的LaTex公式

## 目录
|[功能](#功能)|[使用技巧](#使用技巧)|[安装方式](#安装方式)|[疑难杂症解决](#疑难杂症解决)|
|  ----  | ----  | ----  | ----  |


## 功能
- [x] 像官方客户端那样支持实时显示回答!
- [x] 重试对话,让ChatGPT再回答一次。
- [x] 优化Tokens,减少Tokens占用,以支持更长的对话。
- [x] 设置System Prompt,有效地设定前置条件
- [x] 保存/加载对话历史记录
- [x] 在图形界面中添加API key
- [x] System Prompt模板功能,从预置的Prompt库中选择System Prompt
- [x] 实时显示Tokens用量

## 使用技巧

- 使用System Prompt可以很有效地设定前提条件
- 对于长对话,可以使用“优化Tokens”按钮减少Tokens占用。
- 如果部署到服务器,将程序最后一句改成`demo.launch(server_name="0.0.0.0", server_port=99999)`。其中`99999`是端口号,应该是1000-65535任意可用端口,请自行更改为实际端口号。
- 如果需要获取公共链接,将程序最后一句改成`demo.launch(share=True)`。注意程序必须在运行,才能通过公共链接访问
- 使用Prompt模板功能时,请先选择模板文件(`.csv`),然后点击载入按钮,然后就可以从下拉菜单中选择想要的prompt了,点击应用填入System Prmpt
- 输入框支持换行,按`shift enter`即可
- 在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 了。

**如果你在安装过程中碰到了问题,请先查看[疑难杂症解决](#疑难杂症解决)部分。**

<details><summary><h3>或者,使用Docker 运行</h3></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)一键配置

</details>

## 疑难杂症解决

首先,请尝试拉取本项目的最新更改,使用最新的代码重试。

点击网页上的 `Download ZIP` 下载最新代码,或
```shell
git pull https://github.com/GaiZhenbiao/ChuanhuChatGPT.git main -f
```

如果还有问题,可以再尝试重装 gradio:

```
pip install gradio --upgrade --force-reinstall
```

很多时候,这样就可以解决问题。

<details><summary><h3><code>No module named '_bz2'</code></h3></summary>

> 部署在CentOS7.6,Python3.11.0上,最后报错ModuleNotFoundError: No module named '_bz2'

安装python前先下载 `bzip` 编译环境

```
sudo yum install bzip2-devel
```
</details>

<details><summary><h3><code>openai.error.APIConnectionError</code></h3></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><h3>在 Python 文件里 设定 API Key 之后验证失败</h3></summary>

> 在ChuanhuChatbot.py中设置APIkey后验证出错,提示“发生了未知错误Orz”

参见:[#26](https://github.com/GaiZhenbiao/ChuanhuChatGPT/issues/26)
</details>

<details><summary><h3>一直等待/SSL Error</h3></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><h3>网页提示错误 Something went wrong</h3></summary>

> ```
> Something went wrong
> Expecting value: 1ine 1 column 1 (char o)
> ```

出现这个错误的原因是`127.0.0.1`被代理了,导致网页无法和后端通信。请设置代理软件,将`127.0.0.1`加入直连。
</details>

<details><summary><h3><code>No matching distribution found for openai>=0.27.0</code></h3></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">