原生 python 实现调用 kimi 接口实现对话聊天窗口
请自行部署 kimi 接口,以下代码能实现实时聊天,支持流式响应
import requests
import json
import tkinter as tk
from tkinter import scrolledtext, END
# 设置自定义的 kimi 密钥和URL
OPENAI_API_KEY = 'eyJhbG***pyZA'
OPENAI_URL = 'https://kimi-free-api***.com/v1/chat/completions'
# 创建主应用程序窗口
window = tk.Tk()
window.title("GPT Chat Application")
# 创建一个文本框以显示对话
chat_log = scrolledtext.ScrolledText(window, wrap=tk.WORD)
chat_log.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
# 创建一个输入框以输入用户消息
user_input = tk.Entry(window, width=100)
user_input.pack(padx=10, pady=10, fill=tk.X)
def display_message(message, align, end="\n"):
chat_log.tag_configure(align, justify=align)
chat_log.insert(tk.END, message + end, align)
chat_log.yview(tk.END)
def send_message(event=None):
user_text = user_input.get()
if user_text:
display_message(user_text, 'right', "\n")
user_input.delete(0, tk.END)
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {OPENAI_API_KEY}',
}
data = {
'model': 'gpt-3.5-turbo',
'messages': [{'role': 'user', 'content': user_text}],
'stream': True
}
response = requests.post(OPENAI_URL, headers=headers, json=data, stream=True)
if response.status_code == 200:
buffer = ""
for line in response.iter_lines(decode_unicode=True):
if line:
if line.startswith('data: '):
line = line[len('data: '):] # 去除前缀
if line == '[DONE]':
break
try:
parsed_line = json.loads(line)
if 'choices' in parsed_line:
delta = parsed_line['choices'][0]['delta']
if 'content' in delta:
gpt_text = delta['content']
buffer += gpt_text
display_message(gpt_text, 'left', "")
window.update_idletasks() # 强制更新GUI
except json.JSONDecodeError as e:
print(f"JSONDecodeError: {e}")
display_message("", 'left', "\n")
print("Full response received: ", buffer)
else:
display_message(f"Error: {response.status_code} - {response.text}", 'left', "\n")
# 绑定Enter键以发送消息
user_input.bind("<Return>", send_message)
# 启动应用程序
window.mainloop()