基于Gradio的GPT聊天程序

网上很多别人写的,要用账号也不放心。就自己写了一个基于gradio的聊天界面,部署后可以本地运行。

 

特点:

可以用openai的,也可以用api2d,其他api可以自己测试一下。使用了langchain的库

可以更改模型,会的可以自己改代码更新模型

支持修改temperature,对话轮数

公开代码,copy后填了自己的api就能直接运行

import gradio as grfrom langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, AIMessageapi_key = '***'  # openai api, api2d api
api_base ='https://oa.api2d.net/v1'  # api地址
models = ['gpt-3.5-turbo-0613', 'gpt-4-0613']   #模型名称,可以修改block_css = """.importantButton {background: linear-gradient(45deg, #7e0570,#5d1c99, #6e00ff) !important;border: none !important;
}
.importantButton:hover {background: linear-gradient(45deg, #ff00e0,#8500ff, #6e00ff) !important;border: none !important;
}"""default_theme_args = dict(font=["Source Sans Pro", 'ui-sans-serif', 'system-ui', 'sans-serif'],font_mono=['IBM Plex Mono', 'ui-monospace', 'Consolas', 'monospace'],
)init_message = f"""欢迎使用 ChatGPT Gradio UI!"""def respond(query, model, temperature, history_turns, chat_history):global chat_turnsllm = ChatOpenAI(temperature=temperature,openai_api_key=api_key,openai_api_base=api_base,model_name=model)history=[]len_history = min(chat_turns, history_turns)if chat_turns > 0:for turn in range(len_history):history.append(HumanMessage(content=chat_history[len_history-turn][0]));history.append(AIMessage(content=chat_history[len_history-turn][1]));history.append(HumanMessage(content=query));#print(history)response = llm(history).content;chat_history.append((query, response));chat_turns += 1return "", chat_historydef clear(chat_history):global chat_turnschat_history = [(None, "已清除对话历史")]chat_turns = 0return chat_historydef setting_change(model ,temperature, history_turns ,chat_history):global chat_turnschat_history = [(None, f"设置更新:\n 模型名称:{model} \n 温度:{temperature} \n 记忆历史对话轮数:{history_turns}\n")]chat_turns =0return chat_historywith gr.Blocks(css=block_css, theme=gr.themes.Default(**default_theme_args)) as demo:gr.Markdown('ChatGPT Gradio')chat_turns = 0with gr.Row():with gr.Column(scale=10):chatbot = gr.Chatbot([[None, init_message]],elem_id="chat-box",label="聊天历史")query = gr.Textbox(label="输入问题",placeholder="请输入提问内容,按回车进行提交")clear_button = gr.Button("重新对话", visible=True)with gr.Column(scale=5):model = gr.Radio(models,label="请选择使用模型",value=models[0], interactive=True)temperature = gr.Slider(0,1,value=0.8,step=0.1,label="Temperature",interactive=True)history_turns = gr.Slider(1, 20,value=5,step=1,label="对话轮数",info='记录历史对话轮数',interactive=True)settings_button = gr.Button("更新设置", visible=True)settings_button.click(fn=setting_change, inputs=[model, temperature, history_turns, chatbot], outputs=[chatbot])query.submit(respond, [query, model, temperature, history_turns, chatbot], [query, chatbot])clear_button.click(fn=clear,inputs=[chatbot],outputs=[chatbot])demo.launch()

需要的库,requirement.txt 文件

langchain
openai
gradio

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/32812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【调整奇数偶数顺序】

调整奇数偶数顺序 1.题目 输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。 2.题目分析 这道题首先用到的方法是冒泡排序的思想,首先通过冒泡排序…

时序预测 | MATLAB实现BO-BiLSTM贝叶斯优化双向长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现BO-BiLSTM贝叶斯优化双向长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现BO-BiLSTM贝叶斯优化双向长短期记忆神经网络时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-BiLSTM贝叶斯优化双向长短期记忆…

Linux下C语言调用libcurl库获取天气预报信息

一、概述 当前文章介绍如何在Linux(Ubuntu)下使用C语言调用libcurl库获取天气预报的方法。通过HTTP GET请求访问百度天气API,并解析返回的JSON数据,可以获取指定城市未来7天的天气预报信息。 二、设计思路 【1】使用libcurl库进…

用MariaDB创建数据库,SQL练习,MarialDB安装和使用

前言:MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQ…

Electron+vue3项目使用SQLite3数据库

SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,我们不需要在系统中配置。 就像其他数据库,SQLite 引擎不是一个独立的进程&am…

Scratch 之 如何矢量图中去除矢量刺

如果您曾经在“矢量编辑器”中使用过轮廓,那么您一定已经看到了这一点... 这被称为矢量刺,只有当你正在绘制的形状中有尖锐的点或角时才会发生这种情况,这真的很烦人😡 所以在这个视频中,我将向你展示如何摆脱这些令人…

Springboot后端通过路径映射获取本机图片资源

项目场景: 项目中对图片的处理与查看是必不可少的,本文将讲解如何通过项目路径来获取到本机电脑的图片资源 如图所示,在我的本机D盘的图片测试文件夹(文件夹名字不要有中文)下有一些图片, 我们要在浏览器上访问到这些图片&#…

在时间和频率域中准确地测量太阳黑子活动及使用信号处理工具箱(TM)生成广泛的波形,如正弦波、方波等研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

python压缩pdf文件大小

pdf文件过大,经常会是一个问题,但是市面上基本上都是收费的工具,wps需要开会员才能使用。因此找了一个python库进行试验: 首先需要安装 pip install aspose-pdf 运行的代码: import aspose.pdf as apcompressPdfDo…

你的服务器安全吗?--服务器防渗透

1、概述 在本人所处的公司的服务器正式遭到黑客攻击之前,一直都以为 黑客 是个遥不可及的词,直到真正成为了受害者时,才猛然意识到安全的重要性。有一些基本经验和心得总结出来,和同行分享一下吧。 2、暴破手段 最粗暴的黑客行为…

什么是敏捷开发?

敏捷开发流程:制度化、规范化地PUA程序员的顶级神器!!!

SQL | 使用函数处理数据

8-使用函数处理数据 8.1-函数 SQL可以用函数来处理数据。函数一般是在数据上执行的,为数据的转换和处理提供了方便。 8.1.1 函数带来的问题 每种DBMS都有特定的函数,只有很少一部分函数,是被所有主要的DBMS等同的支持。 虽然所有的类型的…

【C++】C++异常

文章目录 1. C语言传统处理错误的方式2. C异常的概念3. 异常的使用3.1 异常的抛出和捕获3.2 异常的重新抛出3.3 异常安全3.4 异常规范 4. C标准库的异常体系5. 自定义的异常体系6. 异常的优缺点 1. C语言传统处理错误的方式 C语言传统的错误处理机制有两个: 终止程…

v-md-editor自定义锚点(生成目录)数组转树结构

接前两篇博文,最终方案终于定了,也把之前做的编辑器模式给否决了,原因是系统中有老的文档需要平替,因此就不能通过编辑器这种模式了,太麻烦了。 最终方案:线下手动pandoc word转markdown,然后将…

使用Java根据表名导出与导入Sql

前言 很粗糙啊,有很多可以优化的地方,而且也不安全,但是临时用还是OK的,我这个是公司里面的单机软件,不联网。 嗨!我是一名社交媒体增长黑客,很高兴能帮助您优化和丰富关于批量作业导出和导入…

pycharm离线安装依赖包

一、对于单个下载离线包,然后安装 1、先去https://pypi.org/网站下载离线包,下载到本地; 2、从磁盘中找到刚刚下载包,点击确定就可以安装了 二、将本地项目所有依赖包全部下载下来,然后批量在另一个项目&#xff…

模型、策略和算法

模型(model)、策略(strategy)和算法(algorithm)是统计学习的所有内容. 模型是统计学习的最终结果,即决策函数(decision function) 或条件概率函数 ,它被⽤来预测特定问题下,将来未知输⼊的输出结果. 策略是统计学习过程中的产⽣最优模型的评…

Redis的常用命令

Redis常用命令 1、字符串string操作命令 Redis中字符串类型常用命令: 命令含义SET key value设置指定key的值GET key获取指定key的值SETEX key seconds value设置指定key的值,并将key的过期时间设为seconds秒SETNX key value只有在key不存在时设置key的值 更多命…

微软杀入Web3:打造基于区块链的AI产品

作者:秦晋 2023年1月,微软向 ChatGPT 创建者 OpenAI 投资 100 亿美元,在AI业界引发格外关注。此举也让微软在AI的战略探索上提前取得有利位置。 2023年3月,微软软件工程师 Albacore 披露微软正在为Edge 浏览器测试内置的非托管加密…

【OpenCV常用函数:轮廓检测+外接矩形检测】cv2.findContours()+cv2.boundingRect()

文章目录 1、cv2.findContours()2、cv2.boundingRect() 1、cv2.findContours() 对具有黑色背景的二值图像寻找白色区域的轮廓,因此一般都会先经过cvtColor()灰度化和threshold()二值化后的图像作为输入。 cv2.findContous(image, mode, method[, contours[, hiera…