您的位置:首页 > 文旅 > 旅游 > How do I format markdown chatgpt response in tkinter frame python?

How do I format markdown chatgpt response in tkinter frame python?

2024/10/6 16:30:52 来源:https://blog.csdn.net/suiusoar/article/details/140309442  浏览:    关键词:How do I format markdown chatgpt response in tkinter frame python?

题意:怎样在Tkinter框架中使用Python来格式化Markdown格式的ChatGPT响应?

问题背景:

Chatgpt sometimes responds in markdown language. Sometimes the respond contains ** ** which means the text in between should be bold and ### text ### which means that text is a heading. I want to format this correctly and display it properly in tkinter. If it's bold or a heading, it should be formatted to bold or to a heading in tkintter. How to do this?

ChatGPT有时会以Markdown语言回应。有时回应中包含** **,这表示中间的文本应该是粗体的;而### text ###则表示该文本是一个标题。我想在Tkinter中正确地格式化并显示这些文本。如果它是粗体或标题,则应该在Tkinter中以粗体或标题的形式显示。如何做到这一点?

My code:

import tkinter as tk
from tkinter import ttk
from datetime import datetime
import openai
import json
import requestshistory = []
# Create a function to use ChatGPT 3.5 turbo to answer a question based on the prompt
def get_answer_from_chatgpt(prompt, historyxx):global historyopenai.api_key = "xxxxxxx"append_to_chat_log(message="\n\n\n")append_to_chat_log("Chatgpt")print("Trying")messages = [{"role": "user", "content": prompt}]try:stream = openai.chat.completions.create(model="gpt-3.5-turbo",messages=messages,stream=True,)for chunk in stream:chunk = chunk.choices[0].delta.contentchunk = str(chunk)if chunk != "None":append_to_chat_log(message=chunk)append_to_chat_log(message="\n\n\n")print("Streaming complete")except Exception as e:print(e)return "Sorry, an error occurred while processing your request."# Create a function to use OpenAI to answer a question based on the search resultsdef append_to_chat_log(sender=None, message=None):chat_log.config(state="normal")if sender:chat_log.insert("end", f"{sender}:\n", "sender")if message:chat_log.insert("end", message)chat_log.config(state="disabled")chat_log.see("end")chat_log.update()def send_message(event=None):global historymessage = message_entry.get(1.0, "end-1c") message = message.strip()message_entry.delete(1.0, tk.END)message_entry.update()if not message:pass else:append_to_chat_log("User", message)history.append(("user", message))if len(history) >4:history = history[-4:]print(message)response = get_answer_from_chatgpt(message, history)history.append(("assistant", response))root = tk.Tk()root.title("Chat")# Maximize the window
root.attributes('-zoomed', True)chat_frame = tk.Frame(root)
chat_frame.pack(expand=True, fill=tk.BOTH)chat_log = tk.Text(chat_frame, state='disabled', wrap='word', width=70, height=30, font=('Arial', 12), highlightthickness=0, borderwidth=0)
chat_log.pack(side=tk.LEFT, padx=(500,0), pady=10)message_entry = tk.Text(root, padx=17, insertbackground='white', width=70, height=1, spacing1=20, spacing3=20, font=('Open Sans', 14))
message_entry.pack(side=tk.LEFT, padx=(500, 0), pady=(0, 70))  # Adjust pady to move it slightly above the bottom
message_entry.mark_set("insert", "%d.%d" % (0,0))
message_entry.bind("<Return>", send_message)root.mainloop()

问题解决:

I solved my own question        我解决了我自己提出的问题

import tkinter as tk
from datetime import datetime
import openaihistory = []# Create a function to use ChatGPT 3.5 turbo to answer a question based on the prompt
def get_answer_from_chatgpt(prompt, historyxx):global historyopenai.api_key = "xxxx"append_to_chat_log(message="\n\n\n")append_to_chat_log("Chatgpt")print("Trying")messages = [{"role": "user", "content": prompt}]try:stream = openai.chat.completions.create(model="gpt-3.5-turbo",messages=messages,stream=True,)buffer = ""heading =  ""bold = Falsewhile True:chunk = next(stream)chunk = chunk.choices[0].delta.contentchunk = str(chunk)if chunk != "None":buffer += chunkif "**" in buffer:while "**" in buffer:pre, _, post = buffer.partition("**")append_to_chat_log(message=pre, bold=bold)bold = not boldbuffer = postif "###" in buffer:while "###" in buffer:pre, _, post = buffer.partition("###")append_to_chat_log(message=pre, bold=heading)heading = not headingbuffer = postelse:append_to_chat_log(message=buffer, bold=bold)buffer = ""append_to_chat_log(message="\n\n\n")print("Streaming complete")except Exception as e:print(e)return "Sorry, an error occurred while processing your request."def append_to_chat_log(sender=None, message=None, bold=False, heading=False):chat_log.config(state="normal")if sender:chat_log.insert("end", f"{sender}:\n", "sender")if message:if bold:chat_log.insert("end", message, "bold")if heading:chat_log.insert("end", message, "heading")else:chat_log.insert("end", message)chat_log.config(state="disabled")chat_log.see("end")chat_log.update()def send_message(event=None):global historymessage = message_entry.get(1.0, "end-1c")message = message.strip()message_entry.delete(1.0, tk.END)message_entry.update()if not message:pass else:append_to_chat_log("User", message)history.append(("user", message))if len(history) > 4:history = history[-4:]print(message)response = get_answer_from_chatgpt(message, history)history.append(("assistant", response))root = tk.Tk()
root.title("Chat")# Maximize the window
root.attributes('-zoomed', True)chat_frame = tk.Frame(root)
chat_frame.pack(expand=True, fill=tk.BOTH)chat_log = tk.Text(chat_frame, state='disabled', wrap='word', width=70, height=30, font=('Arial', 12), highlightthickness=0, borderwidth=0)
chat_log.tag_configure("sender", font=('Arial', 12, 'bold'))
chat_log.tag_configure("bold", font=('Arial', 12, 'bold'))
chat_log.tag_configure("heading", font=('Arial', 16, 'bold'))
chat_log.pack(side=tk.LEFT, padx=(500,0), pady=10)message_entry = tk.Text(root, padx=17, insertbackground='white', width=70, height=1, spacing1=20, spacing3=20, font=('Open Sans', 14))
message_entry.pack(side=tk.LEFT, padx=(500, 0), pady=(0, 70))  # Adjust pady to move it slightly above the bottom
message_entry.mark_set("insert", "%d.%d" % (0,0))
message_entry.bind("<Return>", send_message)root.mainloop()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com