实战二:基于网页端实现与大模型的问答交互
一、需求描述
实战一是使用了python代码实现大模型的问答交互。本次实战为大模型的问答交互设计了一个网页端的交互界面,可以用于开发各种自然语言处理应用,如对话系统开发(智能客服、聊天机器人、问答系统等)。
效果图

二、实现思路
总体思路
- 程序启动时加载模型
- 用户通过网页端的界面输入问题
- 系统调用模型回复问题
- 将模型的回复以界面的形式展示给用户
2.1 导入依赖库
import torch
from modelscope import AutoTokenizer, AutoModel, snapshot_download
import gradio as gr
torch
: PyTorch深度学习框架,用于处理张量和神经网络;modelscope
: 由阿里巴巴达摩院推出的开源模型库;AutoTokenizer
: ModelScope 库的类,分词器应用场景包括自然语言处理(NLP)中的文本分类、信息抽取、问答、摘要、翻译和文本生成等任务。它通过提供一个统一的接口,使得开发者可以快速且方便地加载和使用不同的预训练模型,而不需要深入了解每个模型的细节;AutoModel
: ModelScope 库的类,允许用户在不知道具体模型细节的情况下,根据给定的模型名称或模型类型自动加载相应的预训练模型;snapshotdownload
: ModelScope 提供的一个函数,便于下载模型文件;
gradio
: 用于创建Web界面的库,可以快速构建机器学习模型的演示界面。
2.2 对话框聊天功能
def chat(message, history):response, _history = model.chat(tokenizer, message, history=[])return response
chat
: 定义聊天函数,接收用户消息和聊天历史;response
: 使用模型生成回复,并返回模型的回复。
2.3 加载模型
model_dir = snapshot_download("ZhipuAI/chatglm3-6b", revision="v1.0.0")
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)with torch.no_grad():model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).half().cuda()
model = model.eval()
model_dir
: 模型下载后的存储路径。使用snapshot_download 函数下载指定版本的模型;AutoTokenizer.frompretrained
: 加载预训练的分词器。其中,trustremotecode=True 表示信任远程代码;with torch.nograd()
:表示在这个上下文中不计算梯度,以节省内存和计算资源;AutoModel.frompretrained
:加载预训练的模型,转换为半精度(half),并将模型移至 GPU(cuda)运行;
model.eval()
: 模型设置为评估模式。
2.4 Gradio界面设置
demo = gr.ChatInterface(fn=chat,title="聊天机器人",description="这是一个聊天机器人",examples=["你好", "请介绍一下你自己", "你能做什么"],theme="soft"
)
gr.Interface()
:调用Gradio的Interface类,创建聊天界面;fn=chat
:指定处理函数为chat聊天函数,见2.2;title
:标题为“聊天机器人”;description
:描述为"这是一个聊天机器人";examples
:提供示例问题,为“你好”、“请介绍一下你自己"和"你能做什么”;theme
:使用了"soft"主题。
2.5 启动服务
demo.launch()
demo.launch()
:启动Web服务,默认在本地运行
三、完整代码
import torch
from modelscope import AutoTokenizer, AutoModel, snapshot_download
import gradio as grdef chat(message, history):response, _history = model.chat(tokenizer, message, history=[])return responseif __name__ == "__main__":# 加载模型model_dir = snapshot_download("ZhipuAI/chatglm3-6b", revision="v1.0.0")tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)with torch.no_grad():model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).half().cuda()model = model.eval()# 创建 Gradio 界面demo = gr.ChatInterface(fn=chat,title="聊天机器人",description="这是一个聊天机器人",examples=["你好", "请介绍一下你自己", "你能做什么"],theme="soft")# 启动服务demo.launch()