基于OpenAI API的DeepSeek Chat GUI开发指南

目录

一、背景

二、具体代码

1.初始化openAI客户端

2.定义历史记录文件前缀和目录

3.创建ChatGUI类

 4.设置GUI界面

5.处理Markdown文本

6.处理用户输入和模型响应

三、完整代码

四、总结


 

一、背景

随着人工智能技术的快速发展,自然语言处理(NLP)模型在各个领域的应用越来越广泛。OpenAI的GPT系列模型因其强大的语言生成能力而备受关注。为了更好地利用这些模型,开发一个用户友好的图形用户界面(GUI)是非常必要的。本文将介绍如何使用Python和Tkinter库开发一个基于OpenAI API的DeepSeek Chat GUI,并结合代码详细讲解其实现过程。

二、具体代码

简略版请看原文

1.初始化openAI客户端

首先,我们需要初始化OpenAI客户端,以便与API进行通信。以下是初始化代码:

from openai import OpenAI
import os
import json
import threading
import tkinter as tk
from tkinter import ttk, scrolledtext, messagebox, filedialog
import re
from datetime import datetime

# 初始化OpenAI客户端
client = OpenAI(
    api_key="sk-xxxxx",
    base_url="https://api.deepseek.com",
)

这部分代码导入了所需的模块,并初始化了OpenAI客户端。client对象将用于与OpenAI API进行通信,发送请求并接收响应。

2.定义历史记录文件前缀和目录

为了方便保存和加载对话历史,我们定义了历史记录文件的前缀和目录:

# 定义历史记录文件前缀和目录
HISTORY_FILE_PREFIX = "history_"
HISTORY_FILE_DIR = "history_records"

# 确保历史记录目录存在
if not os.path.exists(HISTORY_FILE_DIR):
    os.makedirs(HISTORY_FILE_DIR)

我们定义了历史记录文件的命名规则和存储目录。通过`os.makedirs`确保目录存在,避免文件保存时出现错误。

3.创建ChatGUI类

接下来,我们创建`ChatGUI`类,该类负责管理GUI的各个组件和功能。

class ChatGUI:
    def __init__(self, master):
        self.master = master
        self.model = "deepseek-chat"
        self.long_text_mode = False
        self.conversation_history = [{"role": "system", "content": "You are a helpful assistant"}]
        self.is_streaming = False
        self.setup_ui()
        self.setup_markdown_tags()

ChatGUI类是GUI的核心,负责初始化界面和功能。conversation_history用于存储对话历史,setup_ui和setup_markdown_tags分别用于设置界面和Markdown样式。

 4.设置GUI界面

在setup_ui方法中,我们设置了GUI的各个组件,包括顶部控制栏、对话显示区域、输入区域和底部按钮。

    def setup_ui(self):
        self.master.title("DeepSeek Chat GUI")
        self.master.geometry("800x600")

        # 顶部控制栏
        control_frame = ttk.Frame(self.master)
        control_frame.pack(fill=tk.X, padx=5, pady=5)

        self.model_var = tk.StringVar(value=self.model)
        model_combobox = ttk.Combobox(control_frame, textvariable=self.model_var,
                                    values=["deepseek-chat", "deepseek-reasoner", "deepseek-coder"], width=15)
        model_combobox.pack(side=tk.LEFT, padx=5)
        model_combobox.bind("<>", self.on_model_change)

        ttk.Button(control_frame, text="保存历史", command=self.save_history).pack(side=tk.LEFT, padx=5)
        ttk.Button(control_frame, text="清空历史", command=self.clear_history).pack(side=tk.LEFT, padx=5)
        ttk.Button(control_frame, text="加载历史", command=self.load_history_dialog).pack(side=tk.LEFT, padx=5)

        # 对话显示区域
        self.chat_area = scrolledtext.ScrolledText(self.master, wrap=tk.WORD, state=tk.DISABLED)
        self.chat_area.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)

        # 输入区域
        input_frame 

你可能感兴趣的:(python)