pyqt实现聊天机器人

环境要求

通过调用openai接口实现聊天机器人功能,支持各种参数得调整,文章末尾有各个参数得说明

  • python3.9
  • pyqt5
  • 环境安装
pip install pyqt5
pip install openai
pip install pyinstaller

源码如下:

chat.py

import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui, QtWidgets
import openaiclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(800, 600)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.centralwidget)self.verticalLayout_4.setObjectName("verticalLayout_4")self.horizontalLayout = QtWidgets.QHBoxLayout()self.horizontalLayout.setObjectName("horizontalLayout")self.label = QtWidgets.QLabel(self.centralwidget)self.label.setObjectName("label")self.horizontalLayout.addWidget(self.label)self.lineEdit_prompt = QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_prompt.setObjectName("lineEdit_prompt")self.horizontalLayout.addWidget(self.lineEdit_prompt)self.pushButtonSend = QtWidgets.QPushButton(self.centralwidget)self.pushButtonSend.setObjectName("pushButtonSend")self.horizontalLayout.addWidget(self.pushButtonSend)self.verticalLayout_4.addLayout(self.horizontalLayout)self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)self.groupBox_2.setObjectName("groupBox_2")self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.groupBox_2)self.verticalLayout_3.setObjectName("verticalLayout_3")self.horizontalLayout_12 = QtWidgets.QHBoxLayout()self.horizontalLayout_12.setObjectName("horizontalLayout_12")self.verticalLayout = QtWidgets.QVBoxLayout()self.verticalLayout.setObjectName("verticalLayout")self.horizontalLayout_11 = QtWidgets.QHBoxLayout()self.horizontalLayout_11.setObjectName("horizontalLayout_11")self.label_10 = QtWidgets.QLabel(self.groupBox_2)self.label_10.setObjectName("label_10")self.horizontalLayout_11.addWidget(self.label_10)self.lineEdit_api_key = QtWidgets.QLineEdit(self.groupBox_2)self.lineEdit_api_key.setObjectName("lineEdit_api_key")self.horizontalLayout_11.addWidget(self.lineEdit_api_key)self.verticalLayout.addLayout(self.horizontalLayout_11)self.horizontalLayout_7 = QtWidgets.QHBoxLayout()self.horizontalLayout_7.setObjectName("horizontalLayout_7")self.label_6 = QtWidgets.QLabel(self.groupBox_2)self.label_6.setObjectName("label_6")self.horizontalLayout_7.addWidget(self.label_6)self.spinBox_max_tokens = QtWidgets.QSpinBox(self.groupBox_2)self.spinBox_max_tokens.setMinimum(10)self.spinBox_max_tokens.setMaximum(1024)self.spinBox_max_tokens.setProperty("value", 100)self.spinBox_max_tokens.setObjectName("spinBox_max_tokens")self.horizontalLayout_7.addWidget(self.spinBox_max_tokens)self.verticalLayout.addLayout(self.horizontalLayout_7)self.horizontalLayout_6 = QtWidgets.QHBoxLayout()self.horizontalLayout_6.setObjectName("horizontalLayout_6")self.label_5 = QtWidgets.QLabel(self.groupBox_2)self.label_5.setObjectName("label_5")self.horizontalLayout_6.addWidget(self.label_5)self.doubleSpinBox_temperature = QtWidgets.QDoubleSpinBox(self.groupBox_2)self.doubleSpinBox_temperature.setDecimals(0)self.doubleSpinBox_temperature.setMinimum(0.0)self.doubleSpinBox_temperature.setMaximum(1.0)self.doubleSpinBox_temperature.setSingleStep(0.1)self.doubleSpinBox_temperature.setProperty("value", 0.0)self.doubleSpinBox_temperature.setObjectName("doubleSpinBox_temperature")self.horizontalLayout_6.addWidget(self.doubleSpinBox_temperature)self.verticalLayout.addLayout(self.horizontalLayout_6)self.horizontalLayout_4 = QtWidgets.QHBoxLayout()self.horizontalLayout_4.setObjectName("horizontalLayout_4")self.label_3 = QtWidgets.QLabel(self.groupBox_2)self.label_3.setObjectName("label_3")self.horizontalLayout_4.addWidget(self.label_3)self.doubleSpinBox_presence_penalty = QtWidgets.QDoubleSpinBox(self.groupBox_2)self.doubleSpinBox_presence_penalty.setDecimals(1)self.doubleSpinBox_presence_penalty.setMinimum(-2.0)self.doubleSpinBox_presence_penalty.setMaximum(2.0)self.doubleSpinBox_presence_penalty.setSingleStep(0.1)self.doubleSpinBox_presence_penalty.setProperty("value", 1.0)self.doubleSpinBox_presence_penalty.setObjectName("doubleSpinBox_presence_penalty")self.horizontalLayout_4.addWidget(self.doubleSpinBox_presence_penalty)self.verticalLayout.addLayout(self.horizontalLayout_4)self.horizontalLayout_12.addLayout(self.verticalLayout)spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_12.addItem(spacerItem)self.verticalLayout_2 = QtWidgets.QVBoxLayout()self.verticalLayout_2.setObjectName("verticalLayout_2")self.horizontalLayout_3 = QtWidgets.QHBoxLayout()self.horizontalLayout_3.setObjectName("horizontalLayout_3")self.label_2 = QtWidgets.QLabel(self.groupBox_2)self.label_2.setObjectName("label_2")self.horizontalLayout_3.addWidget(self.label_2)self.comboBox_model = QtWidgets.QComboBox(self.groupBox_2)self.comboBox_model.setObjectName("comboBox_model")self.comboBox_model.addItem("")self.comboBox_model.addItem("")self.horizontalLayout_3.addWidget(self.comboBox_model)self.verticalLayout_2.addLayout(self.horizontalLayout_3)self.horizontalLayout_10 = QtWidgets.QHBoxLayout()self.horizontalLayout_10.setObjectName("horizontalLayout_10")self.label_9 = QtWidgets.QLabel(self.groupBox_2)self.label_9.setObjectName("label_9")self.horizontalLayout_10.addWidget(self.label_9)self.lineEdit_stop = QtWidgets.QLineEdit(self.groupBox_2)self.lineEdit_stop.setObjectName("lineEdit_stop")self.horizontalLayout_10.addWidget(self.lineEdit_stop)self.verticalLayout_2.addLayout(self.horizontalLayout_10)self.horizontalLayout_8 = QtWidgets.QHBoxLayout()self.horizontalLayout_8.setObjectName("horizontalLayout_8")self.label_7 = QtWidgets.QLabel(self.groupBox_2)self.label_7.setObjectName("label_7")self.horizontalLayout_8.addWidget(self.label_7)self.doubleSpinBox_top_p = QtWidgets.QDoubleSpinBox(self.groupBox_2)self.doubleSpinBox_top_p.setDecimals(1)self.doubleSpinBox_top_p.setMaximum(1.0)self.doubleSpinBox_top_p.setSingleStep(0.1)self.doubleSpinBox_top_p.setProperty("value", 0.1)self.doubleSpinBox_top_p.setObjectName("doubleSpinBox_top_p")self.horizontalLayout_8.addWidget(self.doubleSpinBox_top_p)self.verticalLayout_2.addLayout(self.horizontalLayout_8)self.horizontalLayout_5 = QtWidgets.QHBoxLayout()self.horizontalLayout_5.setObjectName("horizontalLayout_5")self.label_4 = QtWidgets.QLabel(self.groupBox_2)self.label_4.setObjectName("label_4")self.horizontalLayout_5.addWidget(self.label_4)self.doubleSpinBox_frequency_penalty = QtWidgets.QDoubleSpinBox(self.groupBox_2)self.doubleSpinBox_frequency_penalty.setDecimals(1)self.doubleSpinBox_frequency_penalty.setMinimum(-2.0)self.doubleSpinBox_frequency_penalty.setMaximum(2.0)self.doubleSpinBox_frequency_penalty.setSingleStep(0.1)self.doubleSpinBox_frequency_penalty.setProperty("value", 1.0)self.doubleSpinBox_frequency_penalty.setObjectName("doubleSpinBox_frequency_penalty")self.horizontalLayout_5.addWidget(self.doubleSpinBox_frequency_penalty)self.verticalLayout_2.addLayout(self.horizontalLayout_5)self.horizontalLayout_12.addLayout(self.verticalLayout_2)spacerItem1 = QtWidgets.QSpacerItem(100, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_12.addItem(spacerItem1)self.verticalLayout_3.addLayout(self.horizontalLayout_12)self.verticalLayout_4.addWidget(self.groupBox_2)self.groupBox = QtWidgets.QGroupBox(self.centralwidget)self.groupBox.setObjectName("groupBox")self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.groupBox)self.horizontalLayout_2.setObjectName("horizontalLayout_2")self.textBrowser_result = QtWidgets.QTextBrowser(self.groupBox)self.textBrowser_result.setObjectName("textBrowser_result")self.horizontalLayout_2.addWidget(self.textBrowser_result)self.verticalLayout_4.addWidget(self.groupBox)MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.label.setText(_translate("MainWindow", "请输入问题:"))self.pushButtonSend.setText(_translate("MainWindow", "发送"))self.groupBox_2.setTitle(_translate("MainWindow", "参数设置"))self.label_10.setText(_translate("MainWindow", "apikey"))self.label_6.setText(_translate("MainWindow", "max_tokens"))self.label_5.setText(_translate("MainWindow", "temperature"))self.label_3.setText(_translate("MainWindow", "presence_penalty"))self.label_2.setText(_translate("MainWindow", "model"))self.comboBox_model.setItemText(0, _translate("MainWindow", "code-davinci-002"))self.comboBox_model.setItemText(1, _translate("MainWindow", "text-davinci-003"))self.label_9.setText(_translate("MainWindow", "stop"))self.label_7.setText(_translate("MainWindow", "top_p"))self.label_4.setText(_translate("MainWindow", "frequency_penalty"))self.groupBox.setTitle(_translate("MainWindow", "结果"))class MainWindow(QMainWindow, Ui_MainWindow, ):def __init__(self):super(MainWindow, self).__init__()self.setupUi(self)self.pushButtonSend.clicked.connect(self.handle_send)self.lineEdit_prompt.setText("openai接口stop参数啥意思")self.setWindowTitle("PyqtForChatgpt")def handle_send(self):api_key = self.lineEdit_api_key.text()if not api_key:QMessageBox.warning(self, 'error', '请输入有效的api key')returnopenai.api_key = api_keyprompt = self.lineEdit_prompt.text()model = self.comboBox_model.currentText()max_tokens = self.spinBox_max_tokens.value()stop = self.spinBox_max_tokens.text()temperature = self.doubleSpinBox_temperature.value()top_p = self.doubleSpinBox_top_p.value()presence_penalty = self.doubleSpinBox_presence_penalty.value()frequency_penalty = self.doubleSpinBox_frequency_penalty.value()text = openai.Completion.create(prompt=prompt,model=model,max_tokens=max_tokens,# stop=[stop],temperature=temperature,top_p=top_p,presence_penalty=presence_penalty,frequency_penalty=frequency_penalty,n=1,).choices[0].textself.textBrowser_result.setPlainText(text)# self.textBrowserResult.setMarkdown(f"""""")if __name__ == "__main__":app = QApplication(sys.argv)myapp = MainWindow()myapp.show()sys.exit(app.exec_())

执行

python chat.py

效果如下

在这里插入图片描述

打包成exe

pyinstaller -y -F -w -n chat chat.py

openai参数使用说明

参数名类型默认值说明
modelstring模型名称
promptstring输入的提示
max_tokensint16文本生成时要生成的最大token数.提示的token数加上max_tokens不能超过模型的上下文长度。大多数模型的上下文长度为2048个token(最新模型支持4096 tokens)
stopstringnull最多4个序列,遇到stopAPI将停止生成。返回的文本不包含停止序列。
temperaturefloat1采样温度。值越高意味着模型承担的风险越大。对于需要创意的场景,可以尝试0.9,对于答案明确的场景,建议用0(argmax采样),建议不要与top_p同时改变。
top_pfloat1核采样(温度采样的另一种方式),其中模型考虑具有top_p概率质量的token的结果。因此,0.1意味着只考虑包含最高10%概率质量的token,建议不要与temperature同时改变。
presence_penaltyfloat0数值介于-2.0和2.0之间。正值将根据到目前为止新token是否出现在文本中来惩罚新token,从而增加模型谈论新主题的可能性。
frequency_penaltyfloat0数值介于-2.0和2.0之间。正值根据文本中新token已经出现的频率惩罚新token,从而降低模型逐字重复同一行的可能性。

使用说明

  • 输入问题
  • 参数根据情况选填
  • 必须填写api_key

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

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

相关文章

【微信聊天机器人】基于python实现的PC端个人微信聊天机器人

文章目录 前言一、运行环境二、使用步骤1.引入库2.根据文本内容自动生成回复3.接收消息的回调函数4.启动客户端5.程序入口 三、代码全文总结 前言 微信自动回复、聊天机器人应该是一个很多人迫切需要的功能(如时间管理大师),网上能搜到的大多…

Python基于PC版微信实现机器人

在github中有基于web版的微信实现的实时收发消息api,python调用起来非常简单。但是目前来说,大部分的用户没法登录web版的微信,因此也就没法使用。 今天我们介绍基于windows版的微信,实现实时收发信息。本文站在巨人的肩膀上&…

Python实现微信机器人——itchat库

itchat是一个开源的微信个人号接口,可以使用该库进行微信网页版中的所有操作,比如:所有好友、添加好友、拉好友群聊、微信机器人等等。详细用户请看文档介绍,在这里。 本文主要使用该库完成一个能够处理微信消息的的图灵器人&…

自己动手实现4大免费聊天机器人:小冰、图灵、腾讯、青云客

完整源代码(以及.py下载链接)见最后! 聊天机器人(Chatterbot)是经由对话或文字进行交谈的计算机程序。能够模拟人类对话,通过图灵测试,如Siri、小爱同学、微软小冰等。 本教程将教你用Python实现…

微信公众号接入微软小冰

前言 文章首发于微信公众号:前端指南。本文是一篇有点偏向于运营层面的技术类文章,文章略长,请耐心阅读。 也就是最近这几年,人工智能行业已经变得十分的火热了。不可否认,人工智能是整个互联网行业的一种趋势&#xf…

chrome 调试之 - 给微软小冰看病(无论给小冰发送什么内容都只回复“我已经开始升级啦,期待一下吧!”)

微软 Bing 搜索推出了小冰AI智能聊天模块,具体启用方式是用edge或chrome浏览器打开链接 cn.bing.com 后在输入框搜索任意内容,待搜索结果页面加载完并稍等片刻,页面右侧就会出现一个躲在滚动条后面的小萝莉,抚摸...不,…

微软小冰智能聊天是如何实现的

微软小冰智能聊天是如何实现的? 官网介绍:微软小冰 虽然知道小冰的智能回复背后,应该是微软庞大的数据库。 但作为大二的学生,对这方面不是很了解,期待能得到答复。谢谢。 关注者 1,033 被浏览 112,398 关注问题 写回答…

微软小冰推出“虚拟版”微信!比原版更好玩

来源:雷科技 提起AI,大伙的脑海里会想到什么场景? 小雷知道,有些自带“污妖王”属性的小伙伴,已经浮现出AI换脸那些事儿了。 只要有足够的人脸数据,再加上足够长的时间训练,就可以把明星的脸…

【小沐学NLP】Python实现聊天机器人(微软小冰)

🍺NLP开发系列相关文章编写如下🍺:1🎈【小沐学NLP】Python实现词云图🎈2🎈【小沐学NLP】Python实现图片文字识别🎈3🎈【小沐学NLP】Python实现中文、英文分词🎈4&#x1…

微软小冰智能聊天是如何实现的?

我在知乎关于《微软小冰智能聊天是如何实现的?》做的回答 刚好做过一个类似的产品,虽然没有那么高大上,但一些核心技术原理应该也参考意义,说一下做的思路。 类似小冰这样的产品说简单也简单,说复杂也复杂。单纯从外面…

微信小冰陪聊机器人Python

一、原因 女友因为我老不回消息分手了,很郁闷。 所以想能不能实现一个陪聊机器人,如果以后还有女朋友免去痛苦,可以专心打游戏敲代码,嘿嘿嘿。(果然有这种思想的人不会有女朋友了) 二、实现 本人学习没…

微软小冰:全双工语音对话详解

讲师 | 周力 来源 | AI科技大本营在线公开课 微软小冰第六代发布会上正式宣布上线全新的共感模型,同时也开始公测一种融合了文本、全双工语音与实时视觉的新感官。这项新技术可以实时预测人类即将说出的内容,实时生成回应,并控制对话节奏&…

itchat与微软小冰的碰撞!--微软小冰接入itchat实现微信自动回复

微软小冰接入itchat实现微信自动回复 本文简介先上效果图!一、集成微软小冰制作聊天机器人原理代码监听好友信息监听小冰信息 二、定时发送消息推送与自动回复同时实现原理代码完整代码加点花的代码结语 本文简介 最近研究了一下基于python实现的itchat模块&#x…

ChatGPT 最新知识大全:工作原理,ChatGPT 是如何训练的,局限性是什么,开源 ChatGPT 替代品有哪些?

我们今天谈论的应用程序在发布后的 5 天内就突破了 100 万用户,并在 2023 年 2 月之前获得了 1 亿用户,创下了增长最快的平台记录。它在 2 月达到了 10 亿次访问,在 2023 年 3 月达到了 16 亿次访问。相比之下,Facebook需要 10 个月,Spotify需要 5 个月,Instagram需要 2 …

昇思MindSpore AI框架在知名度与使用率市场份额上处于第一梯队

2023年2月6日,行业研究机构Omdia(Informa tech集团旗下国际信息与通信技术研究机构)发布了《中国人工智能框架市场调研报告》,深入分析了中国人工智能框架市场的竞争格局,产业现状与创新趋势。Omdia通过调研发现&#…

当ChatGPT杀入学术出版领域,有人开始围堵,有人悄悄地打开大门

导读 最近,智能聊天机器人ChatGPT火到了天际。 它能够通过学习和理解人类的语言来进行对话,还能根据聊天内容的上下文进行互动,像人一样来沟通交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务。 除此之外&#xff…

Sorry, you have been blocked !vultr 又被 openai 屏蔽了,只能换个 vps 了

最近有段时间没登陆 chatGPT,最近听说 chatGPT 出插件功能了,于是就想体验一下。 打开网站发现 有特么被屏蔽了。 不慌,压压惊,先看看是屏蔽了 IP 还是屏蔽了账号。 Google 一下,一个靠谱的答案是: open…

AI新时代拐点:人工智能当红炸子鸡Chatgpt

​当下,AI聊天程序ChatGPT风靡全网,因为它能够给出更合理且充满人情味的答案,引发了广泛关注。那么,ChatGPT究竟能做什么?它的背后又有什么样的故事呢?让我们一起来探索一下吧! 在我们深入了解C…

马斯克启动TruthGPT/ 星舰首飞再延期至本周四/ Adobe AI工具重磅更新...今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好,今天是4月18日星期二,昨天,马斯克的星舰又双叒叕咕咕咕了~ 今天科技圈有哪些新鲜事儿,和日报君一起来看看~ Space X星舰发射再度推迟,周边产品已开始预售 昨日&#…

edge-tts微软文本转语音库,来听听这些语音是否很熟悉?

上期图文教程,我们分享了Azure机器学习的文本转语音的账号申请与API申请的详细步骤,也介绍了基于python3实现Azure机器学习文本转语音功能的代码实现过程,虽然我们可以使用Azure账号免费提供一年的试用期,但是毕竟是要付费的,我们的API也无法长期使用,好在微软发布了edge…