当前位置: 首页 > news >正文

实战二:基于网页端实现与大模型的问答交互

​一、需求描述

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

效果图

​二、实现思路

总体思路

  1. 程序启动时加载模型
  2. 用户通过网页端的界面输入问题
  3. 系统调用模型回复问题
  4. 将模型的回复以界面的形式展示给用户

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()

四、效果展示

在这里插入图片描述

http://www.xdnf.cn/news/1007785.html

相关文章:

  • 虚拟 DOM Diff 算法详解
  • UE5场景漫游——鼠标控制旋转与第一人称漫游
  • 51la批量创建站点繁琐?悟空统计一站式高效解决方案
  • Spring Data REST技术详解与应用实践
  • HALCON第四讲->几何变换
  • SX1268低功耗sub-1g芯片支持lora和GFSK调制
  • MATLAB griddatan 函数支持的插值方法MATLAB 的 griddatan 函数主要支持以下几种插值方法
  • 关于等效偶极子的概念理解
  • QT5 隐藏控制台窗口方法2025.6.12
  • 【Java面试笔记:实战】41、Java面试核心考点!AQS原理及应用生态全解析
  • FastDFS 分布式文件系统
  • 设计一个类似支付宝或微信支付的在线支付系统
  • 【ubuntu驱动安装】安装nvidia驱动和cuda环境
  • 【洛杉矶实况】这里正在发生什么?
  • shell脚本不同执行方式的区别
  • Python 100个常用函数全面解析
  • python实现层次分析法(AHP)权重设置与稳健性检验完整解决方案
  • 如何学习VBA:3.3.4从初学到精进的方法
  • 2025虚幻游戏逆向工程解包尝试
  • 无人机避障——感知篇(Orin nx采用zed2双目相机进行Vins-Fusion定位,再通过位姿和深度图建图完成实时感知)
  • MyBatisPlus框架
  • 偏移二进制码
  • CANopen转EtherCAT网关,从CANopen伺服到EtherCAT主站的通信
  • 如何选择适合的微机消谐器?
  • python35个保留字定义与用法(AI生成,待学完后勘误)
  • 美团NoCode的Database 使用指南
  • 金蝶K3 ERP 跨网段访问服务器卡顿问题排查和解决方法
  • 什么是渗透测试,对网站安全有哪些帮助?
  • 无感无刷电机的过零点检测电路多图对比
  • 【精华】双向心跳交互革命:AG-UI协议重塑AI Agent前端开发范式