
lOMoARcPSD| 58707906
TRƯỜNG ĐẠI HỌC HẢI PHÒNG
Khoa Công nghệ thông tin
BÀI TẬP LỚN TRÍ TUỆ NHÂN TẠO
Đề tài: Xây Dựng Chatbox
SVTH
:
GVHD:
Năm 2024
M
ục Lục

lOMoARcPSD| 58707906
1. Chatbot là gì
Chatbot là các ứng dụng phần mềm được thiết kế để giao tiếp với người dùng internet
bằng văn bản như người thật. Tại Việt Nam, FPT.AI Conversation cung cấp nền tảng
để tạo lập và quản lí chatbot với giao diện người dùng. Bởi được trang bị công nghệ
xử lý ngôn ngữ tự nhiên tiếng Việt tốt nhất thị trường và hệ thống quản lí hội thoại
tối ưu, chatbot của FPT.AI cung cấp cho các doanh nghiệp một giải pháp xây dựng
chatbot hoàn chỉnh.
Chatbot tương tác với người dùng như hệ thống trả lời tin nhắn tự động, nhưng thông
minh hơn rất nhiều. Bằng cách xây dựng các kịch bản hội thoại sử dụng phương
pháp Học Máy (Machine Learning), AI Chatbot có thể tự học, tự hiểu các câu hỏi,
nhu cầu, mong muốn của người dùng và đưa ra các câu trả lời phù hợp.
Chatbot của FPT.AI có thể tích hợp trên nhiều nền tảng và giao diện trò chuyện khác
nhau, giúp tự động hóa các cuộc hội thoại giữa doanh nghiệp và khách hàng, góp
phần đẩy mạnh bán hàng, mở rộng quy mô vận hành và mang đến sự hài lòng cho
khách hàng.
2. Mục đích của Chatbot
Chatbot được tạo ra để hỗ trợ con người trong lĩnh vực dịch vụ khách hàng ở mức
độ sơ cấp với những tác vụ được lặp đi lặp lại nhàm chán. Do đó, các doanh nghiệp
sẽ loại bỏ được những áp lực về mặt nhân sự, đội ngũ tư vấn viên có thể tập trung
giải quyết các công việc ở mức độ chuyên sâu và cấp thiết hơn.
Với mỗi loại hình doanh nghiệp, chatbot lại được ứng dụng theo các cách khác nhau.
Một số nhiệm vụ chính của chatbot đang được nhiều doanh nghiệp áp dụng như:
• Tư vấn, trả lời các câu hỏi thường gặp, 24/7 cho khách hàng
• Hỗ trợ các chiến dịch marketing (gửi thông tin về chương trình khuyến mãi, giảm
giá, ra mắt sản phẩm mới…)
• Gợi ý, tìm kiếm, báo giá các sản phẩm, dịch vụ theo yêu cầu của khách hàng
• Đặt lịch hẹn, đặt bàn, đặt phòng, đặt vé máy bay… Tiếp nhận các thông tin khai
báo, mở tài khoản, mở thẻ… Thanh toán hóa đơn đặt hàng.
3. Các loại Chatbot phổ biến
Chatbot được chia làm 3 loại chính: Clicking Bot, NLP Bot và NLP & Dialogue
Management Bot.

lOMoARcPSD| 58707906
• Clicking Bot là một loại Chatbot mà người dùng có thể giao tiếp bằng cách nhấn
vào các nút được thiết kế sẵn trong Bot để dẫn dắt đến vấn đề cần hỏi. Clicking Bot
không hiểu được nội dung tin nhắn mà khách hàng gửi đến.
• NLP Bot là Chatbot sử dụng công nghệ Học Máy và Xử lý ngôn ngữ tự nhiên
(Natural Language Processing - NLP). Với NLP Bot, người dùng có thể tự gõ các
câu hỏi bất kỳ và bot có thể hiểu được dựa trên dữ liệu đã được đào tạo từ trước.
Các trường dữ liệu bao gồm: câu mẫu, ý định, thực thể.

lOMoARcPSD| 58707906
• NLP & Dialog Management Bot là loại Chatbot toàn diện nhất, đa dạng cách xử lí
(vừa có các nút như Clicking Bot, vừa hiểu được ý định của người dùng như NLP
Bot). Và đặc biệt, NLP & Dialog Management Bot có khả năng ghi nhớ ngữ cảnh
hội thoại của người dùng.

lOMoARcPSD| 58707906
Nền tảng tạo bot của FPT.AI Conversation cho phép xây dựng cả 3 loại chatbot trên,
nhưng được ưa chuộng hơn cả là NLP & Dialog Management Bot. Đây là loại bot
toàn diện nhất, chúng có khả năng học hỏi và thông minh hơn theo thời gian, đáp
ứng yêu cầu khắt khe của nhiều doanh nghiệp khó tính.
Ngoài ra, FPT.AI Conversation còn có giao diện tạo bot thân thiện, giao diện quản
lí hội thoại tối ưu, và dễ dàng tích hợp trên nhiều kênh giao tiếp khác nhau.
4. Hướng Dẫn Lập Trình Chatbot Với Python
Hạn chế của chatbot
Nền tảng: Trí tuệ nhân tạo là cái nhân của con chatbot, tuy nhiên để tạo ra được
chatbot có thể nói chuyện như người thật thì thực sự vẫn còn khá xa.
Nội tâm: Khả năng vấn đáp của chatbot còn hạn chế, các lỗi xuất hiện có tính hệ
thống.
Chúng ta hy vọng với những tiến bộ của ngành trí tuệ nhân tạo hiện nay có thể tạo
ra được một con robot giao tiếp tốt như con người.
Nguyên lý làm việc
Chúng ta chia chatbot làm 2 hướng:

lOMoARcPSD| 58707906
Rule-Based Approach: Với phương pháp này, bot được lập trình theo những
nguyên tắc có sắc. Bot có thể trả lời những truy vấn đơn giản nhưng với truy vấn
phức tạp thì không.
Self-Learning Approach: Bot được huấn luyện dựa trên các thuật toán học mày
. Chúng ta tiếp tục chia làm 2 loại:
Retrieval-Based Models: Với phương pháp này, bot chọn ra
câu trả lời tốt nhất trong danh sách các câu trả lời theo truy vấn của người dùng.
Generative Models: Những mô hình này sẽ tự đưa ra câu trả lời thay vì chọn câu
trả lời trong một bộ câu trả lời điều này làm bot ngày càng trở nên thông minh.
Thư viện ChatterBot trong Python
ChatterBot là một công cụ tạo ra một chatbot tự động dựa trên cơ sở học máy
machine learning bằng ngôn ngữ Python. chính là một freamwork cho
(Chatbot AI) để tạo ra những con bot thông minh để bạn có
thể tích hợp vào những công cụ chat như Facebook, Skype hoặc chính là là
những nền tảng chat do các bạn tự tạo ra. được thiết kế dựa trên
Python là một ngôn ngữ xử lý ngôn ngữ hàng đầu cho phép ChatterBot
có để đào tạo bất kỳ ngôn ngữ nào. Kể cả ngôn ngữ Tiếng Việt.
Đặc biệt do ChatterBot là dự án mã nguồn mở nên bạn hoàn toàn của thể nghiên cứu
phát triển và kiểm soát được toàn bộ mã nguồn cũng như cơ sở dữ liệu. Điều này
làm bảo mật toàn bộ thông tin con bot mà bạn phát triển không phải phụ thuộc vào
bất kỳ nền tảng do một bên thứ 3 nào như ….
Quy trình hoạt động chatterbot
Các Chatbot hoạt động bằng cách sử dụng phương pháp phát hiện trùng khớp các
mẫu câu để tìm kiếm các mẫu câu có trong câu hỏi của người
machine
learning
ChatterBot
ChatAI
ChatterBot
Wit.AI
Pattern
matchers

lOMoARcPSD| 58707906
dùng và xem có khớp với các câu hỏi đã được "huấn luyện" lưu trữ trong hệ thống
để đưa ra các câu trở lời phù hợp nhất. Ban đầu câu hỏi người dùng được đưa vào
tiếp theo đó chúng ta sử dụng các đã định nghĩa từ trước để chia nhỏ câu hỏi
thành từng pattern con. Tiếp theo ta sử dụng các thuật toán học máy để xác
định câu hỏi khớp nhất trong các câu hỏi đã được định nghĩa từ trước. Sau đó với
câu hỏi ta chọn được khớp nhất ta sẽ chọn câu trả lời từ tập câu trả lời được định
nghĩa trước bởi câu hỏi đó. Cuối cùng, trả lời cho người dùng câu trả lời ta tìm được.
Chuẩn bị
: là cái nhân của chatbot. Đây là thư viện phục vụ việc nhận tin nhắn
của người dùng rồi học cách để trả lời cho tin nhắn đó.
: Tạo giao diện browser tương tác thực với người dùng.
Mình tải và cài đặt
.
Thư viện chatterbot
Cài đặt thư viện
Bạn có thể cài đặt thư viện vào hệ thống sử dụng :
pip install chatterbot
Sau đó ta sẽ thử làm chatbot với vài dòng lệnh đầu tiên. Một con chatbot sẽ được
hoàn thiện trong 3 phần Phần 1: Tạo chatbot
Từ thư viện chatterbot import đối tượng ChatBot với mục đích khởi tạo một con
chatbot. Sau đó ta tạo một chatbot tên Ron Obvious rồi gán vào biến chatbot.
from chatterbot import
ChatBot
chatbot = ChatBot("Ron
Obvious")
Phần 2: Huấn luyện ChatBot
Sau khi tạo một con ChatterBot. Việc tiếp theo là ta phải huấn luyện con bot để nó
học được những kiến thức ban đầu với những câu trả lời cụ thể. Phương pháp đào
tạo mà thư viện cho phép là cho một đoạn hội thoại ngắn đại diện là một list các câu
hội thoại của bot và mình. Bot sẽ tự động trả lời theo ngữ cảnh mà mình cài đặt
trước.
pattern
Chatterbot
Flask
Visual Studio Code
trên máy tính để chạy code
Python
pip

lOMoARcPSD| 58707906
from chatterbot.trainers import ListTrainer
conversation = [
"Hello",
"Hi there!",
"How are you doing?",
"I'm doing great.",
"That is good to hear",
"Thank you.",
"You're welcome."
]
trainer = ListTrainer(chatbot)
trainer.train(conversation)
Phần 3: Chọn câu trả lời
Con bot sẽ nhận một tin nhắn sau đó từ những kiến thức nó học được, nó sẽ trả lời
theo ngữ cảnh nó được học từ trước và ngữ cảnh mình vừa huấn luyện cho bot.
response = chatbot.get_response("Good morning!")
print(response)
Sau đây, kết hợp với thư viện chạy trên nền tảng .
Flask
, chúng ta sẽ tạo
Flask ChatterBot App
web

lOMoARcPSD| 58707906
Ta chia thành 3 phần:
Phần 1: Main chatbot. Thư viện chatterbot đảm nhiệm nhiệm vụ này. Các câu trả
lời sẽ được đưa ra khi nhập tin nhắn người dùng vào.
Phần 2: GUI. Thư viện Flask là thư viện tạo ra với mục đích viết app nền tảng web
bằng Python. Ta sẽ giao diện hóa những gì Chatterbot làm được.
Phần 3: Dữ liệu. Các file SQLite và file Pickle sẽ được tạo thêm với nhiệm vụ lưu
dữ liệu mà chatbot huấn luyện được.
Use Case – Flask ChatterBot

lOMoARcPSD| 58707906
<!DOCTYPE html>
<html>

lOMoARcPSD| 58707906
<head>
<link rel="stylesheet" type="text/css" href="/static/style.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<h1>Flask Chatterbot Example</h1>
<h3>A web implementation of <a
href="https://github.com/gunthercox/ChatterBot">ChatterBot</a> using
Flask.</h3> <div>
<div
id="chatbox">
<p
class="botText"><span>Hi!
I'm Chatterbot.</span></p>
</div>
<div
id="userInput">
<input
id="textInput"
type="text" name="msg"
placeholder="Message">
<input
id="buttonInput"
type="submit"
value="Send">
</div>
<script>
function getBotResponse() { var
rawText = $("#textInput").val();
var userHtml = '<p class="userText"><span>' + rawText + '</span></p>';
$("#textInput").val("");
$("#chatbox").append(userHtml);
document.getElementById('userInput').scrollIntoView({block: 'start',
behavior: 'smooth'});
$.get("/get", { msg: rawText }).done(function(data) {
var botHtml = '<p class="botText"><span>' + data + '</span></p>';

lOMoARcPSD| 58707906
$("#chatbox").append(botHtml);
document.getElementById('userInput').scrollIntoView({block: 'start',
behavior: 'smooth'});
});
}
$("#textInput").keypress(function(e) {
if(e.which == 13) {
getBotResponse();
}
});
$("#buttonInput").click(function() {
getBotResponse();
})
</script>
</div>
</body>
</html>
File Style.css
body {
font-family: Garamond;
}
h1
{
color: black;
margin-bottom: 0;

lOMoARcPSD| 58707906
margin-top: 0;
text-align: center;
font-size: 40px;
}
h3
{
color:
black;
font-size:
20px;
margin-top:
3px;
text-align:
center;
}
#chatbox {
margin-left:
auto;
margin-right:
auto;
width:
40%;
margin-top:
60px;
}
#userInput {
margin-left:
auto;
margin-right:
auto;
width:
40%;
margin-top:
60px;
}
#textInput {

lOMoARcPSD| 58707906
width:
87%;
border:
none;
border-
bottom: 3px
solid #009688;
font-
family:
monospace;
font-
size: 17px;
}
#buttonInput {
padding:
3px;
font-family:
monospace;
font-size:
17px;
}
.userText {
color:
white;
font-family:
monospace;
font-size:
17px;
text-
align: right;
line-
height: 30px;
}
.userText span {
background-color: #009688;

lOMoARcPSD| 58707906
padding: 10px;
border-radius: 2px;
}

lOMoARcPSD| 58707906
.botText {
color:
white;
font-family:
monospace;
font-size:
17px;
text-
align: left;
line-
height: 30px;
}
.botText span {
background-color: #EF5350;
padding: 10px;
border-radius: 2px;
}
#tidbit {
position:absolute;
bottom:0;
right:0;
width: 300px;
}

lOMoARcPSD| 58707906
Sau khi chạy file chatbot sẽ huấn luyện dữ liệu từ kho dữ
liệu có sẵn của chatterbot. Trong kho dữ liệu
gồm rất
nhiều lĩnh vực. Mỗi lĩnh vực sẽ được lưu trữ dữ liệu dưới dạng file yml. Trong file
sẽ gồm 2 phần biểu thị cặp câu hỏi
và trả lời tương ứng. Chatbot sẽ học
những dữ liệu này để phản hồi lại tin nhắn của mình.
app.py
chatterbot.corpus.english
categories
biểu thị chủ đề còn
conversations

lOMoARcPSD| 58707906
Quá trình chatbot huấn luyện dữ liệu. Tất cả chủ đề đều được huấn luyện. Như trên
mình chỉ biểu thị chủ đề về AI.
Sau khi chạy file app.py, ta sẽ kết nối với đang web mà thư viện Flask vừa tạo qua
đường link http://127.0.0.1:5000/

lOMoARcPSD| 58707906
Kết luận
Bài viết hướng dẫn cơ bản về 2 thư viện Chatterbot và Flask để làm một con chatbot
đơn giản.
Tuy nhiên, để nâng cao hiệu quả chatbot mình phải có tập huấn luyện đa dạng, đủ
tốt để bot học được nhiều kiến thức hơn.
Một con chatbot đơn giản giúp chúng ta hiểu hơn về quy trình xử lý ngôn ngữ tự
nhiên NLP, cách một chatbot hoạt động hơn nữa đây là nền tảng để chúng ta làm
một con trợ lý ảo có thể giao tiếp trực tiếp bằng giọng nói với mình.
Bấm Tải xuống để xem toàn bộ.
Preview text:
Flask Chatterbot Example
A web implementation of href="https://github.com/gunthercox/ChatterBot">ChatterBot using Flask. id="chatbox">
class="botText">Hi! I'm Chatterbot. id="userInput"> id="textInput" type="text" name="msg" placeholder="Message"> id="buttonInput" type="submit" value="Send">