基于 `Gradio` 的聊天机器人界面
这段代码实现了一个基于 Gradio 的聊天机器人界面,并使用了 langchain 和 ChatGLM 作为后端模型支持。以下是对代码的详细解释:
1. 导入必要的库
import gradio as grfrom langchain_community.llms import ChatGLM
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
gradio:一个用于快速构建交互式界面的 Python 库,适合展示机器学习或 AI 模型。langchain_community.llms.ChatGLM:这是langchain提供的一个接口,用于与本地部署的 ChatGLM 模型进行交互。ConversationChain:langchain中的一个链式结构,用于管理对话流程。ConversationBufferMemory:langchain提供的记忆模块,用于保存对话历史记录。
2. 定义 ChatGLM 模型的服务地址
CHATGLM_URL = "http://127.0.0.1:8001"
- 这里指定了 ChatGLM 模型的服务地址为本地运行的服务(
http://127.0.0.1:8001)。 - 假设你已经在本地启动了一个 ChatGLM 模型服务,它通过 HTTP 接口提供推理能力。
3. 初始化聊天机器人
def init_chatbot():llm = ChatGLM(endpoint_url=CHATGLM_URL,max_token=80000,history=[],top_p=0.9,model_kwargs={"sample_model_args": False},)global CHATGLM_CHATBOTCHATGLM_CHATBOT = ConversationChain(llm=llm, verbose=True,memory=ConversationBufferMemory())return CHATGLM_CHATBOT
- 功能:
- 创建并初始化一个聊天机器人实例。
- 关键点:
ChatGLM:endpoint_url:指定 ChatGLM 模型的服务地址。max_token:设置最大生成 token 数量(这里设置为 80000)。history:初始对话历史为空列表。top_p:控制生成文本的多样性,值越接近 1 越倾向于选择高概率词汇。model_kwargs:传递额外的模型参数,这里禁用了sample_model_args。
ConversationChain:- 将
ChatGLM模型封装到ConversationChain中,用于管理对话逻辑。 verbose=True:启用调试信息输出。memory=ConversationBufferMemory():使用缓冲区记忆来保存对话历史。
- 将
- 全局变量:
- 使用
global CHATGLM_CHATBOT将聊天机器人实例存储在全局变量中,以便后续函数可以访问。
- 使用
4. 定义聊天逻辑
def chatglm_chat(message, history):ai_message = CHATGLM_CHATBOT.predict(input=message)return ai_message
- 功能:
- 处理用户输入的消息,并调用 ChatGLM 模型生成回复。
- 关键点:
CHATGLM_CHATBOT.predict(input=message):- 调用
ConversationChain的predict方法,将用户输入的消息传递给模型。 - 模型会根据当前对话历史生成回复。
- 调用
- 返回值:
- 返回模型生成的回复消息。
5. 启动 Gradio 界面
def launch_gradio():demo = gr.ChatInterface(fn=chatglm_chat,title="ChatBot (Powered by ChatGLM)",chatbot=gr.Chatbot(height=600),)demo.launch(share=True, server_name="0.0.0.0")
- 功能:
- 使用
Gradio构建一个聊天界面,并启动服务。
- 使用
- 关键点:
gr.ChatInterface:fn=chatglm_chat:指定处理用户输入的函数。title="ChatBot (Powered by ChatGLM)":设置界面标题。chatbot=gr.Chatbot(height=600):定义聊天窗口的高度为 600 像素。
demo.launch:share=True:启用 Gradio 的分享功能,生成一个公共链接,方便他人访问。server_name="0.0.0.0":监听所有网络接口,允许外部设备访问(例如在同一局域网中的其他设备)。
6. 主程序入口
if __name__ == "__main__":# 初始化聊天机器人init_chatbot()# 启动 Gradio 服务launch_gradio()
- 功能:
- 当脚本直接运行时,执行以下操作:
- 调用
init_chatbot()初始化聊天机器人。 - 调用
launch_gradio()启动 Gradio 界面。
- 调用
- 当脚本直接运行时,执行以下操作:
工作流程总结
- 初始化阶段:
- 加载 ChatGLM 模型,并将其封装到
ConversationChain中。 - 配置对话历史记忆模块。
- 加载 ChatGLM 模型,并将其封装到
- 用户交互阶段:
- 用户通过 Gradio 界面输入消息。
- 调用
chatglm_chat函数处理用户输入,并生成模型回复。 - 回复内容显示在界面上。
- 服务启动:
- Gradio 界面启动后,用户可以通过浏览器访问并与聊天机器人交互。
依赖项和运行环境
- Python 库:
gradio:用于构建界面。langchain和langchain_community:用于集成 ChatGLM 模型。
- ChatGLM 模型服务:
- 需要在本地运行 ChatGLM 模型服务,并确保其地址为
http://127.0.0.1:8001。
- 需要在本地运行 ChatGLM 模型服务,并确保其地址为
- 运行命令:
python your_script.py
改进方向
- 错误处理:
- 在
chatglm_chat函数中添加异常捕获,防止模型服务不可用时导致程序崩溃。
- 在
- 多语言支持:
- 扩展界面以支持多语言输入和输出。
- 性能优化:
- 如果模型响应较慢,可以考虑异步调用或缓存机制。
相关文章:
基于 `Gradio` 的聊天机器人界面
这段代码实现了一个基于 Gradio 的聊天机器人界面,并使用了 langchain 和 ChatGLM 作为后端模型支持。以下是对代码的详细解释: 1. 导入必要的库 import gradio as grfrom langchain_community.llms import ChatGLM from langchain.chains import Conve…...
基于频率约束条件的最小惯量需求评估,包括频率变化率ROCOF约束和频率最低点约束matlab/simulink
基于频率约束条件的最小惯量评估,包括频率变化率ROCOF约束和频率最低点约束matlab/simulink 1建立了含新能源调频的频域仿真传函模型,虚拟惯量下垂控制 2基于构建的模型,考虑了不同调频系数,不同扰动情况下的系统最小惯量需求...
【spark-submit】--提交任务
Spark-submit spark-submit 是 Apache Spark 提供的用于提交 Spark 应用程序到集群的命令行工具。 基本语法 spark-submit [options] <app-jar> [app-arguments]常用参数说明 应用程序配置 --class <class-name>: 指定应用程序的主类(对于 Java/Sc…...
深入理解浏览器的 Cookie:全面解析与实践指南
在现代 Web 开发中,Cookie 扮演着举足轻重的角色。它不仅用于管理用户会话、记录用户偏好,还在行为追踪、广告投放以及安全防护等诸多方面发挥着重要作用。随着互联网应用场景的不断丰富,Cookie 的使用和管理也日趋复杂,如何在保障…...
Java 正则表达式综合实战:URL 匹配与源码解析
在 Web 应用开发中,我们经常需要对 URL 进行格式验证。今天我们结合 Java 的 Pattern 和 Matcher 类,深入理解正则表达式在实际应用中的强大功能,并剖析一段实际的 Java 示例源码。 package com.RegExpInfo;import java.util.regex.Matcher; …...
【C++】前向声明(Forward Declaration)
前向声明(Forward Declaration)是在C、C等编程语言中,在使用一个类、结构体或其他类型之前,仅声明其名称而不给出完整定义的一种方式。 作用 减少编译依赖:当一个源文件包含大量头文件时,编译时间会显著增…...
KF V.S. GM-PHD
在计算机视觉的多目标跟踪(MOT)任务中,卡尔曼滤波(KF)和高斯混合概率假设密度(GM-PHD)滤波器是两种经典的状态估计方法,但它们的原理和应用场景存在显著差异。以下是两者的核心机制和…...
numpy.ma.masked_where:屏蔽满足条件的数组
1.函数功能 屏蔽满足条件的数组内容,返回值为掩码数组 2.语法结构 np.ma.masked_where(condition, a, copyTrue)3. 参数 参数含义condition屏蔽条件a要操作的数组copy布尔值,取值为True时,结果复制数组(原始数据不变),否则返回…...
python ftplib 上传文件名 乱码的解决办法
公司安排我用RPA把各电商平台昨天直播和视频相关的曝光、销售等数据下载下来,我用rpa基本一个星期完成了,最后用影刀RPA自带的ftp文件上传工具,都指定的ftp服务器上,用RPA上传后,文件名都是乱码,默认RPA内嵌…...
【解决】bartender软件换网之后神秘变慢
下的山寨版本bartender软件,用着一直都挺好,结果一次换网之后,启动,排版,打印各种动作都要转个几分钟才行,非常奇怪。直接说解决过程。 首先联想网络没有动以及脱机的时候,都没有这个问题。那么…...
Python小程序 - 文件处理3:正则表达式
正则表达式:文本年鉴表。遗留的问题很多。。。用AI再想想 需求:读入txt文件,过滤文件有关年记录 0)读入txt文件 1)以“。”,中文句号,为界区分一句,最小统计单位 2)年格…...
swift菜鸟教程11-12(数组与字典)
一个朴实无华的目录 今日学习内容:1.Swift 数组1.1创建数组1.2访问数组1.3修改数组使用 append() 方法或者赋值运算符 在数组末尾添加元素通过索引修改数组元素的值: 1.4遍历数组 使用for-in循环同时需要每个数据项的值和索引值 1.5合并数组1.6count 属…...
[福游宝——AI智能旅游信息查询平台]全栈AI项目-阶段二:聊天咨询业务组件开发
简言 本项目旨在构建一个以AI智能体为核心的福建省旅游信息查询系统,聚焦景点推荐、路线规划、交通天气查询等功能,为游客提供智能化、便捷化的旅游信息服务。项目采用前后端分离架构,前端基于Vite TypeScript Vue3技术栈,搭配…...
迷你世界脚本之容器接口:WorldContainer
容器接口:WorldContainer 彼得兔 更新时间: 2023-04-26 10:21:02 具体函数名及描述如下: 序号 函数名 函数描述 1 addFurnace(...) 新增熔炉 2 removeFurnace(...) 移除熔炉 3 checkFurnace(...) 检测是否为熔炉 4 getFurnaceHeatPerce…...
【教学类-102-11】蝴蝶外轮廓01——Python对黑白图片进行PS填充三种颜色+图案描边+图案填充白色+制作1图2图6图24图
背景需求: 用Python,对白色255背景的图片进行了透明化、制作点状或线段的描边裁剪线 【教学类-102-10】剪纸图案全套代码09——Python线条虚线优化版04(原图放大白背景)+制作1图2图6图24图-CSDN博客文章浏览阅读1k次,点赞27次,收藏8次。【教学类-102-10】剪纸图案全套代…...
MCP的另一面
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
微信小程序 - swiper轮播图
官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html <swiper indicator-color"ivory" indicator-active-color"#d43c33" indicator-dots autoplay><swiper-item><image src"/images/banner…...
JSON-Server 极速入门教程
JSON-Server 入门教程 什么是 JSON-Server? JSON-Server 是一个零代码的 REST API 模拟工具,它可以在不到 30 秒的时间内为你创建一个完整的假 REST API。它非常适合前端开发者在没有后端支持的情况下进行开发和测试。 快速开始 1. 安装 首先&#…...
2025年第十六届蓝桥杯省赛C++ 研究生组真题
2025年第十六届蓝桥杯省赛C 研究生组真题 1.说明2.题目A:数位倍数(5分)3.题目B:IPv6(5分)4.题目C:变换数组(10分)5.题目D:最大数字(10分ÿ…...
七、自动化概念篇
自动化测试概念 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的过程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人…...
【第43节】实验分析windows异常分发原理
目录 前言 一、异常处理大致流程图 二、实验一:分析 KiTrap03 三、实验二:分析CommonDispatchException 四、代码探究:分析 KiDispatchException 函数 五、代码探究:伪代码分析用户层KiUserExceptionDispatcher 前言 在Wind…...
如何在AMD MI300X 服务器上部署 DeepSeek R1模型?
DeepSeek-R1凭借其深度推理能力备受关注,在语言模型性能基准测试中可与顶级闭源模型匹敌。 AMD Instinct MI300X GPU可在单节点上高效运行新发布的DeepSeek-R1和V3模型。 用户通过SGLang优化,将MI300X的性能提升至初始版本的4倍,且更多优化将…...
RTX 5060 Ti 3DMark跑分首次流出:比RTX 4060 Ti快20%
快科技4月14日消息,根据VideoCardz拿到的数据,RTX 5060 Ti 16GB在3DMark的系列基准测试中,平均较上一代RTX 4060 Ti 16GB高出20%。 具体来看,RTX 5060 Ti 16GB在3DMark的测试中表现如下: TimeSpy(1440p&a…...
【STL】set
在 C C C S T L STL STL 标准库中, s e t set set 是一个关联式容器,表示一个集合,用于存储唯一元素的容器。 s e t set set 中的元素会自动按照一定的顺序排序(默认情况下是升序)。这意味着在 s e t set set 中不能…...
深入剖析C++中 String 类的模拟实现
目录 引言 一、基础框架搭建 成员变量与基本构造函数 析构函数 二、拷贝与赋值操作 深拷贝的拷贝构造函数 赋值运算符重载 三、字符串操作功能实现 获取字符串长度 字符串拼接 字符串比较 字符访问 四、迭代器相关实现(简单模拟) 迭代器类型…...
STL之priority_queue的用法与实现
目录 1. priority_queue的介绍 1.1. priority_queue的概念 1.2. priority_queue的特点 2. 仿函数 2.1. 仿函数的概念 2.2. 仿函数的应用 2.3 仿函数的灵活性 3. priority_queue的用法 4. 模拟实现priority_queue 4.1. 插入 4.2. 删除 5. 源码 priority_…...
深度学习中的数值稳定性处理详解:以SimCLR损失为例
文章目录 1. 问题背景SimCLR的原始公式 2. 数值溢出问题为什么会出现数值溢出?浮点数的表示范围 3. 数值稳定性处理方法核心思想数学推导 4. 代码实现分解代码与公式的对应关系 5. 具体数值示例示例:相似度矩阵方法1:直接计算exp(x)方法2&…...
散户使用算法交易怎么做?
智能算法交易是量化交易里面最常见的一种,也是大多数散户被套住的股票,想要解套,降低成本最直接有效的方式。但是往往这种波动速度小,担心速度跟不上的情况,我们就要叠加快速通道。 第一:算法交易的应用场…...
Docker详细使用
Docker详细使用 文章目录 Docker详细使用使用场景docker安装常用命令帮助启动类命令镜像命令网络命令容器命令compose(服务编排) 功能列表存储(挂载本地)介绍使用⽬录挂载卷映射 网络介绍使用 DockerfileCompose介绍使用 使用场景…...
mongodb 安装配置
1.官网下载地址:MongoDB Community Download | MongoDB 2.解压包安装:https://pan.baidu.com/s/1Er56twK9UfxoExuCPlJjhg 提取码: 26aj 3.配置环境: (1)mongodb安装包位置: (2)复…...
