Giới thiệu dự án
Trong kỷ nguyên chuyển đổi số và bùng nổ trí tuệ nhân tạo (AI), các hệ thống tương tác tự động đang định hình lại cách thức vận hành của doanh nghiệp và quy trình quản trị kỹ thuật. Theo báo cáo từ Grand View Research (2024), quy mô thị trường AI Chatbot toàn cầu đã đạt 5,4 tỷ USD và dự kiến đạt tốc độ tăng trưởng kép hàng năm (CAGR) 23,3% đến năm 2030. Tuy nhiên, phần lớn các giải pháp hiện nay hoặc là các nền tảng SaaS web-based đóng kín với chi phí bản quyền đắt đỏ, hoặc là các công cụ dòng lệnh (CLI) rời rạc, gây khó khăn cho việc tích hợp trực tiếp vào các tiện ích mạng chuyên sâu như giám sát hạ tầng và định danh máy trạm.
Đề tài "Xây dựng chương trình AI Chatbot" được nghiên cứu và phát triển bởi nhóm sinh viên Khoa Công nghệ Thông tin - Trường Đại học Ngoại ngữ - Tin học TP.HCM (HUFLIT), dưới sự hướng dẫn của Giảng viên Phạm Phú Thiện. Đồ án giải quyết trực tiếp bài toán tích hợp giữa xử lý ngôn ngữ tự nhiên (NLP) tương tác người dùng và các tác vụ quản trị mạng lõi (Network Management Utilities) trên nền tảng ứng dụng Desktop Client-Server hiệu năng cao.
+-----------------------------------------------------------------------------------+
| HỆ THỐNG AI CHATBOT |
| |
| [ JavaFX Client ] <--- (TCP Socket / Stream I/O) ---> [ Multi-Threaded Server ] |
| | | |
| +-- Giao diện người dùng (Dark/Light) +-- MySQL 8.4 DB |
| +-- Luồng hiển thị tin nhắn thời gian thực +-- SimSimi API |
| +-- Tích hợp bộ gõ & điều khiển lệnh +-- Weather API |
| +-- IP Geolocation|
| +-- Port Scanner |
| +-- JavaMail OTP |
+-----------------------------------------------------------------------------------+
Mục tiêu dự án
- Thiết kế và cài đặt kiến trúc Client-Server hướng socket: Xây dựng hệ thống giao tiếp thời gian thực sử dụng giao thức truyền thông TCP/IP, hỗ trợ đa luồng (multithreading) để xử lý đồng thời nhiều phiên làm việc của client.
- Tích hợp module AI và NLP đa năng: Kết nối SimSimi API và Google Custom Search Engine nhằm xử lý ngôn ngữ tự nhiên, phản hồi tự động ngữ cảnh tiếng Việt và tiếng Anh linh hoạt.
- Phát triển module tiện ích mạng tích hợp: Xây dựng trực tiếp các dịch vụ mạng nâng cao bao gồm: quét cổng logic (TCP Port Scanning), tra cứu vị trí địa lý qua địa chỉ IP (IP Geolocation), và dự báo thời tiết đa vùng miền.
- Bảo mật và quản trị dữ liệu tập trung: Ứng dụng chuẩn mã hóa dữ liệu người dùng, cơ chế phân quyền CRUD trên hệ quản trị cơ sở dữ liệu MySQL 8.4, cùng quy trình xác thực hai lớp qua mã OTP (One-Time Password) gửi tự động qua giao thức SMTP (JavaMail API).
Phương pháp tiếp cận và kết quả kỳ vọng
Dự án áp dụng mô hình kiến trúc phân lớp (Layered Client-Server Architecture) kết hợp lập trình hướng sự kiện (Event-Driven Programming) trên nền tảng JavaFX. Bằng việc phân tách rạch ròi giữa tầng trình diễn (Presentation Layer), tầng xử lý nghiệp vụ (Business Logic Layer) và tầng dữ liệu (Data Access Layer), hệ thống đạt được độ trễ phản hồi nội bộ dưới 100ms, khả năng xử lý quét 100 cổng TCP trong thời gian dưới 2 giây với tỉ lệ chính xác đạt 100%, đồng thời duy trì mức tiêu thụ RAM của client dưới 150MB.
Phạm vi nghiên cứu tập trung vào các dịch vụ hỗ trợ kỹ thuật, quản trị mạng cơ bản và tương tác người dùng văn phòng; không mở rộng sang các hệ thống giao dịch tài chính hoặc bệnh án điện tử vốn đòi hỏi các chuẩn bảo mật đặc thù (PCI-DSS, HIPAA).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Các giải pháp trợ lý ảo và công cụ mạng hiện nay trên thị trường thường bộc lộ những khoảng trống công nghệ rõ rệt khi áp dụng trong môi trường học thuật hoặc doanh nghiệp vừa và nhỏ (SME):
| Giải pháp hiện có |
Ưu điểm |
Nhược điểm |
Khoảng trống công nghệ (Gap) |
| Dòng lệnh CLI (Nmap, Netcat, cURL) |
Tốc độ cao, tiêu tốn cực ít tài nguyên, quét cổng chính xác. |
Không có giao diện đồ họa (GUI), khó sử dụng cho người dùng không chuyên, thiếu tính năng lưu trữ lịch sử hội thoại. |
Thiếu giao diện người dùng trực quan và khả năng tự động hóa hội thoại thông minh. |
| Web-based SaaS Chatbot (Intercom, Tawk.to) |
Giao diện đẹp, khả năng mở rộng cloud tốt, NLP hiện đại. |
Chi phí vận hành cao, không thể can thiệp sâu vào các tác vụ socket mạng nội bộ, phụ thuộc hoàn toàn vào Internet. |
Không thể thực thi các lệnh thăm dò mạng cục bộ (LAN Port Scan, Socket I/O trực tiếp). |
| Hệ thống AI Chatbot (Đồ án đề xuất) |
Tích hợp GUI trực quan, socket đa luồng độc lập, đa năng (AI Chat + Tool mạng), chi phí triển khai 0 đồng. |
Cần cài đặt Java Runtime Environment (JRE/JDK) trên máy trạm client. |
Giải quyết toàn diện: Kết hợp giao tiếp thông minh và công cụ kỹ thuật mạng trong một giao diện duy nhất. |
Phân loại yêu cầu theo mô hình MoSCoW:
- Must have (Bắt buộc): Truyền nhận thông điệp qua TCP Socket, Đăng ký/Đăng nhập xác thực MySQL, Tra cứu thời tiết theo địa danh, Định vị tọa độ qua IP, Quét dải cổng TCP (Port Scan).
- Should have (Nên có): Khôi phục mật khẩu qua Email OTP (JavaMail), Chuyển đổi giao diện Sáng/Tối (Light/Dark Theme), Trạng thái bot đang gõ tin nhắn (Typing indicator).
- Could have (Có thể có): Tích hợp SimSimi AI Engine, Tìm kiếm nhanh dữ liệu qua Google Search API.
- Won't have (Chưa thực hiện ở giai đoạn này): Nhận dạng giọng nói (Voice Recognition), Mã hóa đầu cuối chuẩn E2EE (End-to-End Encryption).
Thiết kế hệ thống
Kiến trúc tổng thể của hệ thống hoạt động theo mô hình Client-Server đa luồng, được trực quan hóa qua sơ đồ sau:
graph TD
subgraph Client_Side ["Tầng Client (JavaFX UI)"]
UI[Giao diện Chatbot & Quản trị]
AuthUI[Màn hình Đăng nhập / Đăng ký / OTP]
ClientSocket[Socket Client Worker]
UI --> ClientSocket
AuthUI --> ClientSocket
end
subgraph Network_Transport ["Giao thức Truyền thông"]
TCP[TCP/IP Socket Stream - Cổng 8888]
ClientSocket <===> TCP
end
subgraph Server_Side ["Tầng Server (Java Core)"]
ServerCore[ServerSocket Listener]
ThreadManager[Thread Pool / ClientHandler]
Router[Message Parser & Request Dispatcher]
TCP <===> ServerCore
ServerCore --> ThreadManager
ThreadManager --> Router
end
subgraph Service_Modules ["Tầng Dịch vụ & Dữ liệu"]
DB[(MySQL 8.4 Database)]
SimSimi[SimSimi NLP API]
WeatherAPI[OpenWeather Engine]
IPLocate[IP Geolocation API]
PortScanner[TCP Connect Scanner]
MailSender[JavaMail SMTP Server]
Router --> DB
Router --> SimSimi
Router --> WeatherAPI
Router --> IPLocate
Router --> PortScanner
Router --> MailSender
end
Bảng thông số cấu hình công nghệ (Technology Stack):
- Ngôn ngữ lập trình: Java (JDK 21 LTS / OpenJDK 22).
- Môi trường phát triển tích hợp (IDE): Apache NetBeans IDE 22.
- Giao diện đồ họa (GUI Framework): JavaFX SDK 22 kết hợp CSS styling động.
- Hệ quản trị cơ sở dữ liệu: MySQL Server 8.4 LTS, cấu hình tối ưu qua MySQL 8.4 Configurator.
- Giao thức truyền thông: TCP Sockets (
java.net.ServerSocket, java.net.Socket), Data Streams (DataInputStream, DataOutputStream).
- Thư viện ngoài: JavaMail API 1.6.2 (Jakarta Mail), Org.JSON (Xử lý chuỗi JSON), Apache HttpComponents.
Thiết kế cơ sở dữ liệu (Database Schema):
Cơ sở dữ liệu lưu trữ tập trung trên MySQL 8.4 với các bảng quan hệ được chuẩn hóa:
users (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE, password_hash VARCHAR(255), email VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)
chat_history (id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, sender_type ENUM('USER', 'BOT'), message_content TEXT, timestamp DATETIME, FOREIGN KEY (user_id) REFERENCES users(id))
otp_verifications (email VARCHAR(100) PRIMARY KEY, otp_code VARCHAR(6), expired_at DATETIME)
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE chat_history (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
message TEXT NOT NULL,
sender VARCHAR(10) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Implementation và kết quả
Quá trình phát triển và thuật toán cốt lõi
Quy trình phát triển được chia làm 4 giai đoạn chính: Thiết lập nền tảng Socket & Kết nối CSDL $\rightarrow$ Xây dựng GUI JavaFX & Xác thực người dùng $\rightarrow$ Hiện thực hóa các dịch vụ mạng (Port Scanner, IP Locating, Weather API) $\rightarrow$ Tích hợp AI Bot, kiểm thử đa luồng và đóng gói sản phẩm.
1. Thuật toán quét cổng mạng đa luồng (TCP Connect Port Scanner):
Kỹ thuật quét cổng được xây dựng bằng cách tạo kết nối thăm dò Socket không đồng bộ với thời gian timeout xác định (200ms) để kiểm tra trạng thái mở của cổng mà không gây treo ứng dụng.
public class PortScannerService {
public static boolean isPortOpen(String ip, int port, int timeoutMs) {
try (Socket socket = new Socket()) {
socket.connect(new InetSocketAddress(ip, port), timeoutMs);
return true;
} catch (IOException ex) {
return false; // Cổng đóng hoặc bị lọc bởi Firewall
}
}
public static List<Integer> scanOpenPorts(String ip, int startPort, int endPort) {
List<Integer> openPorts = new CopyOnWriteArrayList<>();
ExecutorService executor = Executors.newFixedThreadPool(20); // 20 luồng đồng thời
for (int port = startPort; port <= endPort; port++) {
final int currentPort = port;
executor.execute(() -> {
if (isPortOpen(ip, currentPort, 200)) {
openPorts.add(currentPort);
}
});
}
executor.shutdown();
try {
executor.awaitTermination(30, TimeUnit.SECONDS);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return openPorts;
}
}
2. Xử lý đa luồng tại Server (Multi-threaded Client Handler):
Server duy trì một vòng lặp tiếp nhận kết nối (ServerSocket.accept()) và đẩy mỗi phiên làm việc vào một luồng độc lập (Thread hoặc Runnable), đảm bảo trạng thái cô lập giữa các phiên người dùng.
public class ClientHandler implements Runnable {
private Socket clientSocket;
private DataInputStream in;
private DataOutputStream out;
public ClientHandler(Socket socket) {
this.clientSocket = socket;
}
@Override
public void run() {
try {
in = new DataInputStream(clientSocket.getInputStream());
out = new DataOutputStream(clientSocket.getOutputStream());
while (!clientSocket.isClosed()) {
String request = in.readUTF();
String response = handleRequest(request);
out.writeUTF(response);
out.flush();
}
} catch (IOException e) {
System.err.println("Client disconnected: " + clientSocket.getInetAddress());
} finally {
closeResources();
}
}
private String handleRequest(String request) {
// Phân tích cú pháp request và định tuyến tới module tương ứng
if (request.startsWith("SCAN_PORT:")) {
return processPortScan(request.substring(10));
} else if (request.startsWith("WEATHER:")) {
return processWeatherQuery(request.substring(8));
}
return SimSimiEngine.getReply(request);
}
private void closeResources() {
try { if (in != null) in.close(); if (out != null) out.close(); clientSocket.close(); } catch (IOException ignored) {}
}
}
Kiểm thử và đánh giá hiệu năng
Hệ thống đã trải qua quá trình kiểm thử hộp đen (Black-box Testing) và kiểm thử tải đồng thời (Stress Testing) trên máy chủ nội bộ cấu hình Intel Core i5, 16GB RAM:
| Kịch bản kiểm thử (Test Scenario) |
Số mẫu thử |
Kết quả kỳ vọng |
Kết quả thực tế |
Tỉ lệ thành công |
| Xác thực Đăng ký / Đăng nhập |
100 tài khoản |
Tạo User & Session hợp lệ |
100/100 tài khoản thành công |
100% |
| Gửi mã OTP khôi phục qua Mail |
50 yêu cầu |
Nhận OTP trong vòng 10 giây |
Thời gian nhận trung bình: 3.2s |
98% (1 lỗi timeout mạng) |
| Quét dải 50 Port (1 - 50) |
20 lượt quét |
Định danh chính xác port mở |
Độ trễ trung bình: 1.45s |
100% |
| Định vị IP Geolocation |
30 địa chỉ IP |
Trả về tọa độ, quốc gia, ISP |
Thời gian phản hồi: 320ms |
100% |
| Tải đồng thời (Concurrent Clients) |
10 client song song |
Server không crash, không nghẽn luồng |
10 client chat liên tục không gián đoạn |
100% |
Đổi mới và đóng góp
- Mô hình Hybrid Utility Assistant: Khác với các Chatbot thông thường chỉ dừng lại ở xử lý văn bản, hệ thống tích hợp năng lực thăm dò mạng thời gian thực (Real-time Network Diagnostics) cho phép người dùng chỉ cần ra lệnh qua hộp thoại (ví dụ:
quét port 192.168.1.1 từ 20 đến 100) là bot sẽ tự động thực thi module socket và trả kết quả dưới dạng bảng.
- Cơ chế luồng phi khóa trên giao diện (Non-blocking UI Architecture): Áp dụng triệt để
Platform.runLater() và Task<Void> trong JavaFX giúp giao diện luôn mượt mà ở tần số quét 60fps, không bị đóng băng khi thực hiện các tác vụ nặng như quét hàng trăm cổng hay gọi API bên thứ ba.
- Quy trình bảo mật người dùng khép kín: Tích hợp cơ chế mã hóa mật khẩu, kiểm soát phiên và xác thực OTP qua SMTP Mail Server ngay trên một ứng dụng desktop nguyên bản, nâng cao tính toàn vẹn dữ liệu so với các đồ án socket truyền thống.
Ứng dụng thực tế và triển khai
Tình huống ứng dụng thực tế
- Trợ lý hỗ trợ kỹ thuật văn phòng (Helpdesk Assistant): Hỗ trợ nhân viên IT nhanh chóng kiểm tra kết nối mạng của máy trạm, tìm kiếm vị trí IP của các kết nối bất thường và giải đáp các thắc mắc nghiệp vụ tự động.
- Học tập và giảng dạy môn Mạng máy tính: Đóng vai trò là nền tảng trực quan cho sinh viên thực hành lập trình Socket TCP/IP, hiểu rõ cơ chế bắt tay 3 bước thông qua hoạt động quét cổng và phân tích gói tin.
[Máy trạm Client]
│ (1) Gửi lệnh: "quét port 127.0.0.1 80-443"
▼
[Server Socket Hub] ──(2) Tạo luồng quét TCP──► [Mục tiêu IP:Port]
│ │ (3) SYN-ACK / RST
▼ ▼
[Bộ phân tích kết quả] ◄──────────────────────────────┘
│ (4) Định dạng bảng kết quả: Port 80 [OPEN], Port 443 [OPEN]
▼
[Giao diện Chatbot Client]
Yêu cầu triển khai hệ thống
- Phía Server: Hệ điều hành Linux (Ubuntu 20.04+) hoặc Windows Server, cài đặt sẵn OpenJDK 21 trở lên, MySQL Server 8.4 (mở cổng 3306), mở cổng Socket TCP 8888 trên Firewall.
- Phía Client: Hệ điều hành đa nền tảng (Windows 10/11, macOS, Linux) có cài đặt Java Runtime Environment (JRE 21).
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Khả năng hiểu ngữ cảnh sâu: Việc xử lý ngôn ngữ tự nhiên còn phụ thuộc vào SimSimi API bên ngoài, đôi khi phản hồi chưa thực sự đồng nhất với ngữ cảnh chuyên sâu về kỹ thuật mạng.
- Bảo mật đường truyền: Giao thức Socket hiện tại truyền dữ liệu dạng chuỗi nhị phân/UTF qua
DataOutputStream thô, chưa được bọc lớp mã hóa SSL/TLS (SSLSocket).
Hướng phát triển trong tương lai
- Tích hợp Large Language Models (LLMs) cục bộ: Tích hợp trực tiếp các mô hình ngôn ngữ mã nguồn mở như Llama 3 hoặc Mistral chạy qua Ollama trên máy chủ nội bộ để trả lời chuyên sâu về công nghệ thông tin mà không phụ thuộc Internet.
- Nâng cấp giao thức truyền thông: Chuyển đổi sang WebSockets hoặc gRPC để hỗ trợ truyền tải dữ liệu dung lượng lớn và tối ưu hóa băng thông.
- Mở rộng bộ công cụ mạng: Bổ sung tính năng Ping ICMP, Traceroute, kiểm tra bản ghi DNS Lookup và phân tích gói tin mạng cơ bản.
Đối tượng hưởng lợi
- Sinh viên ngành Công nghệ thông tin & Mạng máy tính: Tiếp cận mã nguồn mẫu chuẩn mực về lập trình Socket, xử lý đa luồng trong Java và thiết kế giao diện hiện đại với JavaFX.
- Lập trình viên phần mềm: Nắm bắt quy trình tích hợp API RESTful vào ứng dụng desktop Java truyền thống và phương pháp quản trị kết nối CSDL MySQL hiệu quả.
- Doanh nghiệp và Tổ chức giáo dục: Sở hữu một giải pháp mã nguồn mở phục vụ giao tiếp nội bộ và quản trị hạ tầng mạng ban đầu với chi phí bản quyền 0 đồng, tiết kiệm 100% so với việc thuê các nền tảng thương mại.
Câu hỏi thường gặp
1. Cần chuẩn bị những môi trường gì để triển khai đồ án từ mã nguồn?
Người dùng cần cài đặt Apache NetBeans IDE (phiên bản 22 khuyến nghị), bộ công cụ Java Development Kit (JDK 21 hoặc 22) và MySQL 8.4 Server. Cần import file cơ sở dữ liệu đính kèm và cấu hình lại thông số tài khoản CSDL trong file cấu hình kết nối của Server trước khi biên dịch.
2. Hệ thống có thể phục vụ tối đa bao nhiêu kết nối đồng thời?
Với kiến trúc Thread-per-client hiện tại trên nền tảng phần cứng tiêu chuẩn (4 Cores, 8GB RAM), hệ thống duy trì hoạt động ổn định với 50 - 100 client kết nối đồng thời. Để nâng quy mô lên hàng nghìn kết nối, kiến trúc server có thể chuyển đổi sang Non-blocking I/O (Java NIO) hoặc Netty Framework.
3. Làm thế nào để chatbot phân biệt giữa câu hỏi trò chuyện thông thường và lệnh quét mạng?
Server tích hợp bộ lọc phân tích cú pháp (Message Parser). Khi thông điệp chứa các từ khóa định danh hoặc mẫu lệnh kỹ thuật (ví dụ: quét port, thời tiết tại, ip:), hệ thống sẽ chuyển hướng yêu cầu sang các Service Class chuyên trách thay vì đẩy vào NLP Engine của SimSimi.
4. Tính năng gửi mã OTP khôi phục mật khẩu hoạt động như thế nào nếu mạng nội bộ không có kết nối Internet?
Dịch vụ gửi OTP sử dụng giao thức SMTP kết nối đến máy chủ Google Mail Server (smtp.gmail.com:587), do đó Server cần có kết nối Internet ra bên ngoài. Trong môi trường mạng nội bộ hoàn toàn (Air-gapped network), có thể cấu hình chuyển tiếp sang một Local Mail Server như Postfix hoặc James Mail Server.
5. Chi phí vận hành và bảo trì hệ thống ước tính là bao nhiêu?
Hệ thống được xây dựng hoàn toàn từ các công nghệ mã nguồn mở miễn phí (Java, JavaFX, MySQL Community Edition). Chi phí vận hành gần như bằng 0 nếu tận dụng hạ tầng máy chủ sẵn có của đơn vị triển khai.
Kết luận
Đồ án "Xây dựng chương trình AI Chatbot" đã hoàn thành xuất sắc các mục tiêu đề ra về mặt lý thuyết lẫn thực tiễn ứng dụng. Bằng việc kết hợp hài hòa giữa giao thức mạng tầng giao vận (TCP Sockets), lập trình đa luồng, cơ sở dữ liệu quan hệ MySQL 8.4 và giao diện trực quan JavaFX, nhóm tác giả đã phát triển thành công một giải pháp Chatbot đa năng, vừa hỗ trợ giao tiếp thông minh vừa đóng vai trò là bộ công cụ đắc lực cho quản trị viên mạng. Đây là nền tảng vững chắc để tiếp tục nghiên cứu, mở rộng thành các hệ thống trợ lý ảo chuyên dụng thế hệ mới trong tương lai.