私有化实现及部署“chatgpt”对话机器人(五)--chatglm的web聊天gradio库快速实现

745 阅读2分钟

本系列将讲述如何从零开始私有化实现及部署类ChatGPT的对话机器人,主要分环境安装,模型现状与选型,基础chatglm模型详解及部署,chatglm不同环境常见bug,前后端对话简单实现,流式对话实现,chatpdf实现,海量本地知识库搜索能力实现,visualglm图片描述模型详解,集成,文本生成图片模型集成,语音识别详解,语音合成详解,语音对话功能集成等等内容。

阅读本系列需要有一定的人工智能算法能力,对nlp算法,语音算法有一定了解,还涉及多方面工程能力知识,如阅读中有任何问题,可以留言,本人会一一解答。

本章节主要讲述如何通过清华大模型chatglm自身开源库里自带的gradio库进行web聊天。

一.gradio库介绍

gradio库是一个不需要任何前端知识,专门提供给人工智能用于功能演示的python库,可以实现,只编写python代码,完成网站建设。
其安装非常简单,只用如下命令:
pip install gradio
然后比如我们现在是一个文本生成模型,那么其输入为文本,输出也是文本,一个demo示例:

import gradio as gr  
class Model:  
def predict(self, input_data):  
return "你好," + input_data  
def get_result(input_data):  
model = Model()  
return model.predict(input_data)  
demo = gr.Interface(  
fn=get_result,  
inputs="text",  
outputs="text"  
)  
demo.launch()  

其效果如下图所示:

img.png 其默认端口是7860,如果有端口冲突,可以修改demo.launch():

demo.launch(server_name="0.0.0.0",server_port=8080)  

如果我们是图片相关,则只需要修改配置项,如下代码:

demo = gr.Interface(  
fn=get_result,  
inputs=gr.Image(shape=(200,200)),  
outputs="image"  
)  

其中gr.Image可以规范显示图片大小,如果不加以控制,继续写成“image”就好。
是不是很简单,只需要简单几行代码,如果我们需要加载模型,在函数里加载就行。

二.gradio库在chatglm使用

如上gradio的示例,我们结合在《私有化实现及部署“chatgpt”对话机器人(三)--chatglm模型详解及部署》中提到的chatglm调用代码。

from transformers import AutoTokenizer, AutoModel  
import gradio as gr  
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)  
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()  
model = model.eval()  
class Model:  
def predict(self, input_data):  
response, history = model.chat(tokenizer, input_data, history=[])  
return response  
def get_result(input_data):  
model = Model()  
return model.predict(input_data)  
demo = gr.Interface(  
fn=get_result,  
inputs="text",  
outputs="text"  
)  
demo.launch(server_name="0.0.0.0",server_port=8080)  

其执行示例效果如下:

img_1.png 在chatglm的开源项目库里本身自带了使用gradio的web案例,执行以下代码就可运行:

python web_demo.py

gradio虽然很简便,作为一个demo演示不错,但是在页面需要修改支持更多功能并集成更多的页面逻辑,肯定不如自制的前后端修改来得方便。

下章将讲述如何通过bootstrap+jquery+flask的方式集成简单的web聊天页面。