本系列将讲述如何从零开始私有化实现及部署类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()
其效果如下图所示:
其默认端口是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)
其执行示例效果如下:
在chatglm的开源项目库里本身自带了使用gradio的web案例,执行以下代码就可运行:
python web_demo.py
gradio虽然很简便,作为一个demo演示不错,但是在页面需要修改支持更多功能并集成更多的页面逻辑,肯定不如自制的前后端修改来得方便。
下章将讲述如何通过bootstrap+jquery+flask的方式集成简单的web聊天页面。