聊天机器人是一种通过文本或语音模拟人类对话的软件应用程序。创建聊天机器人的目的是回答常见问题(FAQ),为客户提供全时支持,处理咨询,并就需要人工干预的问题联系代理以获得进一步支持。
在本项目中,我将向您展示如何使用 Tkinter GUI(图形用户界面)工具包创建一个 Python 聊天机器人。该聊天机器人将处理咨询并回答有关 DevOps 工程领域的问题。
设置环境
- 安装 Python
- 在 bash/ VS Code 终端运行以下命令安装 Tkinter
pip install tk
- 创建文件夹并命名为 Chatbot
- 用 VS Code 打开文件夹
- 创建一个 Python 文件并命名为 Chatbot.py
设计用户界面
为了方便用户与聊天机器人互动,可以考虑设计一个像这样的简单图形用户界面。
要实现上述布局,您需要导入必要的库,并按如下顺序排列代码:
- 导入必要的库
from tkinter import *
import tkinter as tk
from tkinter import PhotoImage
from tkinter import Label, Tk
from PIL import Image, ImageTk
import datetime
- 创建日期和时间功能,根据来访时间问候客户。
# greetings based on time opening chatbot
current_time = datetime.datetime.now()
if 6 <= current_time.hour <= 12:
greeting = "Good Morning!"
elif 12 <= current_time.hour <= 16:
greeting = "Good Afternoon!"
else:
greeting = "Good Evening!"
- 根据大小、颜色和字体创建 Tkinter GUI 主界面。
# Tkinter UI/UX design
root=Tk()
root.title('DevOps Chatbot')
root.geometry('720x400+150+100')
root.configure(bg='light blue')
root.resizable(False, False)
- 创建聊天机器人的标题
# Heading label to inform the user what to do
heading = Label(root, text=f"{greeting} 😄. I'm DevOps Chatbot. I have DevOps answers for you from the drop-down menu.", fg='#000', bg='white', font=('Microsoft YaHei UI Light', 10, 'bold'))
heading.place(x=10, y=5)
标题之后是下拉菜单。在设计中适当添加用户感兴趣或可能提出的必要问题。尽量精确地编写问题,因为它们将从 JSON 文件中获取数据。
# Dropdown Menu for the user to select
dropdown = tk.StringVar()
dropdown.set("Select a response")
dropdown_menu = tk.OptionMenu(root, dropdown, "What is DevOps", "DevOps Principles", "Benefits of adopting DevOps", "DevOps Career Paths", "DevOps Tools", "Learning Resources")
dropdown_menu.grid(row=1, column=0, padx=100, pady=100)
dropdown_menu.place(x=10, y=40)
dropdown_menu.config(width=70)
- 创建显示答案的区域
#This is where the user answers will be displayed
chat_history = Text(root, fg='black', border=2, bg='white', height=17, width=57, font=("cambria", 11))
chat_history.place(x=10, y=90)
- 为导航和与聊天机器人互动创建必要的按钮
该聊天机器人将有三个按钮;
- 点击获取答案按钮将显示与所选问题相对应的答案。
- 清除屏幕按钮将清除聊天区域的所有数据。
- 关闭窗口按钮将关闭聊天机器人。
下面的代码展示了如何设计按钮。
# Button to ask the question
ask = Button(root, width=25, pady=7, text="Click for Answers", fg='black').place(x=500, y=90)
# Button to clear the screen
clear = Button(root, width=25, pady=7, text="Clear Screen", fg='black')
clear.place(x=500, y=150)
# Button to exit the chatbot
exit = Button(root, width=25, pady=7, text="Close Window", fg='black')
exit.place(x=500, y=210)
- 显示 DevOps 图像
下载镜像并将其复制到当前目录,根据您的需要将图像调整为特定尺寸。
设置显示图像的位置。
# Open the image using Pillow
pil_img = Image.open('devops.png')
# Resize the image to specific dimensions (adjust width and height as needed)
width, height = 180, 110
pil_img = pil_img.resize((width, height), Image.BICUBIC)
# Convert Pillow image to Tkinter-compatible format
tk_img = ImageTk.PhotoImage(pil_img)
# Create a Label image to display the image
Label(root, image=tk_img, bg="white").place(x=500, y=270)
root.mainloop()
使用 VS 代码运行命令或运行以下命令运行代码;
python Chatbot.py
构建聊天机器人逻辑
创建后台
该聊天机器人将从 JSON 文件加载数据,将数据存储在字典中,然后在字典中创建列表。
在您的目录中创建一个新文件,并将其命名为 answers.json
从客户那里获得所需的常见问题后,根据问题创建主题。这些问题将用于下拉菜单。对主题的进一步阐述将存储在 answers.json 文件中。
问题示例如下:
DevOps 职业道路
会有 DevOps 工程师这样的答案,并附有对角色的解释,如 在实施和管理 DevOps 实践中发挥核心作用。他们负责自动构建、部署和发布流程,配置和管理基础设施,并确保开发和运营团队之间的顺利协作。
选择一个你喜欢的细分市场,并为之努力。
处理用户输入并生成回复
我们的聊天机器人有一个下拉菜单、一个聊天区、一个点击获取答案按钮、一个清屏和一个关闭窗口。
当用户从下拉菜单中选择一个测验并点击获取答案按钮时,必须在聊天区显示答案。
操作逻辑如下:
点击获取答案
# Create a dictionary to keep track of the last selected response index
last_selected_index = {}
# Response answer based on the selected question
def random_answers():
selected_response = dropdown.get()
if selected_response in answers:
responses_list = answers[selected_response]
if responses_list:
# Display the questions in order
last_index = last_selected_index.get(selected_response, -1)
last_index = (last_index + 1) % len(responses_list)
selected_response_text = responses_list[last_index]
last_selected_index[selected_response] = last_index
# View answers on the chatbot
chat_history.config(state=tk.NORMAL)
chat_history.insert(tk.END, f"{selected_response_text}\n\n")
chat_history.config(state=tk.DISABLED)
else:
chat_history.config(state=tk.NORMAL)
chat_history.insert(tk.END, "I don't have a response for that.\n\n")
chat_history.config(state=tk.DISABLED)
创建一个函数,用于按顺序检索 JSON 文件中的数据,并在点击 “Click for answers
“按钮时在聊天区查看答案。
更新 Tkinter 用户界面代码,如下所示:
# Button to ask the question
ask = Button(root, command=random_answers, width=25, pady=7, text="Click for Answers", fg='black').place(x=500, y=90)
清除屏幕
用户点击此按钮后,聊天区域的所有数据都将被删除。(聊天记录不会保存,但可以保存聊天记录)。
为 “Clear Screen
“按钮创建一个删除聊天记录的功能。
# Clear the chat history
def clear_screen():
chat_history.config(state=tk.NORMAL)
chat_history.delete('1.0', tk.END)
chat_history.config(state=tk.DISABLED)
关闭窗口
此按钮将退出用户界面并结束与用户的所有交互。
该按钮的功能如下:
# exit the chatbot
def exit_chat():
root.quit()
完成上述代码后,您应该可以选择下拉菜单、清除屏幕和关闭窗口。点击获取答案将不起作用,因为我们还没有将前台与后台集成。
将前台与后台集成
设计完用户界面和 JSON 文件后,我们的最终目标是实现一个功能性聊天机器人,当用户与界面互动时,聊天机器人会返回回复。
import json
# Load initial responses from a JSON file
answers = {}
try:
with open('answers.json', 'r') as file:
answers = json.load(file)
except FileNotFoundError:
answers = {}
这段 Python 代码从名为 answers.json 的 JSON 文件中加载初始响应。它首先初始化一个名为 answers 的空字典。然后,使用 with 语句尝试以读取模式打开 JSON 文件。如果找到文件,它就会使用 json.load() 函数将文件内容加载到 answers 字典中。如果没有出现 FileNotFoundError,它就会将答案字典保持为空。
测试集成
在终端上运行此命令打开用户界面并与聊天机器人交互,以验证聊天机器人是否功能完备,是否可以部署和发布。
python chatbot.py
如果聊天机器人运行无误,您就可以决定在自己的机器上使用它,或者创建一个可执行文件用于部署和分发。
结论
聊天机器人是组织内理想的交流工具,因为它们可以与用户一起回答常见问题(FAQ),聊天机器人还可以通过提供网站链接和组织客户服务联系方式,将用户重新引导到其他地方寻求进一步帮助。
聊天机器人可以根据用户或组织的需求轻松修改和更新。如今,人工智能已与聊天机器人相结合,聊天机器人可以在用户与它互动时学习,并相应调整回复。
作者:Joshua Muriki
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/47999.html