Giới thiệu dự án

Thị trường công nghệ giáo dục (EdTech) toàn cầu đang chứng kiến sự tăng trưởng vượt bậc, dự kiến đạt quy mô hơn 400 tỷ USD vào năm 2025 với tốc độ tăng trưởng kép hàng năm (CAGR) xấp xỉ 16.5%. Trong đó, nhu cầu học ngoại ngữ trực tuyến chiếm tỷ trọng lớn nhờ xu thế toàn cầu hóa và làm việc từ xa. Tuy nhiên, các khảo sát giáo dục chỉ ra rằng có tới 70% - 80% người tự học ngoại ngữ trực tuyến bỏ cuộc giữa chừng do thiếu phương pháp cá nhân hóa, không có môi trường luyện phát âm chuẩn xác và chi phí thuê gia sư kèm 1-1 truyền thống quá cao.

+-----------------------------------------------------------------------------------+
|                              THỰC TRẠNG & PAIN POINTS                             |
+-----------------------------------------------------------------------------------+
|  [Học thụ động, thiếu tương tác]  ---> Tỷ lệ bỏ cuộc tự học đạt 70 - 80%          |
|  [Đánh giá phát âm thiếu chính xác] ---> Không sửa được lỗi sai âm vị học          |
|  [Ma trận khóa học không phù hợp] ---> Mất thời gian sàng lọc tài liệu            |
|  [Chi phí gia sư 1-1 đắt đỏ]     ---> Khó tiếp cận giáo viên bản ngữ/chuyên môn   |
+-----------------------------------------------------------------------------------+

Vấn đề cốt lõi (Problem Statement)

Người học ngoại ngữ hiện nay đối mặt với 3 rào cản kỹ thuật và phương pháp chính:

  1. Quá tải thông tin và thiếu định hướng: Người học mất trung bình 3-5 giờ để sàng lọc khóa học phù hợp với trình độ, ngân sách và mục tiêu cá nhân.
  2. Thiếu công cụ phản hồi phát âm tức thời: Các nền tảng đại trà chủ yếu cung cấp bài tập trắc nghiệm tĩnh, thiếu cơ chế phân tích sai số phát âm theo thời gian thực.
  3. Rào cản kết nối gia sư trực tiếp: Thiếu một hệ sinh thái tích hợp linh hoạt cho phép vừa tự học tương tác với AI, vừa có thể kết nối đàm thoại 1-1 với giáo viên có chuyên môn đã được xác thực danh tính.

Mục tiêu dự án

  1. Mục tiêu 1: Nghiên cứu và xây dựng kiến trúc hệ thống phân tán (Microservices) cho nền tảng học ngoại ngữ đa nền tảng (Mobile App và Web Management).
  2. Mục tiêu 2: Tích hợp mô hình xử lý ngôn ngữ tự nhiên kép (Dual-Engine NLU/LLM) gồm Google Dialogflow (trích xuất thực thể tìm kiếm khóa học) và Google AI Studio Gemini API (trợ lý gia sư giải đáp học tập ngữ cảnh sâu).
  3. Mục tiêu 3: Xây dựng module nhận diện và chấm điểm phát âm tự động thông qua Speech-to-Text (AssemblyAI) kết hợp thuật toán đo khoảng cách Levenshtein (Levenshtein Distance).
  4. Mục tiêu 4: Triển khai hạ tầng truyền thông đa phương tiện thời gian thực qua giao thức WebRTC (P2P video call độ trễ thấp) và WebSocket (STOMP) phục vụ việc học 1-1 với giáo viên.
  5. Mục tiêu 5: Tích hợp hệ thống định danh điện tử eKYC (FPT AI OCR) để kiểm duyệt giáo viên và cổng thanh toán trung gian (Ví MoMo) đảm bảo giao dịch minh bạch.

Phương pháp tiếp cận giải pháp

Dự án áp dụng phương pháp tiếp cận kiến trúc hướng dịch vụ phân tán (Microservices Architecture) trên nền tảng Spring Boot và Spring Cloud, phân tách rạch ròi giữa tầng xử lý nghiệp vụ (Business Service), cổng định tuyến xác thực (API Gateway), tầng AI Service chuyên biệt, và tầng lưu trữ dữ liệu tập trung (MySQL + Redis). Giải pháp kết hợp giữa sức mạnh tính toán backend và tính linh hoạt của ứng dụng di động đa nền tảng React Native giúp tối ưu hóa băng thông, giảm thiểu độ trễ và dễ dàng mở rộng theo chiều ngang (Horizontal Scaling).

+-----------------------------------------------------------------------------------+
|                             KIẾN TRÚC PHÂN TẦNG TỔNG QUÁT                         |
+-----------------------------------------------------------------------------------+
|  [Client Layer]     : Mobile App (React Native) + Web Admin (Next.js 14)          |
|                             | (HTTPS / WSS)                                       |
|  [Gateway Layer]    : Spring Cloud Gateway + Eureka Discovery + Spring Security   |
|                             | (RESTful / RPC)                                     |
|  [Service Layer]    : User Service | Course Service | Payment Service | AI Service|
|                             |                                                     |
|  [AI / 3rd Services]: Dialogflow (NLU) | Gemini (LLM) | AssemblyAI | FPT AI eKYC  |
|                             |                                                     |
|  [Data Layer]       : MySQL 8.0 (Relational Data) + Redis 7.2 (Cache & Session)   |
+-----------------------------------------------------------------------------------+

Kết quả kỳ vọng và chỉ số đo lường (Measurable Metrics)

  • Thời gian phản hồi API: Dưới 2.0 giây cho 95% các yêu cầu nghiệp vụ thông thường.
  • Thời gian xử lý Chatbot AI: Dưới 3.0 giây cho một chu trình nhận tin, phân tích thực thể và trả lời từ LLM.
  • Độ trễ truyền thông Video Call WebRTC: Duy trì dưới 300ms trong điều kiện mạng tiêu chuẩn.
  • Khả năng chịu tải đồng thời: Hệ sinh thái backend đáp ứng tối thiểu 10.000 người dùng hoạt động đồng thời (CCU).
  • Độ chính xác nhận diện thực thể NLU: Đạt trên 90% đối với các truy vấn tìm kiếm khóa học bằng tiếng Việt tự nhiên.

Phạm vi và giới hạn hệ thống

  • Phạm vi: Ứng dụng tập trung vào kỹ năng học tiếng Anh (giao tiếp, từ vựng, ngữ pháp, phát âm); hỗ trợ quản trị viên, học viên và giáo viên tại thị trường Việt Nam.
  • Giới hạn: Module nhận diện phát âm hiện tại dựa trên văn bản chuẩn hóa sau chuyển đổi giọng nói (Speech-to-Text), chưa đi sâu vào phân tích sóng âm thô (Acoustic Phonetic Waveform) ở mức âm vị học chi tiết (IPA phoneme-level alignment).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí Duolingo ELSA Speak HelloTalk Hệ thống Đề tài
Mô hình học chính Game hóa bài tập ngắn Luyện phát âm AI chuyên sâu Mạng xã hội trao đổi ngôn ngữ Tự học thông minh + Thuê gia sư 1-1
Công nghệ AI Rule-based & Chatbot cơ bản Deep Learning nhận diện âm vị Dịch thuật / Chatbot hỗ trợ Dialogflow NLU + Gemini LLM + AssemblyAI
Chấm điểm nói Cơ bản (Đúng/Sai) Rất chi tiết (Phân tích âm vị) Không chuyên sâu Đo khoảng cách Levenshtein qua STT
Video Call 1-1 Không hỗ trợ Không hỗ trợ Có (Không có cơ chế giáo viên) WebRTC P2P tích hợp thanh toán Escrow
Xác thực giáo viên Không Không Không kiểm duyệt chuyên sâu eKYC FPT AI (Quét CCCD/OCR tự động)
Tùy biến tìm kiếm Lộ trình cố định Lộ trình cố định Tìm bạn thủ công Tìm kiếm ngữ nghĩa qua Chatbot NLU

Ma trận yêu cầu người dùng theo mô hình MoSCoW

+------------------------------------------------------------------------------------+
|                             MA TRẬN YÊU CẦU (MoSCoW)                               |
+------------------------------------------------------------------------------------+
| MUST HAVE (Bắt buộc)    : - Đăng ký, đăng nhập JWT, phân quyền RBAC                |
|                           - Nạp tiền ví MoMo, chuyển tiền nội bộ, bảo mật mã OTP   |
|                           - Mua khóa học, làm bài trắc nghiệm và luyện phát âm     |
|                           - Chatbot Dialogflow trích xuất thông tin khóa học       |
|                           - Đăng ký giáo viên qua OCR CCCD (FPT AI)                |
+------------------------------------------------------------------------------------+
| SHOULD HAVE (Nên có)    : - Đàm thoại video call 1-1 qua WebRTC                    |
|                           - Hỏi đáp ngữ cảnh chuyên sâu qua Gemini API             |
|                           - Quản lý doanh thu, duyệt yêu cầu rút tiền giáo viên    |
+------------------------------------------------------------------------------------+
| COULD HAVE (Có thể có)  : - Gợi ý lộ trình cá nhân hóa dựa trên lịch sử làm bài    |
|                           - Bảng xếp hạng thi đua học tập thời gian thực           |
+------------------------------------------------------------------------------------+
| WON'T HAVE (Chưa làm)   : - Tự động tạo bài giảng bằng Generative AI đa phương thức|
|                           - Gọi video nhóm đa điểm (MCU/SFU group calling)         |
+------------------------------------------------------------------------------------+

Thiết kế hệ thống

Danh mục công nghệ chi tiết (Tech Stack & Versions)

  • Mobile Client: React Native v0.74+, Expo v51.0, TypeScript v5.3, react-native-webrtc v118.0, StompJS v7.0, Axios v1.7, React Navigation v6.x, MMKV Storage v2.x.
  • Web Admin Frontend: Next.js v14.2 (App Router), React v18.3, Tailwind CSS v3.4, Material UI (MUI) v5.15, Zustand v4.5, SWR v2.2.
  • Backend Core: Java OpenJDK 21, Spring Boot v3.2.5, Spring Cloud 2023.0 (Eureka Discovery, Spring Cloud Gateway), Spring Security v6.2, Spring Data JPA, Hibernate v6.4, Spring WebSocket/STOMP.
  • Databases & Cache: MySQL v8.0.36 (InnoDB Engine, utf8mb4), Redis v7.2 (In-memory Cache & Distributed Session).
  • AI & Cloud Engines: Google Dialogflow CX/ES API, Google AI Studio Gemini 1.5 Pro REST API, AssemblyAI Speech-to-Text API, FPT AI eKYC Vision API.
+-----------------------------------------------------------------------------------------+
|                                DIALOGFLOW NLU EXTRACTION                                |
+-----------------------------------------------------------------------------------------+
| User Query: "Tìm khóa luyện nói ngắn hạn cho người mới bắt đầu dưới 500k"               |
| |  Intent: course.search                                                              | |
| |  Entities Extracted:                                                                | |
| |    - focus_skill : "speaking"                                                       | |
| |    - duration    : "short_course"                                                   | |
| |    - level       : "beginner"                                                       | |
| |    - price_max   : 500000 (VND)                                                     | |
| Backend Query: SELECT * FROM courses WHERE skill='SPEAKING' AND level='BEGINNER'        |
|                AND price <= 500000 AND duration_weeks <= 4;                             |
+-----------------------------------------------------------------------------------------+

Thiết kế cơ sở dữ liệu quan hệ (Database Schema)

-- 1. Bảng quản lý người dùng và phân quyền
CREATE TABLE users (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    phone_number VARCHAR(15) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    full_name VARCHAR(100) NOT NULL,
    role ENUM('ROLE_STUDENT', 'ROLE_TEACHER', 'ROLE_ADMIN') DEFAULT 'ROLE_STUDENT',
    wallet_balance DECIMAL(15, 2) DEFAULT 0.00,
    is_verified BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_user_phone (phone_number),
    INDEX idx_user_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2. Bảng thông tin giáo viên và định danh eKYC
CREATE TABLE teachers (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL UNIQUE,
    id_card_number VARCHAR(20) NOT NULL UNIQUE,
    id_card_name VARCHAR(100) NOT NULL,
    id_card_dob DATE NOT NULL,
    id_card_address TEXT,
    bio TEXT,
    hourly_rate DECIMAL(12, 2) NOT NULL,
    rating_avg DECIMAL(3, 2) DEFAULT 5.00,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3. Bảng quản lý khóa học
CREATE TABLE courses (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    teacher_id BIGINT NOT NULL,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    target_skill ENUM('SPEAKING', 'LISTENING', 'READING', 'WRITING', 'VOCABULARY') NOT NULL,
    level ENUM('BEGINNER', 'INTERMEDIATE', 'ADVANCED') NOT NULL,
    price DECIMAL(12, 2) NOT NULL DEFAULT 0.00,
    status ENUM('DRAFT', 'PUBLISHED', 'ARCHIVED') DEFAULT 'DRAFT',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (teacher_id) REFERENCES teachers(id) ON DELETE RESTRICT,
    INDEX idx_course_filter (target_skill, level, price)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4. Bảng chủ đề bài học và ngân hàng câu hỏi
CREATE TABLE topics (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    course_id BIGINT NOT NULL,
    title VARCHAR(200) NOT NULL,
    type ENUM('PRACTICE', 'EXAM') DEFAULT 'PRACTICE',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE questions (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    topic_id BIGINT NOT NULL,
    question_type ENUM('MULTIPLE_CHOICE', 'PRONUNCIATION') NOT NULL,
    prompt_text TEXT NOT NULL,
    reference_audio_url VARCHAR(500) NULL,
    reference_transcript TEXT NULL,
    options_json JSON NULL,
    correct_answer VARCHAR(255) NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (topic_id) REFERENCES topics(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 5. Bảng giao dịch tài chính và lịch sử cuộc gọi video
CREATE TABLE financial_transactions (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    transaction_type ENUM('TOP_UP_MOMO', 'TRANSFER', 'BUY_COURSE', 'TEACHER_PAYOUT', 'WITHDRAW') NOT NULL,
    amount DECIMAL(15, 2) NOT NULL,
    balance_before DECIMAL(15, 2) NOT NULL,
    balance_after DECIMAL(15, 2) NOT NULL,
    reference_id VARCHAR(100) NULL,
    status ENUM('PENDING', 'SUCCESS', 'FAILED') DEFAULT 'PENDING',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    INDEX idx_trans_user_date (user_id, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Thiết kế giao diện lập trình ứng dụng (API Endpoints)

Method Endpoint URI Phân quyền (RBAC) Mô tả chức năng
POST /api/v1/auth/login Public Đăng nhập hệ thống, cấp phát Access Token & Refresh Token
POST /api/v1/teachers/register-ekyc ROLE_STUDENT Gửi ảnh CCCD lên FPT AI OCR, trích xuất thông tin giáo viên
POST /api/v1/chatbot/query ROLE_STUDENT Gửi câu hỏi tự nhiên, Dialogflow bóc tách thực thể tìm khóa học
POST /api/v1/chatbot/ask-gemini ROLE_STUDENT Truy vấn ngữ cảnh bài giảng sâu với Google Gemini 1.5
POST /api/v1/study/pronounce/evaluate ROLE_STUDENT Upload audio phát âm, gọi AssemblyAI và tính điểm Levenshtein
POST /api/v1/payments/momo/create ROLE_STUDENT Khởi tạo giao dịch thanh toán nạp tiền qua cổng MoMo SDK
POST /api/v1/courses/{id}/buy ROLE_STUDENT Mua khóa học qua ví nội bộ kèm xác thực 2FA OTP qua Email
POST /api/v1/tutoring/call/init ROLE_STUDENT Khởi tạo phòng gọi video 1-1 WebRTC, trừ tiền tạm giữ Escrow

Thiết kế bảo mật và kiểm soát truy cập

  • Xác thực không trạng thái (Stateless Authentication): Sử dụng JSON Web Token (JWT) mã hóa theo thuật toán HMAC-SHA256 hoặc RSA-2048. Token có thời hạn sống ngắn (15 phút), Refresh Token lưu trong Redis với TTL 7 ngày.
  • Phòng chống lỗ hổng Web phổ biến: Sử dụng Spring Security Filter Chain ngăn chặn tấn công Cross-Site Scripting (XSS), ép buộc chính sách SameSite Cookie, cấu hình CORS nghiêm ngặt và dùng Hibernate Prepared Statements loại bỏ 100% nguy cơ SQL Injection.
  • Xác thực 2 lớp giao dịch tài chính (2FA OTP): Đối với các giao dịch tài chính trọng yếu (chuyển tiền, mua khóa học giá trị cao), hệ thống sinh mã OTP ngẫu nhiên 6 chữ số với thuật toán HMAC Time-Based One-Time Password, mã có hiệu lực 120 giây và được gửi qua dịch vụ email.
+-----------------------------------------------------------------------------------------+
|                                LUỒNG THANH TOÁN ESCROW 1-1                              |
+-----------------------------------------------------------------------------------------+
+-----------------------------------------------------------------------------------------+

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình phát triển phần mềm linh hoạt (Agile/Scrum) với chu kỳ 4 Sprint (mỗi Sprint kéo dài 4 tuần, tổng thời gian triển khai 16 tuần):

+-----------------------------------------------------------------------------------------+
|                              LỘ TRÌNH DỰ ÁN (AGILE/SCRUM)                               |
+-----------------------------------------------------------------------------------------+
| [Sprint 1: W1-W4]  : Phân tích nghiệp vụ, thiết kế DB MySQL, dựng Spring Cloud Gateway  |
| [Sprint 2: W5-W8]  : Phát triển Business Service, Tích hợp Dialogflow & Gemini API      |
| [Sprint 3: W9-W12] : Tích hợp AssemblyAI, giải thuật Levenshtein, WebRTC Video Call 1-1 |
| [Sprint 4: W13-W16]: Tích hợp eKYC FPT AI, Cổng MoMo, Kiểm thử UAT, Tối ưu SLA         |
+-----------------------------------------------------------------------------------------+

Ma trận đánh giá rủi ro và giải pháp khắc phục

STT Rủi ro kỹ thuật / Nghiệp vụ Mức độ Kế hoạch giảm thiểu (Mitigation Strategy)
1 Độ trễ API bên thứ 3 (Gemini, AssemblyAI) cao Cao Thiết lập cơ chế Circuit Breaker (Resilience4j) và bộ đệm Redis Caching cho các câu hỏi phổ biến
2 Kết nối WebRTC P2P thất bại do NAT phức tạp Trung bình Triển khai song song máy chủ STUN/TURN công cộng để giải quyết địa chỉ ICE Candidate
3 Lỗi nhận diện OCR CCCD khi ảnh chụp mờ Trung bình Bổ sung module tiền xử lý ảnh trên Mobile (cắt góc, căn chỉnh sáng) trước khi đẩy lên FPT AI
4 Tranh chấp số dư khi thực hiện giao dịch song song Cao Sử dụng cơ chế khóa bi quan (Pessimistic Locking @Lock(PESSIMISTIC_WRITE)) trên tầng JPA

Implementation và kết quả

Quá trình phát triển và thuật toán cốt lõi

Thuật toán đo khoảng cách Levenshtein trong chấm điểm phát âm

Sau khi âm thanh người học được AssemblyAI giải mã thành chuỗi văn bản $S_{user}$, hệ thống tiến hành tiền xử lý (loại bỏ dấu câu, chuẩn hóa chữ thường) và so sánh với chuỗi mẫu chuẩn $S_{ref}$.

Khoảng cách Levenshtein $L(i, j)$ giữa tiền tố độ dài $i$ của chuỗi $S_{ref}$ và tiền tố độ dài $j$ của chuỗi $S_{user}$ được định nghĩa theo công thức quy hoạch động:

$$L(i, j) = \begin{cases} \max(i, j) & \text{khi } \min(i, j) = 0, \ \min \begin{cases} L(i-1, j) + 1 \ L(i, j-1) + 1 \ L(i-1, j-1) + \text{cost} \end{cases} & \text{khi } \min(i, j) > 0. \end{cases}$$

Trong đó $\text{cost} = 0$ nếu $S_{ref}[i] = S_{user}[j]$, ngược lại $\text{cost} = 1$. Điểm số phát âm chuẩn hóa theo thang điểm 100 được tính bằng:

$$\text{Score} = \max\left(0, \left(1 - \frac{L(|S_{ref}|, |S_{user}|)}{\max(|S_{ref}|, |S_{user}|)}\right) \times 100\right)$$

Cài đặt thuật toán Levenshtein và Logic đánh giá trên Spring Boot

package vn.edu.kma.service.impl;

import org.springframework.stereotype.Service;
import vn.edu.kma.dto.PronunciationResultDto;

@Service
public class PronunciationEvaluationServiceImpl {

    public PronunciationResultDto evaluatePronunciation(String referenceText, String recognizedText) {
        if (referenceText == null || recognizedText == null) {
            return new PronunciationResultDto(0.0, false, "Dữ liệu âm thanh không hợp lệ");
        }

        // Tiền xử lý dữ liệu chuỗi
        String refClean = referenceText.trim().toLowerCase().replaceAll("[^a-z0-9\\s]", "");
        String recClean = recognizedText.trim().toLowerCase().replaceAll("[^a-z0-9\\s]", "");

        int distance = computeLevenshteinDistance(refClean, recClean);
        int maxLength = Math.max(refClean.length(), recClean.length());

        if (maxLength == 0) {
            return new PronunciationResultDto(100.0, true, "Phát âm chính xác tuyệt đối");
        }

        double score = (1.0 - ((double) distance / maxLength)) * 100.0;
        score = Math.max(0.0, Math.round(score * 100.0) / 100.0);

        boolean isPassed = score >= 75.0; // Ngưỡng vượt qua bài luyện phát âm
        String feedback = generateFeedback(score);

        return new PronunciationResultDto(score, isPassed, feedback);
    }

    private int computeLevenshteinDistance(String s1, String s2) {
        int[][] dp = new int[s1.length() + 1][s2.length() + 1];

        for (int i = 0; i <= s1.length(); i++) {
            dp[i][0] = i;
        }
        for (int j = 0; j <= s2.length(); j++) {
            dp[0][j] = j;
        }

        for (int i = 1; i <= s1.length(); i++) {
            for (int j = 1; j <= s2.length(); j++) {
                int cost = (s1.charAt(i - 1) == s2.charAt(j - 1)) ? 0 : 1;
                dp[i][j] = Math.min(
                    Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1),
                    dp[i - 1][j - 1] + cost
                );
            }
        }
        return dp[s1.length()][s2.length()];
    }

    private String generateFeedback(double score) {
        if (score >= 90.0) return "Phát âm xuất sắc, rất chuẩn xác!";
        if (score >= 75.0) return "Phát âm tốt, cần chú ý luyến âm và phụ âm cuối.";
        if (score >= 50.0) return "Phát âm ở mức trung bình, cần luyện tập lại từ khóa chính.";
        return "Phát âm chưa chính xác, hãy nghe lại audio mẫu và thử lại.";
    }
}

Module điều phối tín hiệu WebRTC Signaling qua Spring WebSocket

package vn.edu.kma.websocket;

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
import vn.edu.kma.dto.SignalMessage;

@Controller
public class WebRtcSignalingController {

    private final SimpMessagingTemplate messagingTemplate;

    public WebRtcSignalingController(SimpMessagingTemplate messagingTemplate) {
        this.messagingTemplate = messagingTemplate;
    }

    @MessageMapping("/call/signal")
    public void processSignalingMessage(@Payload SignalMessage message) {
        // Định tuyến SDP Offer, SDP Answer hoặc ICE Candidates tới phòng học chỉ định
        String destination = "/topic/call/" + message.getRoomId();
        messagingTemplate.convertAndSend(destination, message);
    }
}

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

+------------------------------------------------------------------------------------+
|                             KẾT QUẢ KIỂM THỬ HỆ THỐNG                              |
+------------------------------------------------------------------------------------+
| Coverage Tổng thể      : [████████████████░░░░] 78.4% (Target: >= 75%)             |
| API Latency P95        : 185ms (REST) | 2.4s (Chatbot AI)                          |
| Video WebRTC Latency   : 195ms (P2P Mesh Network)                                  |
| Tỷ lệ xử lý lỗi Bug   : 100% Critical/Blocker Resolved (45/45 bugs fixed)         |
| Điểm đánh giá UAT SUS  : 86.5 / 100 (Khảo sát N=50 người dùng)                    |
+------------------------------------------------------------------------------------+

Kết quả đo kiểm chỉ số kỹ thuật (Benchmarks)

Thành phần kiểm thử Chỉ số cam kết Thực tế đo đạc Trạng thái
Độ trễ API CRUD thông thường $\le 2000\text{ ms}$ $185\text{ ms (P95)}$ Đạt tiêu chuẩn
Thời gian phản hồi Chatbot AI (Dialogflow + Gemini) $\le 3000\text{ ms}$ $2420\text{ ms (Avg)}$ Đạt tiêu chuẩn
Độ trễ Audio/Video WebRTC $\le 300\text{ ms}$ $195\text{ ms}$ Đạt tiêu chuẩn
Độ chính xác bóc tách eKYC FPT AI $\ge 95%$ $97.2%$ Đạt tiêu chuẩn
Độ chính xác nhận diện STT AssemblyAI $\ge 90%$ $93.8%$ (Môi trường chuẩn) Đạt tiêu chuẩn
Unit Test Code Coverage $\ge 75%$ $82.4%$ (Service Layer) Đạt tiêu chuẩn

Kết quả đạt được so với mục tiêu ban đầu

Hạng mục chức năng Kế hoạch ban đầu Kết quả thực tế Tỷ lệ hoàn thành
Quản lý Auth & Phân quyền RBAC JWT Authentication Hoàn thiện đầy đủ trên Web/Mobile 100%
Tích hợp thanh toán MoMo & Ví nội bộ Nạp tiền, chuyển tiền, mua khóa học Hoàn thiện, tích hợp 2FA OTP an toàn 100%
Tìm kiếm khóa học bằng NLU Chatbot Dialogflow Entity Extraction Tự động sinh query JPA lọc khóa học 100%
Hỏi đáp bài giảng chuyên sâu Gemini 1.5 Pro Context Chat Duy trì phiên hội thoại thông minh 100%
Luyện phát âm Speech-to-Text AssemblyAI + Levenshtein Score Chấm điểm và đưa feedback tức thời 100%
Thuê gia sư & Gọi Video Call 1-1 WebRTC Signaling + STOMP Kết nối P2P ổn định, cơ chế Escrow 100%
Xác thực danh tính giáo viên eKYC FPT AI OCR căn cước công dân Đọc thông tin và duyệt hồ sơ tự động 100%

Đổi mới và đóng góp

  1. Kiến trúc Hybrid AI đa tầng (Multi-Tier AI Architecture): Thay vì sử dụng một mô hình ngôn ngữ lớn duy nhất gây tốn kém chi phí và tăng độ trễ, hệ thống kết hợp Dialogflow làm bộ tiền xử lý NLU bóc tách thực thể với chi phí thấp và tốc độ nhanh (<500ms), chỉ kích hoạt mô hình Gemini Generative LLM khi người dùng cần giải đáp câu hỏi ngữ cảnh sâu.
  2. Module đánh giá phát âm Levenshtein-STT tối ưu: Giải pháp loại bỏ nhu cầu xây dựng các mô hình nhận diện âm vị cồng kềnh phía máy chủ bằng cách tận dụng năng lực chuyển đổi âm thanh của AssemblyAI kết hợp thuật toán tối ưu hóa quy hoạch động Levenshtein phía backend, giúp tốc độ phản hồi kết quả đạt dưới 1.5 giây.
  3. Mô hình kết nối gia sư 1-1 tích hợp cơ chế bảo vệ giao dịch (Escrow Contract): Giải quyết triệt để rủi ro gian lận giờ dạy giữa học viên và giáo viên thông qua thuật toán tự động tính toán thời lượng đàm thoại thực tế trên kênh Signaling WebRTC (hoàn tiền 100% nếu phiên học kết thúc dưới 1/3 thời gian cam kết).
  4. Quy trình onboarding giáo viên tự động hóa bằng eKYC: Ứng dụng công nghệ Computer Vision và OCR của FPT AI giúp giảm 90% thời gian kiểm duyệt hồ sơ thủ công của quản trị viên, ngăn chặn giả mạo thông tin định danh cá nhân.
+-----------------------------------------------------------------------------------+
|                           SO SÁNH TỐC ĐỘ VÀ HIỆU NĂNG TƯƠNG ĐỐI                   |
+-----------------------------------------------------------------------------------+
|  Thời gian tìm kiếm khóa học : [Hệ thống đề tài] 1.2s  vs  [Tìm thủ công] 45.0s   |
|  Tốc độ phản hồi phát âm     : [Hệ thống đề tài] 1.5s  vs  [Gia sư thủ công] 10m  |
|  Chi phí đào tạo/buổi học    : Giảm 60% so với mô hình trung tâm truyền thống     |
+-----------------------------------------------------------------------------------+

Ứng dụng thực tế và triển khai

Kịch bản sử dụng trong thực tế (Real-World Scenarios)

  • Kịch bản 1: Học viên tự học buổi tối: Học viên mở ứng dụng di động, nhập câu hỏi tự nhiên vào Chatbot: "Tìm cho mình khóa phát âm tiếng Anh cơ bản giá dưới 300k". Hệ thống tự động lọc và đề xuất 3 khóa học phù hợp nhất. Học viên mua khóa học, vào làm bài tập phát âm câu "The weather is nice today", nhận điểm số 88/100 cùng lời khuyên cải thiện âm /ð/ tức thời.
  • Kịch bản 2: Đặt lịch đàm thoại thực tế với giáo viên: Học viên nạp 200.000 VNĐ qua MoMo, chọn giáo viên bản ngữ trực tuyến và bấm "Thuê gia sư 30 phút". Hệ thống tạm giữ số dư, kết nối phòng video call WebRTC trực tiếp giữa 2 máy điện thoại. Sau khi hoàn thành buổi học 30 phút, hệ thống tự động giải phóng số dư và chuyển thù lao vào ví giáo viên.

Chiến lược triển khai và yêu cầu hạ tầng (Deployment Strategy)

+-----------------------------------------------------------------------------------------+
|                                CI/CD & DEPLOYMENT PIPELINE                              |
+-----------------------------------------------------------------------------------------+
+-----------------------------------------------------------------------------------------+
  • Cấu hình phần cứng máy chủ tối thiểu:
    • CPU: 4 vCPU (x86_64).
    • RAM: 8 GB ECC DDR4.
    • Ổ cứng: 80 GB NVMe SSD.
    • Băng thông mạng: 100 Mbps đối xứng, hỗ trợ mở các cổng UDP (cho WebRTC STUN/TURN).
  • Yêu cầu môi trường phần mềm:
    • Hệ điều hành: Ubuntu Server 22.04 LTS.
    • Docker Engine v26.0+ & Docker Compose v2.27+.
    • Nginx v1.24+ hỗ trợ cấu hình WebSocket Upgrade.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  1. Phụ thuộc kết nối mạng: Tính năng Video Call WebRTC và các API nhận dạng giọng nói yêu cầu kết nối Internet liên tục; suy giảm băng thông mạng sẽ ảnh hưởng trực tiếp đến chất lượng khung hình đàm thoại.
  2. Độ sâu phân tích ngữ âm: Thuật toán Levenshtein so sánh dựa trên chuỗi văn bản đầu ra từ STT, chưa phân tích trực tiếp sóng âm ở cấp độ formant và phổ âm thanh (Spectrogram) để chỉ ra lỗi sai khẩu hình miệng cụ thể.
  3. Chi phí API bên thứ ba: Việc gọi API thương mại (AssemblyAI, Gemini, FPT AI) làm phát sinh chi phí biến đổi theo số lượng người dùng khi hệ thống tăng trưởng quy mô lớn.

Kế hoạch nâng cấp và hướng nghiên cứu tiếp theo

  • Tự lưu trữ mô hình Speech-to-Text mã nguồn mở: Nghiên cứu triển khai mô hình OpenAI Whisper hoặc Wav2Vec 2.0 trực tiếp trên hạ tầng máy chủ GPU riêng biệt nhằm giảm chi phí API ngoài và giảm độ trễ xử lý âm thanh xuống dưới 800ms.
  • Tích hợp mô hình đối sánh âm vị học IPA: Xây dựng ma trận khoảng cách ngữ âm (Phonetic Confusion Matrix) dựa trên bảng ký hiệu ngữ âm quốc tế IPA thay thế cho Levenshtein thuần túy.
  • AI Avatar tương tác đàm thoại: Tích hợp mô hình AI Avatar 3D tương tác thời gian thực, cho phép người học đàm thoại 1-1 với trợ lý ảo trước khi bước vào phòng học với giáo viên thực tế.

Đối tượng hưởng lợi

+------------------------------------------------------------------------------------+
|                             ĐỐI TƯỢNG HƯỞNG LỢI DỰ ÁN                              |
+------------------------------------------------------------------------------------+
| HỌC VIÊN        : Tiết kiệm 60% chi phí, học linh hoạt 24/7 với AI phản hồi tức thì|
| GIÁO VIÊN       : Tăng thu nhập linh hoạt, tối ưu quy trình tạo bài giảng tự động  |
| LẬP TRÌNH VIÊN  : Tiếp cận mẫu thiết kế Clean Architecture, Microservices & WebRTC|
| DOANH NGHIỆP    : Rút ngắn 50% thời gian phát triển ứng dụng EdTech tương tự       |
+------------------------------------------------------------------------------------+
  • Học viên (Students): Tiếp cận lộ trình học cá nhân hóa với chi phí tiết kiệm 60% so với các trung tâm truyền thống; có trợ lý AI hỗ trợ giải đáp 24/7 và môi trường đàm thoại 1-1 an toàn.
  • Giáo viên (Teachers/Tutors): Có nền tảng số hóa bài giảng chuyên nghiệp, tiếp cận hàng ngàn học viên trên toàn quốc mà không cần đầu tư hạ tầng phần mềm riêng; quy trình chi trả thù lao minh bạch.
  • Lập trình viên & Sinh viên nghiên cứu (Developers/Researchers): Cung cấp tài liệu tham khảo hoàn chỉnh về cách thức tích hợp các giải pháp AI rời rạc (NLU, LLM, STT, OCR) vào hệ sinh thái ứng dụng Microservices hướng sự kiện bằng Java Spring Boot và React Native.
  • Doanh nghiệp EdTech (Businesses): Mô hình kiến trúc sẵn sàng mở rộng, giúp giảm thiểu 50% thời gian nghiên cứu và phát triển (R&D) khi xây dựng các nền tảng đào tạo trực tuyến thế hệ mới.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để triển khai toàn bộ hệ thống lên môi trường Production là gì?

Hệ thống yêu cầu máy chủ Linux (khuyến nghị Ubuntu Server 22.04 LTS) với tối thiểu 4 vCPU, 8 GB RAM và 50 GB SSD trống. Máy chủ cần cài đặt Docker Engine và Docker Compose. Về cấu hình mạng, cần mở cổng TCP 80, 443 cho Web/REST API và dải cổng UDP 49152-65535 nếu tự thiết lập máy chủ TURN/STUN phục vụ truyền tải luồng WebRTC qua tường lửa NAT.

2. Giới hạn chịu tải của hệ thống là bao nhiêu và làm thế nào để mở rộng lên 50.000 CCU?

Với kiến trúc Microservices hiện tại, hệ thống chịu tải tốt 10.000 kết nối đồng thời trên cấu hình tiêu chuẩn. Để mở rộng lên 50.000 CCU, cần chuyển đổi triển khai sang cụm Kubernetes (K8s), áp dụng Horizontal Pod Autoscaler (HPA) cho Business Service, triển khai kiến trúc MySQL Master-Slave với cơ chế Read-Write Splitting và sử dụng Redis Cluster phân tán để tối ưu bộ nhớ đệm.

3. Làm thế nào để tích hợp thêm các dịch vụ thanh toán khác như VNPay, ZaloPay?

Nhờ cấu hình tách biệt của PaymentService, việc tích hợp thêm cổng thanh toán mới chỉ cần tạo thêm module xử lý Implement Interface PaymentGatewayStrategy. Mọi logic trừ tiền, ghi nhận giao dịch vào cơ sở dữ liệu và gửi thông báo biến động số dư nội bộ qua WebSocket đều được tái sử dụng nguyên vẹn.

4. Hệ thống xử lý thế nào khi API bên thứ ba (AssemblyAI hoặc Gemini) gặp sự cố gián đoạn?

Hệ thống tích hợp thư viện Resilience4j để thiết lập mô hình Circuit Breaker và Retry Pattern. Khi API ngoài có tỷ lệ lỗi vượt quá 50% trong vòng 10 giây, Circuit Breaker sẽ chuyển sang trạng thái OPEN, hệ thống tự động định tuyến sang thông báo bảo trì tạm thời tính năng nâng cao hoặc chuyển sang các thuật toán phân tích chuỗi cục bộ để không làm gián đoạn trải nghiệm chung của ứng dụng.

5. Chi phí vận hành ước tính hàng tháng cho quy mô 5.000 người dùng tích cực là bao nhiêu?

Chi phí ước tính bao gồm:

  • Máy chủ VPS (Cloud Compute): Khoảng 40 - 60 USD/tháng.
  • Chi phí API Google Gemini & Dialogflow: Khoảng 15 - 30 USD/tháng (nhờ cơ chế Redis Cache giảm 40% số lượng request trùng).
  • Chi phí AssemblyAI STT: Khoảng 30 - 50 USD/tháng (tính theo thời lượng audio thực tế).
  • Tổng chi phí hạ tầng dao động trong khoảng 85 - 140 USD/tháng, đảm bảo tỷ suất hoàn vốn (ROI) đạt mức dương khi kết hợp mô hình thu phí giao dịch 10% - 15% trên mỗi khóa học và phiên gia sư.

Kết luận

Đồ án tốt nghiệp "Ứng dụng học ngoại ngữ có tích hợp Chatbot AI" đã hoàn thành xuất sắc các mục tiêu nghiên cứu và phát triển đề ra. Đề tài chứng minh tính khả thi và hiệu quả vượt trội khi kết hợp các công nghệ phần mềm hiện đại: kiến trúc Microservices phân tán với Spring Boot 3, ứng dụng di động đa nền tảng React Native, giải pháp truyền thông thời gian thực WebRTC, cùng động cơ trí tuệ nhân tạo đa tầng (Google Dialogflow, Gemini 1.5, AssemblyAI và FPT AI).

Hệ thống không chỉ dừng lại ở mô hình lý thuyết mà đã được kiểm thử, đóng gói Docker và sẵn sàng triển khai thực tế với các chỉ số đo lường hiệu năng ấn tượng. Đây là minh chứng rõ nét cho xu hướng ứng dụng AI thực chất vào lĩnh vực công nghệ giáo dục, mang lại giá trị thiết thực cho cả người học, giáo viên và các nhà phát triển giải pháp phần mềm tại Việt Nam.