前言
智谱AI开放了一个免费使用的大模型GLM-4-Flash,官方也提供了python的示例程序,我们结合pyqt5来编写一个基于GLM-4的简单的智能聊天工具。
界面大致如下:
环境配置
系统:windows
平台:visual studio code
语言:python
库:pyqt5
大模型:智谱清言 GLM-4-Flash
程序主要分两个方面,一个UI布局,一个是大模型的调用。
由于大模型调用时会耗费时间,所以将其写在一个线程里:
class GLM4_free_thread(QThread):
"""GLM-4V免费版"""
signal1=pyqtSignal(str)
def __init__(self, prompt:str) -> None:
super().__init__()
self.prompt=prompt
def run(self):
self.gene(self.prompt)
def gene(self,prompt:str):
print("提问:{}".format(prompt))
client = ZhipuAI(api_key="xxx") #这里填写你在智谱申请的key
response=client.chat.completions.create(
model="glm-4-0520",
messages=[
{
"role": "user",
"content": prompt,
},
],
)
print("助手:{}".format(response.choices[0].message.content))
self.signal1.emit(response.choices[0].message.content)
至于pyqt5的UI布局,则相对简单, 此处就不多作介绍了。
UI代码:
class ChatTool(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.te_answer=QTextEdit(self)
self.te_answer.setGeometry(20,20,500,400)
self.btn_clear=QPushButton('清空',self)
self.btn_clear.setGeometry(530,20,80,40)
self.btn_clear.clicked.connect(self.on_btnclear_clicked)
self.te_quote=QTextEdit(self)
self.te_quote.setGeometry(20,500,500,40)
self.te_quote.setText('你好')
self.btn_gene=QPushButton('提问',self)
self.btn_gene.setGeometry(530,500,80,40)
self.btn_gene.clicked.connect(self.on_btngene_clicked)
self.setWindowTitle("ChatTool")
self.setGeometry(100, 40, 700, 600)
self.setWindowIcon(QIcon('ZPaiTest2024\\icons\\聊天.png'))
self.show()
def on_btngene_clicked(self):
prompt=self.te_quote.toPlainText()
self.te_answer.append("提问:{}\n".format(prompt))
self.th1=GLM4_free_thread(prompt)
self.th1.signal1.connect(self.on_signal1)
self.th1.start()
self.te_quote.clear()
@pyqtSlot(str)
def on_signal1(self, text):
self.te_answer.append("助手:{}\n".format(text))
def on_btnclear_clicked(self):
self.te_answer.clear()
if __name__ == '__main__':
app = QApplication(sys.argv)
chatTool = ChatTool()
sys.exit(app.exec_())
当我们启动程序后,通过输入提示词,让大模型返回回答,经过测试,这个大模型是无法联系上下文,但是对大部分问题,还是能提供一些较为准确的回答的。
以上是一个简单的体验介绍,毕竟是免费使用的,而且可以很方便的集成到python程序中,有兴趣的可以去试试。