千帆模型gpt智能聊天机器人

devtools/2024/11/12 18:54:50/

首先是调用接口,需要调用的接口ACCESS_KEY和SECRET_KEY

python"># coding=utf-8
import os
import qianfandef gpt(question):with open("QIANFAN_ACCESS_KEY",'r',encoding='utf-8') as f:QIANFAN_ACCESS_KEY = f.read()with open("QIANFAN_SECRET_KEY","r",encoding="utf-8") as f:QIANFAN_SECRET_KEY = f.read()os.environ["QIANFAN_ACCESS_KEY"] = QIANFAN_ACCESS_KEY  # 公钥os.environ["QIANFAN_SECRET_KEY"] = QIANFAN_SECRET_KEY  # 私钥chat_robot = qianfan.ChatCompletion()resp = chat_robot.do(messages=[{"role":"user","content":question}])return resp.body['result']print(gpt('你好'))

然后客户端.py

python">import wx
from socket import *
import threading
from faker import Fakerclass Client(wx.Frame):# 构造方法def __init__(self):# 实例属性self.name =  Faker('zh_CN').name() # 客户端的名字self.isConnected = False  # 客户端是否连接服务器self.client_socket = None# 界面布局wx.Frame.__init__(self,None,title=self.name+"智能问答聊天室客户端",size=(450,660),pos=(100,50))# 创建面板self.pl = wx.Panel(self)# 创建按钮# 加入聊天室self.conn_btn = wx.Button(self.pl,label="加入聊天室",pos=(10,10),size=(200,40))# 离开聊天室self.dis_conn_btn = wx.Button(self.pl, label="离开聊天室", pos=(220, 10), size=(200, 40))# 清空按钮self.clear_btn = wx.Button(self.pl, label="清空", pos=(10, 580), size=(200, 40))# 发送按钮self.send_btn = wx.Button(self.pl, label="发送", pos=(220, 580), size=(200, 40))# 创建聊天内容文本框self.text = wx.TextCtrl(self.pl,size=(400,400),pos=(10,60),style=wx.TE_READONLY|wx.TE_MULTILINE)# 创建输入文本框self.input_text = wx.TextCtrl(self.pl,size=(400,100),pos=(10,470),style=wx.TE_MULTILINE)# 按钮的事件绑定self.Bind(wx.EVT_BUTTON,self.clear,self.clear_btn)self.Bind(wx.EVT_BUTTON, self.conn, self.conn_btn)self.Bind(wx.EVT_BUTTON, self.dis_conn, self.dis_conn_btn)self.Bind(wx.EVT_BUTTON, self.send, self.send_btn)# 点击 加入聊天室 按钮 触发def conn(self,event):print('conn方法')if self.isConnected==False:self.isConnected=Trueself.client_socket=socket()self.client_socket.connect(('127.0.0.1',8998))# 发送用户名self.client_socket.send(self.name.encode('utf8'))main_thread = threading.Thread(target=self.recv_data)main_thread.daemon=Truemain_thread.start()def recv_data(self):print(22222222222)while self.isConnected:print(111111111)text = self.client_socket.recv(1024).decode('utf8')print(text)self.text.AppendText(text+'\n')# 点击 离开聊天室 按钮 触发def dis_conn(self,event):print('dis_conn方法')self.client_socket.send('断开连接'.encode('utf8'))self.isConnected=False# 点击 清空 按钮 触发def clear(self, event):print('clear方法')self.input_text.Clear()# 点击 发送 按钮 触发def send(self, event):print('send方法')if self.isConnected:text = self.input_text.GetValue()if text !='':self.client_socket.send(text.encode('utf8'))self.input_text.Clear()# 程序入口
if __name__ =='__main__':# 创建应用程序对象app = wx.App()# 创建客户端窗口client = Client()# 显示客户端窗口client.Show()# 一直循环显示app.MainLoop()

最后是服务器.py

python">import wx
from socket import *
import  threading
from concurrent.futures import ThreadPoolExecutor
from 千帆模型 import gptclass Server(wx.Frame):def __init__(self):# 实例属性self.isOn = False  # 服务器的启动状态# 创建socket对象self.server_socket = socket()# 绑定ip和端口号self.server_socket.bind(('0.0.0.0',8998))# 监听self.server_socket.listen(5)# 保存所有的客户端self.client_thread_dict={}# 创建线程池self.pool = ThreadPoolExecutor(max_workers=10)# 界面布局# 调用父类的init方法wx.Frame.__init__(self,None,title='智能问答聊天室',pos=(0,50),size=(450,600))# 创建面板self.pl = wx.Panel(self)# 创建按钮# 启动服务器self.start_server_btn = wx.Button(self.pl,pos=(10,10),size=(200,40),label='启动服务器')# 保存聊天记录self.save_text_btn = wx.Button(self.pl, pos=(220, 10), size=(200, 40), label='保存聊天记录')# 创建聊天内容文本框self.text = wx.TextCtrl(self.pl, size=(400, 400), pos=(10, 60), style=wx.TE_READONLY | wx.TE_MULTILINE)# 给按钮绑定事件self.Bind(wx.EVT_BUTTON,self.start_server,self.start_server_btn)self.Bind(wx.EVT_BUTTON, self.save_text, self.save_text_btn)# 启动服务器def start_server(self,event):print('start server')if self.isOn==False:self.isOn=True# 创建线程main_thread = threading.Thread(target=self.main_thread_fun)# 设置为守护线程main_thread.daemon = True# 启动线程main_thread.start()def main_thread_fun(self):while self.isOn:client_socket,client_addr=self.server_socket.accept()print(client_addr)client_name = client_socket.recv(1024).decode('utf8')print(client_name)client_thread = ClientThead(client_socket,client_name,self)# 保存客户端self.client_thread_dict[client_name] = client_threadself.pool.submit(client_thread.run)# self.send("【服务器通知】欢迎%s进入聊天室"%client_name)def send(self,text):self.text.AppendText(text+'\n')for client in self.client_thread_dict.values():if client.isOn:print(text)result = gpt(text)print(result)client.client_socket.send(result.encode('utf8'))self.text.AppendText(result + '\n')# 保存聊天记录def save_text(self,event):print('save text')record = self.text.GetValue()with open('record.log',"a+",encoding='GBK') as f:f.write(record)class ClientThead(threading.Thread):def __init__(self,socket,name,server):threading.Thread.__init__(self)self.client_socket = socketself.client_name = nameself.server = serverself.isOn = Truedef run(self):while self.isOn:text = self.client_socket.recv(1024).decode('utf8')if text =='断开连接':self.isOn = False# self.server.send('【服务器消息】%s离开了聊天室'%self.client_name)else:self.server.send('%s'%(text))self.client_socket.close()# 程序入口
if __name__=="__main__":# 创建应用程序对象app = wx.App()# 创建服务器窗口server = Server()# 显示服务器窗口server.Show()# 循环显示app.MainLoop()

http://www.ppmy.cn/devtools/132880.html

相关文章

qt QHttpMultiPart详解

1. 概述 QHttpMultiPart是Qt框架中用于处理HTTP多部分请求的类。它类似于RFC 2046中描述的MIME multipart消息,允许在单个HTTP请求中包含多个数据部分,如文件、文本等。这种多部分请求在上传文件或发送带有附件的邮件等场景中非常有用。QHttpMultiPart类…

MongoDB笔记01-概念与安装

文章目录 前言一、MongoDB相关概念1.1 业务应用场景具体的应用场景什么时候选择MongoDB 1.2 MongoDB简介1.3 体系结构1.4 数据模型1.5 MongoDB的特点 二、本地单机部署2.1 Windows系统中的安装启动第一步:下载安装包第二步:解压安装启动1.命令行参数方式…

基于STM32的hx711称重模块使用

欢迎入群共同学习交流 时间记录:2024/11/9 一、知识点记录 1、hx711 1)HX711是一款高精度压力传感器专用的24位模数转换芯片,主要功能是将测得的微小电压信号放大到可以被微控制器读取的范围 2)工作电压2.6-5.5V 3)引…

达梦8数据库适配ORACLE的8个参数

目录 1、概述 1.1 概述 1.2 实验环境 2、参数简介 3、实验部分 3.1 参数BLANK_PAD_MODE 3.2 参数COMPATIBLE_MODE 3.3 参数ORDER_BY_NULLS_FLAG 3.4 参数DATETIME_FMT_MODE 3.5 参数PL_SQLCODE_COMPATIBLE 3.6 参数CALC_AS_DECIMAL 3.7 参数ENABLE_PL_SYNONYM 3.8…

OpenGL学习笔记(四) RGBA颜色

RGBA模式中,每一个像素会保存以下数据:R值(红色分量)、G值(绿色分量)、B值(蓝色分量)和A值(alpha分量)。其中红、绿、蓝三种颜色相组合,就可以得到…

Flutter 中 Provider 的使用指南

目录 1.什么是 Provider 2.如何安装 Provider 3.基本使用方式 1.使用ChangeNotifierProvider提供状态 2.使用 Provider.of 手动读取状态 3.多Provider 的使用 4.常见的 Provider 类型 在 Flutter 开发中,状态管理是一个常见的需求。Provider 是 Flutter 官方…

shell中执行hive指令以及hive中执行shell和hdfs指令语法

0. 简介 主要介绍了三种环境命令执行语法&#xff1a; shell中执行hive指令hive中执行shell指令hive中执行hdfs指令 1. shell中执行hive指令 语法&#xff1a;hive [-hiveconf xy]* [<-i filename>]* [<-f filename> | <-e query-string>] [-S] 说明&…

u盘怎么重装电脑系统_u盘重装电脑系统步骤和详细教程【新手宝典】

u盘怎么重装电脑系统&#xff1f;一个u盘怎么重装电脑系统呢&#xff0c;需要将u盘制作成u盘启动盘pe&#xff0c;然后通过U盘启动盘进入pe进行安装系统&#xff0c;下面小编就教大家u盘重装电脑系统步骤和详细教程。 u盘启动是什么意思&#xff1f; U盘启动盘是一种具有特殊功…