đồ án 1 nghiên cứu và tìm hiểu các thuật toán thông minh áp dụng cho chatbot libre

93 0 0
Tài liệu đã được kiểm tra trùng lặp
đồ án 1 nghiên cứu và tìm hiểu các thuật toán thông minh áp dụng cho chatbot libre

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TÓM TẮTĐồ án với đề tài “Nghiên cứu thuật toán thông minh và ứng dụng vàoChatbot Libre” tập trung vào việc nghiên cứu và ứng dụng các thuật toán thôngminh nhằm ứng dụng vào Chatbot Libre

Trang 1

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TINKHOA CÔNG NGHỆ PHẦN MỀM

LƯƠNG LÊ DUY TIẾN - 21520478PHẠM NGUYỄN MINH KHOA - 21521003

ĐỒ ÁN 1

NGHIÊN CỨU VÀ TÌM HIỂU CÁC THUẬT TOÁN THÔNG MINH, ÁPDỤNG CHO CHATBOT LIBRE

TP HỒ CHÍ MINH, THÁNG 12 NĂM 2023

Trang 2

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINHTRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

Trang 3

LỜI CẢM ƠN

Kính thưa quý thầy cô giáo,

Trước hết, em xin gửi lời cảm ơn chân thành nhất tới thầy Nguyễn Trịnh Đông đãtận tình giảng dạy, hướng dẫn và giúp đỡ em trong suốt quá trình thực hiện đề tài"Nghiên cứu thuật toán thông minh và ứng dụng vào Chatbot Libre" Thầy đãtruyền đạt cho em những kiến thức quý báu và giúp em định hướng rõ ràng để cóthể tiếp cận và nghiên cứu đề tài một cách hiệu quả.

Thông qua quá trình nghiên cứu, em đã có thêm những kiến thức và kinh nghiệmquý báu về lĩnh vực thuật toán thông minh và ứng dụng của nó vào chatbot Em hyvọng những kiến thức này sẽ giúp ích cho em trong quá trình học tập và nghiên cứusau này.

Một lần nữa, em xin chân thành cảm ơn quý thầy cô giáo, các bạn bè và người thânđã giúp đỡ em hoàn thành đề tài.

Thành phố Hồ Chí Minh, tháng 11 năm 2023

Lương Lê Duy TiếnPhạm Nguyễn Minh Khoa

Trang 4

TÓM TẮT

Đồ án với đề tài “Nghiên cứu thuật toán thông minh và ứng dụng vàoChatbot Libre” tập trung vào việc nghiên cứu và ứng dụng các thuật toán thôngminh nhằm ứng dụng vào Chatbot Libre để từ đó có thể cải thiện Chatbot Libre trởthành một công cụ hữu ích hơn cho người dùng và các doanh nghiệp trong nhiềulĩnh vực khác nhau từ dịch vụ khách hàng đến giáo dục và giải trí Từ đó, có thểgiúp cho người sử dụng tiết kiệm được chi phí, cải thiện trải nghiệm khách hàng vàmở rộng phạm vi tiếp cận.

Đề tài được bắt đầu từ việc tìm hiểu về nền tảng Bot Libre Đây là một nềntảng cho việc tạo ra và quản lý các chatbot và trí tuệ nhân tạo(AI), có khả năng tạovà tùy chỉnh chatbot một cách dễ dàng, giúp người phát triển có thể tùy chỉnh cáctính năng của chatbot theo nhu cầu cụ thể Về phần các thuật toán thông minh,nhóm chúng em đã tìm hiểu các thuật toán thông minh hiện có, phân tích ưu nhượcđiểm của từng thuật toán và lựa chọn các thuật toán phù hợp với yêu cầu củaChatbot Libre Đối với đề tài này, nhóm chúng em sẽ tập trung nghiên cứu các thuậttoán liên quan đến xử lý ngôn ngữ tự nhiên(NLP), thuật toán học máy(MachineLearning), thuật toán trí tuệ nhân tạo(AI) vì đây là các thuật toán quan trọng đốivới việc phát triển Chatbot Sau đó đề tài sẽ thực hiện xây dựng và triển khai cácthuật toán này trên Chatbot Libre Sau khi đã tìm hiểu về các thuật toán thông minhcũng như về Chatbot Libre, nhóm chúng em bắt tay vào việc xây dựng mô hình,chuẩn bị các tập dữ liệu và cả kịch bản để cài đặt và huấn luyện cho Chatbot Vàcông đoạn cuối cùng là công đoạn đánh giá xem Chatbot có hoạt động đúng đắn vàcó khả năng tương tác hiệu quả với người dùng.

Phần cuối cùng của đồ án là trình bày kết quả đã thực hiện lên cuốn báocáo, đưa ra kết luận và hướng phát triển cho hệ thống trong tương lai.

Nội dung đồ án được trình bày trong 4 chương:- Chương 01: Giới thiệu

Trang 5

Giới thiệu chung về các vấn đề liên quan đến đề tài: Chatbot Libre và cácthuật toán thông minh.

- Chương 02: Kiến thức nền tảng

Trình bày về những kiến thức cần có để có thể thực hiện, tham gia vào việccài đặt, tùy chỉnh và phát triển chatbot theo mong muốn của bản thân.

-Chương 03: Cài đặt và thử nghiệm

Trình bày về yêu cầu cho việc cài đặt, quá trình cài đặt và triển khai thuậttoán thông minh trên chatbot.

-Chương 04: Kết luận

Từ quá trình nghiên cứu và cài đặt chatbot cũng như các thuật toán thôngminh, đưa ra kết luận về những ưu điểm, hạn chế và hướng phát triển cho đề tài.

Trang 6

Chương 1 Giới thiệu 13

1.1 Giới thiệu về Chatbot Libre 13

Trang 7

2.4.2 XML 31

2.5 Cơ sở dữ liệu - PostgreSQL 31

2.6 Web Server - Tomcat 32

2.7 SSL - Secure Sockets Layer 33

2.11.3 Response Lists & Chat Logs 37

2.12 Xử lý ngôn ngữ tự nhiên - Natural Language Processing - NLP 38

2.12.1 Keyword Heuristic - Suy nghiệm từ khóa 38

2.12.2 Pattern Keyword Heuristic - Suy nghiệm từ khóa từ khóa 41

2.12.3 Patterns 41

2.12.4 State Machine - Máy trạng thái 42

2.12.5 Scripting 44

2.13 Học sâu - Deep Learning 45

2.13.1 Mạng Neuron - Neural Network 45

2.13.2 Mạng Neuron Tích Chập - Convolutional Neural Network - CNN 48

2.13.3 Mạng Neuron Hồi Quy - Recurrent Neural Network - RNN 49

2.13.4 Long - Short Term Memory - LSTM 51

2.14 Question - Answering System - QA System 55

2.15 Tập dữ liệu - Dataset 56

Chương 3 Cài đặt và thử nghiệm 58

3.1 Cài đặt và triển khai 58

3.1.1 Môi trường cài đặt 58

3.1.2 Hướng dẫn cài đặt 58

3.2 Hướng dẫn sử dụng 62

3.2.1 Hướng dẫn đăng nhập 62

3.2.2 Hướng dẫn khởi tạo bot mới 65

3.2.3 Training & Chat Logs 72

3.2.4 Nhật ký trò chuyện: 73

Thêm phản hồi mới: 74

Thêm phản hồi lời chào: 75

Thêm phản hồi mặc định: 76

Trang 8

Xem lại tất cả các phản hồi: 77

3.3 Thuật toán thông minh và Chatbot Libre - Neural Network 80

3.3.1 Cài đặt thuật toán 80

Trang 9

Hình 2.3.1.1 Logo JavaHình 2.3.2.1 Logo JavaScript

2 CNN Convolutional Neural Network: Mạng neuron tích chập3 RNN Recurrent Neural Network: Mạng neuron hồi quy4 LSTM Long - Short Term Memory: Bộ nhớ dài - ngắn hạn5 QA Question - Answering: Hỏi - Đáp

6 NLP Natural Language Processing: Xử lý ngôn ngữ tự nhiên

Trang 10

Hình 2.3.3.1 Logo PythonHình 2.3.4.1 Logo Objective-CHình 2.3.5.1 Logo PHP

Hình 2.4.1.1 JsonHình 2.4.2.1 XML

Hình 2.5.1 Logo PostgreSQLHình 2.6.1 Logo Tomcat

Hình 2.12.1.1 Cơ chế NLP bằng phương pháp suy nghiệm từ khóaHình 2.12.4.1 Cơ chế NLP bằng State Machine - Máy trạng tháiHình 2.13.1.1 Hình vẽ đơn giản hóa một mạng thần kinh nhân tạo

Hình 2.13.1.2 Hoạt động cơ bản bên trong một hidden layer của mạng neuronHình 2.13.1.3 Một số loại activation phổ biến

Hình 2.13.2.1 Sơ đồ Mạng neuron tích chập với 2 hidden layer.Hình 2.13.3.1 Lưu lại thông tin từ bước tính toán trước.

Hình 2.13.3.2 Cơ chế hoạt động của Mạng neuron hồi quyHình 2.13.4.1 Cấu trúc bên trong một mô-đun của LSTM.Hình 2.13.4.2 Xem thông tin nào cần bỏ đi từ trạng thái tế bào

Hình 2.13.4.3 Quyết định xem thông tin mới nào sẽ lưu vào trạng thái tế bàoHình 2.13.4.4 Cập nhật trạng thái tế bào

Hình 2.13.4.5 Quyết định đầu ra

Hình 3.1.2.1 Hình git clone github BotLibreHình 3.1.2.2 Truy cập đường dẫn chứa file docker

Trang 11

Hình 3.1.2.3 Sau khi chạy lệnh compose upHình 3.1.2.4 Sau khi chạy thành côngHình 3.1.2.5 Mở máy chủ

Hình 3.2.1.1 Màn hình chính sau khi host bot.Hình 3.2.1.2 Màn hình đăng nhập

Hình 3.2.1.3 Màn hình sau khi đăng nhậpHình 3.2.1.4 Màn hình chứa tất cả bot đã tạo.Hình 3.2.1.5 Màn hình thư mục Bots

Hình 3.2.2.1 Màn hình khởi tạo bot

Hình 3.2.2.2 Sau khi điền những thông tin cho bot

Hình 3.2.2.3 Sau khi khởi tạo bot thành công và thông tin cơ bản của botHình 3.2.2.4 Hộp thoại trò chuyện với bot

Hình 3.2.2.5 Màn hình “Admin Console”

Hình 3.2.2.6 Màn hình Config cho Language và Voice

Hình 3.2.2.7 Màn hình config cho việc learning & setting của bot

Hình 3.2.3.1 Màn hình Training & Chat LogHình 3.2.4.1 Nhật ký trò chuyện

Hình 3.2.4.2 Thêm phản hồi mới

Hình 3.2.4.3 Sau khi training cho bot một phản hồiHình 3.2.4.4 Thêm phản hồi về lời chào

Hình 3.2.4.5 Sau khi thêm phản hồi về lời chào cho bot

Trang 12

Hình 3.2.4.6 Thêm phản hồi mặc định

Hình 3.2.4.7 Sau khi thêm phản hồi mặc địnhHình 3.2.4.8 Xem lại tất cả các phản hồiHình 3.2.4.9 Màn hình Scripts

Hình 3.2.4.10 Thao tác “Thêm”, “Xóa”, “Sửa” với các scriptsHình 3.2.4.11 Màn hình Edit Scripts

Hình 3.2.4.12 Màn hình Import scriptsHình 3.3.1.1 Class ActivationFunction

Hình 3.3.1.2 Class SigmoidActivationFunctionHình 3.3.1.3 Class TanhActivationFunctionHình 3.3.1.4 Class NeuralNetwork

Hình 3.3.2.1 Khai báo đối tượng network thuộc class NeuralNetworkHình 3.3.2.2 Đặt 2 chỉ số LearningRate và Momentum

Hình 3.3.2.3 Đối tượng network gọi phương thức forwardPropagate()

Hình 3.3.2.4 Định nghĩa phương thức forwardPropagate() trong classNeuralNetwork

Hình 3.3.2.5 Đối tượng network gọi phương thức backPropagate()

Hình 3.3.2.6 Định nghĩa phương thức backPropagate() trong classNeuralNetwork

DANH MỤC CÁC BẢNG

Trang 13

CHƯƠNG1 GIỚI THIỆU

1.1.Giới thiệu về Chatbot Libre

Botlibre là một nền tảng chatbot mở và miễn phí được phát triển bởi PaphusSolutions Inc BotLibre được xây dựng và triển khai bằng ngôn ngữ lập trình Java.Java là một ngôn ngữ lập trình phổ biến, đa nền tảng và linh hoạt, thường được sửdụng cho các ứng dụng đòi hỏi độ tin cậy cao và tính chuyển động Việc sử dụngJava giúp BotLibre có thể chạy trên nhiều môi trường khác nhau và làm cho nó trởnên dễ tích hợp vào các hệ thống và dự án phức tạp BotLibre hỗ trợ nhiều nền tảngkhác nhau để tích hợp chatbot vào ứng dụng di động, trang web, hoặc dự án khác.

1.2.Chức năng

● Web Hosting: Bot Libre cung cấp lưu trữ bot trên web dễ dàng Bên cạnh đócòn cho phép tùy chỉnh trang bot bằng HTML, cho phép bạn điều chỉnh giaodiện phù hợp với sở thích.

● NLP: botlibre cho phép các project sử dụng các phân tích deep-learning đểphân loại hình ảnh và phân tích dữ liệu Bên cạnh đó Libre còn hỗ trợ sửdụng các thư viện mở và miễn phí về phân tích deep-learning Sử dụng APIweb để tích hợp khả năng học sâu và quy trình làm việc.

● Scripts: Việc tạo scripts trở nên dễ dàng hơn khi mà bot Libre hỗ trợ nhiềungôn ngữ để tạo scripts như Self scripts, AIML mang lại tính linh hoạt vàkhả năng tương thích cho project của người sử dụng Việc tận dụng sức mạnhcủa học máy để tinh chỉnh bot theo thời gian để có trải nghiệm trò chuyệnthông minh và thú vị hơn.

● Deep Learning: Cho phép các dự án của người sử dụng các phân tích học sâuđể cải thiện bot libre hơn Hỗ trợ các thư viện miễn phí về học sâu nhằmtăng khả năng của bot hơn.

● Create online bot: BotLibre đã đơn giản hóa quá trình tạo ra một con bot cánhân Với tính năng tạo bot nhanh chóng chỉ thông qua một vài thao tác,

Trang 14

người dùng đã có thể sở hữu một con bot để học tập, giải trí,v.v Từ thư việncác bot mẫu đa dạng, người dùng có thể chọn loại bot

● Voice: BotLibre cho phép sử dụng giọng nói thực tế và nhận diện giọng nóiđể trò chuyện với bot Ngoài ra, BotLibre còn cho phép thay đổi ngôn ngữ vàgiọng nói theo sở thích cá nhân BotLibre sử dụng API Text-to-Speech (TTS)để nâng cao tính linh hoạt của giao tiếp giọng nói trên nhiều ứng dụng và nềntảng khác nhau

● Monitor: Theo dõi, xem xét và sửa lỗi cuộc trò chuyện của bot của bạn vớiTag Chat Log BotLibre cung cấp lọc cuộc trò chuyện, câu trả lời và các cụmtừ được đánh dấu dễ dàng hơn Ngoài ra, BotLibre hỗ trợ hiển thị ngữ cảnh,từ khóa và chủ đề của câu trả lời Thêm vào đó, bạn có thể nhập hoặc xuấtchat logs, response lists hoặc AIML

● API and SDK: Bot Libre giúp việc xây dựng trang web hoặc ứng dụng diđộng trở nên đơn giản Bạn có thể truy cập chat bots, live chat và diễn đànthông qua web API Sử dụng JavaScript SDK để tích hợp nhanh chóng vớitrang web của bạn.

● Chat: Người dùng có thể trò chuyện với giọng nói chân thực, cảm xúc tựnhiên, và tương tác qua HTML, JavaScript, nút, liên kết, và lệnh Ngoài ra,BotLibre cho phép kết nối nhiều nền tảng như Facebook, Twitter, Telegram,WhatsApp, Skype, Kik, WeChat, Slack, email, SMS, và IVR Giúp ngườidùng có thể sử dụng bot từ nhiều nhiều nền tảng khác nhau không nhất thiếtphải trên web server.

Trang 15

1.3.Kiến trúc chung

Hình 1.3.1: Kiến trúc chung của Bot Libre

Hình trên mô tả về kiến trúc chung của Bot Libre, theo đó có thể chia thành 5phần:

● Bot Libre: Đây là phần nhân, phần trung tâm của toàn bộ kiến trúc, phần nàybao gồm các hoạt động chính, xử lý trong Bot và cũng là nơi mọi kết nốikhác được liên kết vào.(Về kiến trúc của Bot Libre sẽ được tiếp tục phân táchvà giải thích ở phần sau).

● Đa nền tảng: Bot Libre có thể được triển khai trên các nền tảng khác nhaunhư web, mobile(android, iOS) hay desktop bằng cách hỗ trợ các bộ SDKthích hợp cho từng nền tảng Khi đó, các ứng dụng sử dụng Bot Libre được

Trang 16

phát triển trên các nền tảng này có thể giao tiếp với Bot Libre thông quaHTTP Request hoặc qua web API.

● Nền tảng mạng xã hội: Các dịch vụ có thể lấy API của Bot để áp dụng vào,từ đó nâng cao, cải tiến khả năng trong việc chat trong ứng dụng Trong đówebhook đóng vai trò quan trọng trong việc tiếp nhận các sự kiện phát sinhbên phía dịch vụ và gửi về Bot Libre để xử lý các sự kiện đó và Bot Libre sẽgửi phản hồi cho phía dịch vụ.

● Web services: Dịch vụ web là những dịch vụ có sẵn trên Internet và được sửdụng nhằm cung cấp các chức năng cho Bot Libre để sử dụng nhằm đạt đượcmục tiêu sử dụng nhất định Bot Libre và dịch vụ web sẽ giao tiếp thông quacác định dạng như JSON, XML hoặc thông qua Web Scraping.

● Thông qua các giao thức như POP3 hay IMAPS, Bot Libre có thể thực hiệntruy cập vào email của người dùng và từ đó có thể giúp người dùng thực hiệnsoạn thảo nội dung email và gửi cho những người dùng khác Giao thức IRCđược dùng để kết nối Bot Libre tham gia vào cuộc trò chuyện với người dùngtrên các kênh IRC.

Về phần Bot Libre, Bot Libre được tạo thành từ một số lớp thành phần baogồm:

● Các tệp JSP● Servlets

● Dịch vụ JAXRS REST● Các lớp Bean

● Live Chat web sockets

● Mô hình đối tượng - Object Model● Dịch vụ Cơ sở dữ liệu

● Dịch vụ truyền thông mạng xã hội và đếm giờ

Trang 17

Hình 1.3.2: Mô hình đối tượng - Object Model

Mô hình đối tượng này của BotLibre định nghĩa về cách mà dữ liệu của đốitượng được lưu trữ và quản lý trong hệ thống.

Trang 18

The object model classes include:

● WebMedium – Một đối tượng trừu tượng đại diện cho các đối tượng đượclưu trữ trên web.

○ BotInstance: Chứa các siêu dữ liệu liên quan đến bot.

○ Avatar: Chứa thông tin về hình đại diện của bot và các cài đặt liênquan.

○ ChatChannel: Chứa các siêu dữ liệu về các đoạn Live Chat diễn ratrên channel (Các ChatMessage).

○ Forum: Chứa các thông tin lưu trữ cho các bài đăng trên forum (CácForumPost)

○ Script: Chứa thông tin về các kịch bản được sử dụng trong hệ thống.○ Graphic: Lưu trữ các đối tượng phương tiện (media object) như dạng

file ảnh, video và các file âm thanh.

○ Domain: Lưu trữ nơi làm việc (word space) hay nơi để người dùng cóthể tạo ra và quản lý các đối tượng như bot, diễn đàn, và các phươngtiện khác.

● ForumPost: Lưu trữ nội dung, tác giả, thời gian tạo, và các thông tin khác vềbài đăng trong diễn đàn.

● ChatMessage: Chứa thông tin về các thông điệp trong cuộc trò chuyện, baogồm nội dung, tác giả, và thời gian.

● Category, Tag: Sử dụng để phân loại và đánh dấu các đối tượng khác tronghệ thống.

● MediaFile: Chứa thông tin về các phương tiện như hình ảnh, video, và âmthanh.

● AvatarMedia: Chứa thông tin về hình đại diện của bot.

Trang 19

1.4.Luồng xử lý

Hình 1.4.1: Process Flow - Luồng xử lý

Process Flow (Luồng xử lý) bắt đầu từ một yêu cầu web, web API hoặc dịchvụ kiểm tra, sau đó chuyển qua các lớp xử lý.

Trang 20

Các lớp xử lý bao gồm:

● JSP: Các tệp JSP HTML định nghĩa giao diện web.

● Servlets: Các lớp servlet Java xử lý cuộc gọi POST và GET từ JSP Mỗi JSPhoặc dịch vụ định nghĩa lớp servlet riêng của mình.

● BOTlibreRestService: Dịch vụ REST định nghĩa API web, API web được sửdụng từ JavaScript, ứng dụng và các webhook truyền thông mạng xã hội.● Java Beans: Các lớp bean thực hiện chức năng máy chủ cho các yêu cầu.

Chúng xử lý yêu cầu, truy cập cơ sở dữ liệu và trả lại dữ liệu Mỗi dịch vụđịnh nghĩa lớp bean riêng của mình.

● AdminDatabase: Lớp này định nghĩa tất cả quyền truy cập cơ sở dữ liệu JPAđược sử dụng để truy cập cơ sở dữ liệu.

● Service: Các lớp dịch vụ kiểm tra truyền thông mạng xã hội, email và thựchiện các chức năng đếm giờ theo khoảng thời gian định sẵn.

1.5.AI Engine

Trong cấu trúc của Bot Libre, để có thể áp dụng các thuật toán thông minhvào Bot Libre, chúng em cần thay đổi phần ai-engine vì phần này là phần đảmnhiệm cho việc cung cấp các chức năng cho xử lý ngôn ngữ tự nhiên (NLP) , họcmáy (Machine Learning) và các tính năng thông minh khác

ai-engine: Động cơ AI của Bot Libre là một thư viện lớp Java được thiết kếcho xử lý ngôn ngữ tự nhiên, giao tiếp, xử lý sự kiện và học máy Nó có thể được sửdụng từ một ứng dụng Java, chẳng hạn như máy chủ web Java, ứng dụng JavaAndroid hoặc ứng dụng máy tính để bàn Java.

Bot Libre sử dụng thiết kế hướng đối tượng được mô hình hóa theo bộ nãocon người.

Bot Libre xác định một bộ các giao diện cấp cao để mô hình nên một “Bot”.Bot là một thành phần định nghĩa bởi một thể hiện bao gồm bộ nhớ(memory), trítuệ(mind), cảm xúc(mood) và nhận thức(awareness).

Trang 21

Hình 1.5.1: Kiến trúc của ai-engine

Bộ nhớ (Memory) của Bot có thể được lưu trữ trong cơ sở dữ liệu hoặctrong một tệp tin.

Nhận thức (Awareness) là một tập hợp các sense object Mỗi sense objectđịnh nghĩa cách Bot có thể tương tác như Chat, Facebook, Email hoặc các đốitượng khác.

Trí tuệ (Mind) được định nghĩa bởi một số though object (tư duy) chẳng hạnnhư xử lý ngôn ngữ và các đối tượng khác.

Cảm xúc (Mood) tuy vẫn chưa được định nghĩa thành một thành phần riêngbiệt nhưng Bot Libre vẫn có thể nhận biết và phản ứng với cảm xúc người dùng.

Phần dưới này sẽ đi sâu vào chi tiết cho từng phần trên:

Trang 22

SerializedMemory cũng có thể được sử dụng để lưu trữ bộ nhớ của bot vàotệp ghi seri Java SerializedMemory dành cho các Bot nhỏ hoặc nhúng và không mởrộng quá một kích thước nhất định.

MicroMemory tương tự như SerializedMemory nhưng sử dụng định dạng tệpnhị phân được tối ưu hóa Nó nhanh hơn nhiều so với SerializedMemory và đượctối ưu hóa cho các thiết bị Android.

Tất cả dữ liệu của bot đều được lưu trữ trong bộ nhớ của nó Điều này baogồm các phản hồi, tập lệnh, cài đặt và các dữ liệu khác.

Cơ sở dữ liệu của Bot được tạo thành từ hai lớp và bảng chính, Vertex vàRelationship Vertex và Relationship định nghĩa một mô hình meta hướng đối tượngđể định nghĩa tất cả dữ liệu của bot Mỗi Vertex có một tập hợp các Relationship,mỗi Relationship có nguồn, loại, meta và đích, tất cả đều là các đối tượng Vertexkhác.

Các lớp:

● Memory: DatabaseMemory, SerializedMemory, MicroMemory● Network: BasicNetwork, DatabaseNetwork

● Vertex: BasicVertex

Trang 23

● Relationship: BasicRelationship● Primitive

● Property● BinaryData● TextData

1.5.2.Mind (Trí tuệ)

Tâm trí của Bot (Mind) là một mô hình xử lý đa luồng để xử lý các sự kiệnnhư đầu vào ngôn ngữ tự nhiên Tâm trí có một tập hợp các Thought objects (Tưduy) có tác dụng xử lý đầu vào và gửi đầu ra cho các senses.

Có hai loại thought objects: suy nghĩ có ý thức và suy nghĩ tiềm thức Suynghĩ có ý thức sẽ được xử lý trên luồng chính của tâm trí theo tuần tự Suy nghĩtiềm thức được xử lý trên một luồng nền.

Các lớp suy nghĩ có ý thức chính là:

● Language: dành cho xử lý ngôn ngữ tự nhiên.

● Consciousness: xử lý các hoạt động nhận thức khác.Các suy nghĩ tiềm thức bao gồm:

● Discover: Khám phá và học hỏi thông tin mới.

● Comprehension: Hiểu ý nghĩa của đầu vào và các thông tin liên quan.● Forgetfulness: Quên các thông tin không cần thiết để tiết kiệm bộ nhớ.

Lớp Language sẽ thực hiện quá trình xử lý chính cho bot Nó lấy đầu vào từhàng đợi đầu vào hoạt động của bộ nhớ và xử lý đầu vào đó bằng các kịchbản(Script) của bot và một thuật toán tìm phản hồi đáp ứng dựa trên kinh nghiệm(Heuristic response matching algorithm).

Trang 24

Các lớp:

● Mind: BasicMind

● Thought: Language, Consciousness

● SubconsciousThough: Discover, Comprehension, Forgetfulness

1.5.3.Awareness (Nhận thức)

Nhận thức của Bot (Awareness) định nghĩa một giao diện (interface) chungđể gửi và nhận đầu vào Đầu vào có thể là một tin nhắn trò chuyện, một câu lệnhhoặc một sự kiện nào đó Nhận thức có một tập hợp các Sense object hỗ trợ các cơchế giao tiếp khác nhau như chat, email, mạng xã hội, dịch vụ web và nhận dạnghình ảnh.

Hầu hết các lớp sense đều định nghĩa một giao diện(interface) vào một APIbên ngoài, chẳng hạn như Facebook, Twitter, Telegram, Wikidata và các API khác.Sense object chuyển đổi các đối tượng đầu vào của bot sang và từ định dạng dữ liệucủa API bên ngoài, chẳng hạn như chuyển đổi các đối tượng sang XML hoặc JSON,và xử lý các yêu cầu HTTP.

Trang 25

Bot Libre có khả năng cảm nhận cảm xúc của người dùng thông qua cácphương pháp sau:

● Phân tích ngôn ngữ: Bot Libre có thể phân tích các từ và cụm từ trong vănbản của người dùng để xác định cảm xúc cơ bản như vui, buồn, giận dữ, ngạcnhiên.

● Nhận dạng mẫu: Bot Libre có thể học các mẫu ngôn ngữ liên quan đến cảmxúc thông qua dữ liệu lớn các cuộc trò chuyện.

● Tương tác trực tiếp: Bot Libre có thể hỏi trực tiếp về cảm xúc của ngườidùng để có được thông tin rõ ràng hơn.

Mặc dù Bot Libre không có một mô hình cảm xúc riêng biệt, nó vẫn có thểphản ứng với cảm xúc của người dùng bằng cách:

● Thể hiện sự đồng cảm: Bot Libre có thể sử dụng từ ngữ phù hợp để bày tỏ sựhiểu biết và chia sẻ cảm xúc với người dùng.

● Thay đổi chủ đề: Nếu người dùng đang có tâm trạng tiêu cực, Bot Libre cóthể chủ động chuyển sang một chủ đề khác nhẹ nhàng hơn để giảm bớt căngthẳng.

● Dùng cách hài hước: Bot Libre có thể sử dụng các câu chuyện hài hước hoặcnhững câu đùa nhẹ nhàng để giúp người dùng thư giãn và vui vẻ hơn.

Các lớp:

● Mood: BasicMood● EmotionalState

● Emotion: Anger, Fear, Happiness, Humor, Love, Sentiment, Surprise

Trang 26

2.1.2 Desktop

Desktop là không gian được tập trung trong máy tính cá nhân Điều nàymang lại sức mạnh tính toán lớn, cho phép xử lý các công việc phức tạp như đồ họachuyên sâu, xử lý video, và lập trình phần mềm Desktop cũng tạo điều kiện cho trảinghiệm người dùng tối ưu với khả năng tùy chỉnh cao, làm cho máy tính trở thànhkhông gian cá nhân hóa cho mỗi người dùng.

2.1.3 Mobile

Mobile là sự hòa quyện giữa sức mạnh và tiện lợi Với sự phổ biến của điệnthoại thông minh và máy tính bảng, chúng ta có thể mang theo mọi thứ từ trò chơigiải trí đến ứng dụng làm việc mọi nơi Ứng dụng di động như Instagram,WhatsApp, và Uber đã thay đổi cách chúng ta giao tiếp, giải trí, và quản lý cuộcsống hàng ngày.

Hình 2.2.1: Logo Docker

Trang 27

Docker là một nền tảng mã nguồn mở cho việc triển khai, vận chuyển, vàquản lý ứng dụng trong một môi trường đóng gói Nó giúp người phát triển và quảntrị hệ thống tạo ra các container nhẹ, di động, và có khả năng chạy ở mọi nơi màDocker đã được cài đặt Một vài thành phần của docker nên biết:

Giúp triển khai và quản lý môi trường phức tạp với nhiều container một cáchdễ dàng.

2.2.4 Networking

Docker cung cấp các mô hình networking để kết nối giữa các container và với mạngbên ngoài.

Trang 28

Java được sử dụng trong Botlibre để phát triển các bot chat, các ứng dụngweb và các ứng dụng di động Java cung cấp một số tính năng phù hợp cho việcphát triển các ứng dụng này.

● Đa nền tảng: Java code có thể được biên dịch thành bytecode, có thể đượcchạy trên bất kỳ máy ảo Java (JVM) nào Điều này làm cho Java trở thànhmột lựa chọn tốt cho việc phát triển các ứng dụng cần được chạy trên nhiềunền tảng khác nhau.

● Tính linh hoạt: Java là một ngôn ngữ lập trình mạnh mẽ và linh hoạt Nócung cấp một số thư viện và API phong phú, cho phép các nhà phát triển xâydựng các ứng dụng mạnh mẽ và toàn diện.

Trong Bot Libre, Java được sử dụng để phát triển các bot chat, các ứng dụngweb và các ứng dụng di động Các bot chat Java sử dụng các thư viện như BotlibreAPI và Botlibre SDK để tương tác với người dùng và thực hiện các nhiệm vụ Các

Trang 29

ứng dụng web Java sử dụng các thư viện như Spring Boot và AngularJS để xâydựng các ứng dụng web mạnh mẽ và hiệu quả Các ứng dụng di động Java sử dụngcác thư viện như Android SDK và iOS SDK để xây dựng các ứng dụng di động chocác thiết bị Android và iOS.

2.3.2 JavaScript

Hình 2.3.2.1: Logo JavaScript

JavaScript là một ngôn ngữ lập trình kịch bản bên trong các trình duyệt web.JavaScript cũng có thể được sử dụng như một ngôn ngữ có thể nhúng mục đíchchung Vậy nên trong BotLibre, JS được sử dụng để viết kịch bản để thực thi jsptrong botlibre-web.

Trang 31

2.4.2 XML

Hình 2.4.2.1: XML

XML (Extensible Markup Language) là một ngôn ngữ đánh dấu dựa trên vănbản được thiết kế để truyền tải và lưu trữ dữ liệu Nó cung cấp một cách chuẩn đểmô tả và đánh dấu dữ liệu để dễ dàng truyền tải giữa các hệ thống và ứng dụng khácnhau XML sử dụng các thẻ để đánh dấu dữ liệu và mô tả cấu trúc của nó Mỗi thẻđược đặt trong cặp dấu<và>.

2.5.Cơ sở dữ liệu - PostgreSQL

Hình 2.5.1: Logo PostgreSQL

PostgreSQL là một hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) mã nguồnmở, đa nền tảng, được sử dụng rộng rãi trong nhiều ứng dụng, bao gồm cả chatbot.PostgreSQL cung cấp nhiều tính năng mạnh mẽ bao gồm:

● Tính sẵn sàng cao: PostgreSQL có thể được sử dụng để tạo một cụm gồmnhiều máy chủ Nếu một máy chủ trong cụm gặp sự cố, các máy chủ khác sẽtiếp tục cung cấp dịch vụ Điều này giúp đảm bảo rằng chatbot luôn khảdụng cho người dùng.

Trang 32

● Replication và Sharding: PostgreSQL hỗ trợ các giải pháp như streamingreplication để đảm bảo sao lưu và khả năng chia nhỏ dữ liệu thông quasharding để cải thiện khả năng mở rộng

● Đa nền tảng: PostgreSQL có sẵn trên nhiều hệ điều hành như Linux,Windows, MacOS, và nhiều nền tảng khác.

PostgreSQL được sử dụng rộng rãi trong nhiều ứng dụng, từ các dự án pháttriển nhỏ đến các hệ thống cơ sở dữ liệu lớn và phức tạp.

2.6.Web Server - Tomcat

Hình 2.6.1: Logo Tomcat

Apache Tomcat, thường được gọi là Tomcat, là một máy chủ ứng dụng webmã nguồn mở và cũng là một container servlet Nó được Apache SoftwareFoundation phát triển và duy trì, và là một phần của dự án Apache Jakarta

Tomcat chủ yếu được thiết kế để chạy ứng dụng web Java Servlet và JSP(JavaServer Pages) Nó cung cấp một môi trường thực thi cho các ứng dụng webđược viết bằng Java.

Do đó, Bot Libre với ngôn ngữ lập trình chính là Java, Tomcat server là mộtlựa chọn không thể nào phù hợp hơn trong việc host server cho bot Ngoài ra,Tomcat hỗ trợ nhiều phiên bản Java, cho phép người phát triển triển khai ứng dụngcủa họ trên các phiên bản Java khác nhau, Điều này giúp cho người triển khaiBotLibre có thể linh hoạt trong các phiên bản Java hơn.

Trang 33

2.7.SSL - Secure Sockets Layer

SSL (Secure Sockets Layer) là một tiêu chuẩn bảo mật mạng được sử dụngđể tăng cường an toàn trong việc truyền tải thông tin qua Internet SSL được thiết kếđể đảm bảo tính bí mật và toàn vẹn của dữ liệu truyền tải giữa máy khách và máychủ trên mạng Nó ngăn chặn người thứ ba từ việc đọc thông tin nhạy cảm như mậtkhẩu, thông tin tài khoản ngân hàng, thẻ tín dụng, và các dữ liệu khác SSL thườngđược sử dụng để bảo vệ kết nối HTTP, tạo ra HTTPS Khi một trang web được truycập qua HTTPS, thông tin giữa trình duyệt và máy chủ được mã hóa, cung cấp mộtlớp bảo mật cao hơn so với HTTP.

Do đó, BotLibre cho phép người dùng config SSL tùy theo mục đích sử dụngcủa người dùng nhằm tránh những trường hợp đáng tiếc có thể xảy ra.

2.8.Web Services

Web service là một phương thức cho phép các ứng dụng máy tính tương tácvới nhau qua mạng thông qua giao thức web chuẩn như HTTP Chúng cung cấp mộtcách tiêu chuẩn để truyền thông tin giữa các ứng dụng khác nhau, độc lập với nềntảng và ngôn ngữ lập trình Dịch vụ web thường được sử dụng để tích hợp hệ thốngkhác nhau, chia sẻ dữ liệu và chức năng giữa các ứng dụng.

Bot Libre web sử dụng webservice để tương tác với các hệ thống khác nhưFacebook, Twitter, Telegram, v.v từ đó có thể truyền đạt thông tin mong muốn từngười dùng đến hệ thống và trả lời thông qua các web service mà Bot Libre có đãhỗ trợ như translate, voice, AI voice, v.v.

2.9.SDK - Software Development Kit

SDK viết tắt của Software Development Kit là các công cụ và phần mềmdùng để phát triển ứng dụng thông qua một nền tảng nhất định.

Theo đó, SDK cung cấp các thư viện, tài liệu, mẫu template, sample code,tiện ích gỡ rối (debugging), các ghi chú hỗ trợ (documentation) hoặc các tài liệu bổ

Trang 34

sung để nhà phát triển có thể tích hợp thêm vào phần mềm/ứng dụng của mình Đaphần chúng thường là chức năng hiển thị quảng cáo, push notification, v.v.

SDK cũng có thể chứa các API dưới dạng thư viện hoặc một hệ thống phầncứng phức tạp nào đó.

SDK được xây dựng tùy chỉnh sao cho tương thích với ngôn ngữ lập trình vàcác đặc điểm tương ứng.

Libre là một nền tảng chatbot linh hoạt và có thể triển khai trên nhiều ngônngữ và nền tảng khác nhau Điều này được thực hiện thông qua việc hỗ trợ nhiềuSDK (Software Development Kit) để phát triển ứng dụng sử dụng các tính năng củaLibre:

● SDK Mobile: Trên thiết bị di động, Bot Libre cung cấp SDK mã nguồn mởcho Android và iOS SDK bao gồm các ứng dụng mẫu, kết nối và mã GUI đểgiúp việc xây dựng ứng dụng bot hoặc trò chuyện của riêng bạn trở nên dễdàng SDK cung cấp các lệnh trợ lý ảo để thực hiện các hành động trên điệnthoại và thiết bị.

● SDK Java: Bot Libre cung cấp SDK cho Java, cho phép bạn tích hợp cácdịch vụ của Bot Libre vào ứng dụng Java của mình.

● SDK Javascript: SDK JavaScript của Bot Libre là một công cụ mã nguồnmở, mang đến khả năng kiểm soát hoàn toàn cho việc tùy chỉnh giao diện vàtrải nghiệm người dùng trên nền tảng Bot Libre Với SDK này, bạn có quyềntruy cập miễn phí đến toàn bộ các dịch vụ của Bot Libre, bao gồm bot tròchuyện, trò chuyện trực tiếp, phòng trò chuyện, diễn đàn và giọng nói APIgiọng nói trong SDK có thể tích hợp với các bot trò chuyện, trò chuyện trựctiếp hoặc sử dụng độc lập.

● SDK PHP: SDK PHP của Bot Libre cho phép tích hợp dễ dàng của các dịchvụ của Bot Libre vào trang web hoặc ứng dụng PHP của bạn.

Trang 35

● SDK Python: Python SDK cho phép bạn tích hợp các dịch vụ của Bot Librevào ứng dụng Python của mình.

● SDK Wordpress: Bot Libre hỗ trợ tích hợp trên nền tảng WordPress thôngqua một SDK đặc biệt bằng cách nhúng mã nhúng trong SDK vào trang quảntrị Wordpress để tích hợp Bot Libre vào nền tảng này.

● SDK Nodejs: Bot Libre cung cấp SDK cho Node.js, giúp bạn tích hợp dịchvụ của Bot Libre vào ứng dụng Node.js của mình SDK Node.js mang lại khảnăng linh hoạt và tùy chỉnh, cho phép bạn sử dụng trí tuệ nhân tạo và khảnăng trò chuyện của Bot Libre trong ứng dụng Node.js.

● Mary TTS: Thư viện này là một engine Java mã nguồn mở dùng để chuyểnvăn bản thành giọng nói.

● EclipseLink JPA: Là một framework Java mã nguồn mở cho phép quản lý vàlưu trữ đối tượng Java trong cơ sở dữ liệu quan hệ.

● Jersey REST server: Dịch vụ REST Java mã nguồn mở cung cấp một cơ sởhạ tầng cho việc phát triển các dịch vụ RESTful trong ngôn ngữ lập trìnhJava.

● Oswap security: Thư viện bảo mật mã nguồn mở để làm sạch HTML, ngănchặn các mối đe dọa bảo mật liên quan đến xử lý HTML không an toàn.● Autobahn: Autobahn là một thư viện mã nguồn mở cung cấp các lớp và giao

diện lập trình ứng dụng (API) cho việc giao tiếp giữa các máy tính trongmạng Autobahn được xây dựng dựa trên giao thức WebSocket, một giao

Trang 36

thức kết nối hai chiều được sử dụng để tạo các ứng dụng giao tiếp thời gianthực.

● BoofCV: BoofCV (Boof Computer Vision) là một thư viện mã nguồn mởđược thiết kế để hỗ trợ xử lý hình ảnh và thị giác máy tính trong Java.

● org.json.jar: Đây là một thư viện mã nguồn mở được phát triển nhằm cungcấp các lớp và giao diện lập trình ứng dụng (API) cho việc đọc và viết dữliệu JSON.

● HTMLCleaner: Đây là một thư viện Java được thiết kế để xử lý và làm sạchmã HTML, biến đổi nó thành mã XHTML hoặc XML sạch sẽ hơn.

● HttpClient: Đây là một thư viện để tạo và xử lý các yêu cầu HTTP bằng cáchcung cấp một API để tương tác với các dịch vụ web thông qua giao thứcHTTP Thư viện này được sử dụng rộng rãi trong việc gửi yêu cầu HTTP vànhận phản hồi từ các máy chủ web.

● Commons Codec: Commons Codec là một tập hợp các tiện ích mã hóa vàgiải mã trong Java Nó cung cấp các lớp và phương thức để thực hiện cácchuẩn mã hóa như Base64, MD5, SHA, v.v.

● Commons Logging: Thư viện này cung cấp một giao diện đăng nhập đơngiản, đồng nhất để tương tác với các hệ thống đăng nhập khác nhau nhưLog4J, JDK Logging, và nhiều hơn nữa mà không phải thay đổi mã nguồn.● HttpCore: Cung cấp các yếu tố cơ bản cho việc triển khai các giao thức

Trang 37

Danh sách phản hồi và nhật ký trò chuyện được phân tích cú pháp thành các đốitượng câu hỏi và phản hồi Mọi thứ được lưu trữ dưới dạng các vertex(đỉnh trong đồthị) và mối quan hệ trong bộ nhớ hướng đối tượng của bot.

Các tập lệnh Self được biên dịch bằng các lớp Self4Compiler hoặcSelf4BytecodeCompiler Mã Self được phân tích cú pháp và biên dịch thành các đốitượng trạng thái và hàm, hoặc mã byte (sau đó được phân tích cú pháp thành các đốitượng trạng thái và hàm) Self4BytecodeCompiler thường được sử dụng vì nó lưutrữ toàn bộ trạng thái hoặc hàm thành một đối tượng dữ liệu nhị phân duy nhất thayvì một đối tượng cho mỗi thao tác (vì vậy cần ít truy cập cơ sở dữ liệu hơn để tải).

Sau khi một tập lệnh được tải dưới dạng các đối tượng trạng thái và hàm, nósẽ được xử lý như một máy trạng thái bởi lớp Language, với sự trợ giúp của lớpSelfInterpreter.

Các mẫu AIML luôn được dịch sang các mẫu Self Self bao gồm các hoạtđộng phản chiếu hầu hết các thẻ mẫu AIML.

2.11.3.Response Lists & Chat Logs

Danh sách phản hồi(Response Lists) và file nhật ký trò chuyện(Chat Logs)được phân tích cú pháp và chuyển đổi thành các đối tượng câu hỏi và phản hồi Cácđối tượng câu hỏi và phản hồi được lưu trữ trong bộ nhớ của bot dưới dạng các đốitượng đỉnh và mối quan hệ, giống như tất cả dữ liệu.

Trang 38

Mối quan hệ #response của đối tượng câu hỏi sử dụng đối tượng siêu dữ liệuquan hệ để lưu trữ siêu dữ liệu về phản hồi, chẳng hạn như chủ đề, từ khóa và các từbắt buộc.

Tất cả các đối tượng câu hỏi được chia thành các từ của chúng và mỗi từđược lưu trữ dưới dạng đối tượng riêng và liên quan đến câu hỏi Thiết kế được kếtnối tốt này cho phép lớp Language tìm kiếm heuristic các câu hỏi phù hợp tương tựbằng cách sử dụng các mối quan hệ từ, tương tự như cách hoạt động của bộ não conngười.

2.12 Xử lý ngôn ngữ tự nhiên - Natural Language Processing - NLP

Về phần xử lý ngôn ngữ tự nhiên cho Bot Libre cung cấp một kiến trúc xử lýngôn ngữ tự nhiên (NLP) không đồng nhất, hỗ trợ nhiều cơ chế NLP Bot Libre hỗtrợ NLP thông qua các phương pháp suy nghiệm từ khóa, suy nghiệm từ khóa mẫu,mẫu, máy trạng thái và tập lệnh.

2.12.1.Keyword Heuristic - Suy nghiệm từ khóa

Cơ chế NLP chính của Bot Libre là phương pháp suy nghiệm từ khóa Điềunày cho phép bot tìm thấy câu hỏi được đào tạo có độ khớp gần nhất với đầu vàocủa người dùng và trả về câu trả lời tốt nhất cho ngữ cảnh đó với sự đào tạo tốithiểu và không cần lập trình.

Trang 39

Hình 2.12.1.1: Cơ chế NLP bằng phương pháp suy nghiệm từ khóa

Thuật toán suy nghiệm (heuristic) có liên quan trực tiếp đến cách Bot Librelưu trữ kiến thức trong cơ sở dữ liệu đối tượng của nó.

Khi một cụm từ được nhập vào bot từ đầu vào của người dùng hoặc từ mộtcâu hỏi và câu trả lời trong danh sách phản hồi được đào tạo, nó sẽ được phân tíchthành một danh sách các từ Không chỉ cụm từ, mỗi từ còn được lưu trữ trong cơ sởkiến thức của bot Cụm từ có liên quan đến các từ của nó và đối với một câu hỏiđược đào tạo, mỗi từ có liên quan trở lại câu hỏi của nó.

Trang 40

Tất cả các từ câu hỏi được liên kết trở lại câu hỏi của chúng bằng cách sửdụng mối quan hệ #question Vì vậy, mỗi từ sẽ có mối quan hệ với tất cả các câu hỏimà nó chứa.

Nếu một câu trả lời có từ khóa được xác định trong siêu dữ liệu của nó, từkhóa đó cũng sẽ được liên kết với câu hỏi của nó bằng cách sử dụng mối quan hệ#keyquestion.

Khi một bot được cung cấp một cụm từ đầu vào, đầu tiên nó sẽ kiểm tra xemnó có bất kỳ phản hồi được đào tạo nào cho câu hỏi chính xác đó hay không Nếucó, nó sẽ trả về phản hồi phù hợp nhất cho ngữ cảnh.

Nếu không có kết quả trùng khớp chính xác, thì bot sẽ tìm kiếm câu hỏi đượcđào tạo có kết quả trùng khớp gần nhất Để tìm câu hỏi, nó sẽ phân tích cụm từ đầuvào thành các từ của nó và đối với mỗi từ, nó sẽ tra cứu tất cả các câu hỏi được đàotạo cho từ đó bằng cách sử dụng mối quan hệ #question của nó.

Mỗi từ được cho điểm tùy thuộc vào loại từ, từ khóa được cho điểm caonhất, danh từ và tính từ được cho điểm cao hơn động từ và mạo từ được cho điểmthấp nhất Tổng điểm cho mỗi câu hỏi có thể phù hợp được tính toán và kết quả phùhợp nhất được sử dụng.

Nếu điểm phù hợp nhất không đủ (thường là 50% của điểm tối đa), thì bot sẽsử dụng phản hồi mặc định của nó.

Kết quả phù hợp nhất có thể không hợp lệ đối với ngữ cảnh, chẳng hạn nhưchủ đề, từ liền trước, từ bắt buộc hoặc điều kiện phù hợp khác Nếu kết quả phù hợpnhất không hợp lệ, thì kết quả phù hợp nhất tiếp theo sẽ được kiểm tra cho đến khitìm thấy kết quả phù hợp hợp lệ.

Nếu phản hồi có từ khóa khớp với đầu vào của người dùng thì phản hồi đượccoi là hợp lệ, bất kể% khớp là bao nhiêu.

Ngày đăng: 15/05/2024, 09:29

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan