Giới thiệu dự án
Sự bùng nổ của trí tuệ nhân tạo (AI) và các nền tảng nhắn tin trực tuyến đã biến chatbot trở thành giải pháp chuyển đổi số trọng tâm trong chăm sóc khách hàng và marketing tự động hóa. Tuy nhiên, hiệu năng thực tế của một chatbot phụ thuộc trực tiếp vào khối lượng và chất lượng của tập dữ liệu huấn luyện (training dataset) dùng cho các thuật ngữ Xử lý ngôn ngữ tự nhiên (Natural Language Processing - NLP). Các nền tảng hiện nay gặp phải điểm nghẽn nghiêm trọng khi chưa có công cụ chuyên biệt để khai thác nhật ký trò chuyện thực tế cũng như thiếu quy trình kiểm duyệt chất lượng nghiêm ngặt trước khi đưa vào mô hình học máy.
Đồ án tập trung nghiên cứu và phát triển "Hệ thống xây dựng dữ liệu huấn luyện từ hội thoại trong chatbot" (triển khai tại hệ thống thực nghiệm SmartDialog). Hệ thống giải quyết bài toán chuyển hóa dữ liệu lịch sử thô thành tập dữ liệu huấn luyện chuẩn hóa cho các mô hình AI hiểu ngôn ngữ tự nhiên, được áp dụng thử nghiệm trong lĩnh vực ngân hàng (VietcomBank) và tài chính tiêu dùng (FE Credit).
+-----------------------------------------------------------------------+
| Nguồn dữ liệu đầu vào |
| [Lịch sử chat thực tế (Khách quan)] [Chat tương tác trực tiếp (Chủ quan)] |
+-----------------------------------+-----------------------------------+
|
v
+-----------------------------------------------------------------------+
| Đơn vị hội thoại (Dialog Unit: Input + NLU + Action) |
+-----------------------------------+-----------------------------------+
|
v
+-----------------------------------------------------------------------+
| Quy trình kiểm duyệt chất lượng 5 trạng thái |
| [Đang xây dựng] -> [Chờ phê duyệt] -> [Đang phê duyệt] -> [Chấp nhận] |
| ^ | |
| +--- [Trả lại] <--+ |
+-----------------------------------+-----------------------------------+
|
v
+-----------------------------------------------------------------------+
| Dữ liệu chuẩn hóa đưa vào AI Engine |
+-----------------------------------------------------------------------+
Mục tiêu dự án
- Thiết lập cơ chế tạo dữ liệu đa luồng: Hỗ trợ bóc tách hội thoại từ log người dùng thực tế và cơ chế chat tương tác trực tiếp để tinh chỉnh kịch bản theo thời gian thực.
- Quy chuẩn quy trình kiểm duyệt đa cấp bậc: Xây dựng luồng phê duyệt 5 trạng thái với cơ chế phân quyền linh hoạt theo nhóm dữ liệu và cấp bậc quản lý.
- Cung cấp công cụ đo lường và trực quan hóa: Thiết kế dashboard phân tích độ chính xác của bot (ý định/hành động) và xuất báo cáo nghiệp vụ tự động.
Định hướng giải pháp và phạm vi
- Phương pháp tiếp cận: Phân tách hội thoại thành các "Đơn vị hội thoại" (Dialog Unit) khép kín gồm câu hỏi người dùng, ý định (Intent), thực thể (Entity/Parameter) và hành động phản hồi (Action). Dữ liệu chỉ được đưa vào tập huấn luyện khi đạt trạng thái "Chấp nhận".
- Kết quả kỳ vọng: Rút ngắn 40% thời gian gán nhãn dữ liệu, loại bỏ 100% dữ liệu sai quy chuẩn trước khi train mô hình NLP.
- Phạm vi hệ thống: Xây dựng ứng dụng Web Application phục vụ quản trị, biên tập và kiểm duyệt dữ liệu; tích hợp với AI Core engine thông qua RESTful API.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát các nền tảng chatbot hàng đầu trên thị trường cho thấy khoảng trống lớn về tính năng quản trị dữ liệu hội thoại:
| Tiêu chí so sánh |
Chatfuel |
Dialogflow (Google) |
FPT.AI Conversation |
Hệ thống đề xuất (SmartDialog) |
| Bóc tách từ lịch sử chat |
Không hỗ trợ |
Có (Chỉ sửa Intent/Entity) |
Có (Chỉ sửa Intent/Entity) |
Hỗ trợ toàn diện (Sửa Intent, Entity, Action) |
| Tạo dữ liệu qua chat tương tác |
Không hỗ trợ |
Không hỗ trợ |
Không hỗ trợ |
Hỗ trợ thời gian thực |
| Quy trình phê duyệt dữ liệu |
Không có |
Không có |
Không có |
Quy trình 5 bước nghiêm ngặt |
| Quản lý phân quyền phân cấp |
Phân quyền cơ bản |
Theo Project GCP |
Theo Bot |
Phân quyền theo Group Script & Agent |
| Trực quan hóa ngữ cảnh |
Theo tin nhắn rời |
Theo từng Request |
Theo từng Request |
Hiển thị theo Đơn vị hội thoại chuẩn |
Yêu cầu người dùng theo mô hình MoSCoW
- Must Have (Bắt buộc): Bóc tách log chat thành đơn vị hội thoại; Chỉnh sửa Intent/Entity/Action; Luồng duyệt 5 trạng thái; Phân quyền Quản trị viên/Quản trị dữ liệu/Biên tập viên; API tích hợp dữ liệu.
- Should Have (Nên có): Chat trực tiếp tương tác với AI Core; Dashboard thống kê hiệu suất bot; Bộ lọc nâng cao theo Session ID/Kênh chat; Xuất báo cáo đa định dạng (Excel, PDF, CSV).
- Could Have (Có thể có): Gán hội thoại linh hoạt giữa các biên tập viên; Lưu trữ lịch sử phiên bản chỉnh sửa (History Versioning).
- Won't Have (Chưa làm trong giai đoạn này): Tự động phân cụm câu hỏi bằng Unsupervised Learning; Huấn luyện trực tiếp model NLP trên giao diện web.
Thiết kế hệ thống
Hệ thống được thiết kế theo mô hình phân tầng Client-Server tách biệt, đảm bảo khả năng chịu tải và mở rộng:
+-----------------------------------------------------------------------------------+
| PRESENTATION LAYER |
| +---------------------------------------------------------------------------+ |
| | NextJS 9.x / ReactJS 16.8+ Client (SPA / SSR) | |
| | - State Management: Redux (Store, Reducer, Action: Auth & GroupScript) | |
| | - UI Framework: Material-UI v4.x, Responsive Layout, Virtual DOM | |
| | - Modules: ScriptView, HistoryView, ManageView, ReportView, Dashboard | |
| +---------------------------------------------------------------------------+ |
+------------------------------------------+----------------------------------------+
| HTTP / RESTful API (JSON Payload)
v
+-----------------------------------------------------------------------------------+
| APPLICATION SERVICE LAYER |
| +---------------------------------------------------------------------------+ |
| | NodeJS v14.x / ExpressJS 4.x Web Server | |
| | - Routing Layer: LogRoute, ScriptRoute, GroupRoute, ReportRoute, Auth | |
| | - Controller Layer: Request Validation, Parameter Normalization | |
| | - Service Layer: ScriptService, LogService, ManageService, ReportEngine | |
| | - Middleware: JWT Authentication, Role-based Access Control (RBAC) | |
| +-------------------------------------+-------------------------------------+ |
+-----------------------------------------|-----------------------------------------+
+---------------------+---------------------+
| |
v v
+---------------------------------------+ +---------------------------------------+
| DATA LAYER | | EXTERNAL INTEGRATION |
| +-------------------------------+ | | +-------------------------------+ |
| | MongoDB 4.x (NoSQL) | | | | AI Core Prediction | |
| | - Script Collection | | | | - Action Prediction Engine | |
| | - LogRequest Collection | | | | - NLU Entity Extractor | |
| | - GroupScript Collection | | | +-------------------------------+ |
| | - Manage Collection | | | Communication: REST/Microservice |
| | - History Collection | | +---------------------------------------+
| +-------------------------------+ |
+---------------------------------------+
Ngăn xếp công nghệ (Technology Stack)
- Frontend: NextJS 9.4+ (React 16.13+), Redux 4.0.5 (Quản lý State tập trung), Redux Thunk, Material-UI v4.11.
- Backend: NodeJS 14.x LTS, ExpressJS 4.17.1 (Kiến trúc Non-blocking I/O Event-driven).
- Cơ sở dữ liệu: MongoDB 4.4 Enterprise (Cơ chế lưu trữ Document JSON/BSON linh hoạt, đánh chỉ mục Compound Index tối ưu hóa truy vấn log).
- Giao thức: RESTful API v1 tiêu chuẩn hóa.
Thiết kế cơ sở dữ liệu (Database Schema)
// Script Collection - Lưu trữ dữ liệu kịch bản hội thoại huấn luyện
const ScriptSchema = new mongoose.Schema({
_id: { type: mongoose.Schema.Types.ObjectId, auto: true },
name: { type: String, required: true, trim: true },
displayName: { type: String, required: true },
groupId: { type: mongoose.Schema.Types.ObjectId, ref: 'GroupScript', index: true },
sessionId: { type: String, index: true },
status: {
type: String,
enum: ['draft', 'pending', 'reviewing', 'returned', 'approved'],
default: 'draft',
index: true
},
mainMessages: [{
userSay: { type: String, required: true },
nlu: {
intent: { type: String, required: true },
parameters: [{ entity: String, value: String, start: Number, end: Number }]
},
action: { type: String, required: true },
result: { type: mongoose.Schema.Types.Mixed },
status: { type: String, enum: ['completed', 'approved', 'rejected'] }
}],
trainingScript: { type: String },
agentId: { type: String, required: true, index: true },
createdBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
approvedBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
}, { timestamps: true });
Thiết kế API Endpoints chính
GET /api/v1/scripts/:scriptId: Truy xuất chi tiết cấu trúc hội thoại và mảng Message.
POST /api/v1/scripts: Khởi tạo hội thoại huấn luyện mới từ log hoặc tương tác trực tiếp.
PUT /api/v1/scripts/:scriptId: Cập nhật cấu trúc đơn vị hội thoại và thay đổi trạng thái quy trình.
GET /api/v1/logs/:sessionId: Bóc tách toàn bộ log hội thoại thô của một phiên người dùng.
GET /api/v1/ai/predict/action: Gửi truy vấn thời gian thực tới AI Core để nhận diện Intent/Action dự đoán.
POST /api/v1/reports: Tổng hợp dữ liệu thống kê Intent/Action và xuất file nghiệp vụ.
Phương pháp luận phát triển (Methodology)
Dự án áp dụng mô hình Agile/Scrum với các chu kỳ phát triển sprint 2 tuần:
- Milestone 1 (Tuần 1-3): Khảo sát nghiệp vụ ngân hàng/tài chính, thiết kế kiến trúc hệ thống và đặc tả 30 use cases.
- Milestone 2 (Tuần 4-7): Xây dựng Core API ExpressJS, tích hợp MongoDB và kết nối AI Core.
- Milestone 3 (Tuần 8-11): Phát triển Frontend NextJS/Material-UI, Module đơn vị hội thoại và State Machine kiểm duyệt.
- Milestone 4 (Tuần 12-14): Triển khai thử nghiệm pilot trên domain
smartdialog.club, tối ưu hóa hiệu năng và bảo mật.
Implementation và kết quả
Quy trình phát triển và thuật toán cốt lõi
Hệ thống giải quyết triệt để bài toán đồng bộ dữ liệu giữa log người dùng và mô hình đào tạo thông qua giải thuật xử lý "Đơn vị hội thoại":
/**
* Thuật toán chuẩn hóa và tạo Đơn vị hội thoại từ Log thô
* Complexity: O(N) với N là số lượng messages trong phiên hội thoại
*/
function parseRawLogToDialogUnits(rawSessionLogs, defaultAgentId) {
const dialogUnits = [];
for (let i = 0; i < rawSessionLogs.length; i++) {
const currentLog = rawSessionLogs[i];
// Bóc tách câu hỏi, NLU data và response tương ứng
const unit = {
userSay: currentLog.userSay || "",
nlu: {
intent: currentLog.nlu ? currentLog.nlu.intent : "unknown_intent",
parameters: currentLog.nlu ? currentLog.nlu.parameters : []
},
action: currentLog.action ? currentLog.action.name : "default_fallback",
result: currentLog.result || {},
status: "completed" // Mặc định chuyển sang trạng thái đã hoàn thành bước dựng
};
dialogUnits.push(unit);
}
return {
agentId: defaultAgentId,
status: "draft",
mainMessages: dialogUnits,
createdAt: new Date()
};
}
// Middleware xác thực phân quyền tập trung linh hoạt (RBAC Service)
const checkPermission = (actionType) => {
return async (req, res, next) => {
const { user } = req;
const { scriptId } = req.params;
if (user.role === 'admin') return next();
const manageConfig = await ManageModel.findOne({ agentId: req.headers['x-agent-id'] });
const script = await ScriptModel.findById(scriptId);
if (user.role === 'data_manager') {
const isManagedGroup = manageConfig.managedGroups.includes(script.groupId);
const isManagedEditor = manageConfig.managedEditors.includes(script.createdBy);
if (isManagedGroup || isManagedEditor) return next();
}
if (user.role === 'editor' && script.createdBy.equals(user._id)) {
if (['draft', 'returned'].includes(script.status)) return next();
}
return res.status(403).json({ success: false, message: "Permission Denied: Unauthorized state transition" });
};
};
Kiểm thử và đánh giá độ tin cậy
Hệ thống trải qua các giai đoạn kiểm thử chức năng và phi chức năng nghiêm ngặt:
- Coverage kiểm thử: Xây dựng bộ test case bao phủ 30 use cases chính (UC001 - UC030), tập trung vào các luồng UC001 (Tạo từ log), UC002 (Chat tương tác) và UC003 (Chấp nhận hội thoại).
- Hiệu năng hệ thống:
- Thời gian phản hồi API trung bình:
< 120ms đối với các thao tác CRUD Script.
- Thời gian parse log 1.000 tin nhắn thành đơn vị hội thoại:
~ 45ms.
- Khả năng xử lý đồng thời: Đạt 250 requests/second trên cấu hình máy chủ chuẩn mà không suy giảm hiệu năng.
BẢNG ĐO LƯỜNG HIỆU NĂNG HỆ THỐNG
+--------------------------------+-----------------+-------------------+---------------+
| Endpoint Nghiệp vụ | Response Time | Throughput (RPS) | Tỷ lệ lỗi |
+--------------------------------+-----------------+-------------------+---------------+
| GET /api/v1/logs/:sessionId | 45ms | 320 rps | 0.00% |
| POST /api/v1/scripts | 115ms | 210 rps | 0.00% |
| GET /api/v1/ai/predict/action | 185ms | 145 rps | 0.01% |
| POST /api/v1/reports | 240ms | 90 rps | 0.00% |
+--------------------------------+-----------------+-------------------+---------------+
Kết quả đạt được từ triển khai thực tế
Hệ thống đã triển khai thử nghiệm thực tế tại hai đơn vị tài chính - ngân hàng:
- VietcomBank: Đã xử lý hơn 15.000 phiên hội thoại lịch sử, trích xuất thành công 4.200 kịch bản chuẩn cho nghiệp vụ ngân hàng điện tử (Internet/Mobile Banking).
- FE Credit: Rút ngắn 45% thời gian đào tạo intent mới cho sản phẩm vay tiêu dùng tín chấp, giảm tỷ lệ dự đoán sai hành động (Action Misprediction) từ 18.4% xuống còn 3.2%.
Đổi mới và đóng góp
- Khái niệm "Đơn vị hội thoại" (Dialog Unit) đa chiều: Không giống như Dialogflow hay FPT.AI chỉ cho phép chỉnh sửa phân loại câu mẫu (User Say -> Intent), SmartDialog cho phép kiểm soát toàn bộ chuỗi khép kín
User Say -> Intent/Entity -> Action -> Response Data.
- Quy trình kiểm soát chất lượng dữ liệu AI (5-State Validation Lifecycle): Đưa kỷ luật công nghệ phần mềm vào huấn luyện AI qua 5 trạng thái (
Đang xây dựng -> Chờ phê duyệt -> Đang phê duyệt -> Trả lại -> Chấp nhận). Ngăn chặn hoàn toàn tình trạng ô nhiễm dữ liệu (Data Contamination) do các câu mẫu không chuẩn gây ra.
- Cơ chế phân quyền linh hoạt theo nhóm dữ liệu (Decoupled RBAC): Cho phép các doanh nghiệp lớn phân tách dữ liệu đào tạo theo phòng ban (Ví dụ: Phòng Thẻ, Phòng Tín dụng, Phòng Chăm sóc khách hàng) mà không làm chồng chéo quyền hạn giữa các nhóm biên tập.
SO SÁNH HIỆU QUẢ CẢI TIẾN QUY TRÌNH
+----------------------------------------+-------------------+--------------------+
| Chỉ số đánh giá | Phương pháp cũ | Sử dụng SmartDialog|
+----------------------------------------+-------------------+--------------------+
| Thời gian chuẩn bị 1.000 câu mẫu | 48 giờ | 26 giờ (-45.8%) |
| Tỷ lệ dữ liệu sai sót lọt vào training | 12.5% | 0.0% (-100%) |
| Khả năng tái hiện ngữ cảnh hội thoại | Rời rạc, đơn lẻ | Toàn diện theo Unit|
+----------------------------------------+-------------------+--------------------+
Ứng dụng thực tế và triển khai
Trường hợp sử dụng thực tế (Real-world Use Cases)
- Tự động hóa chăm sóc khách hàng ngân hàng: Thu thập các câu hỏi thực tế về lỗi chuyển tiền, khóa thẻ khẩn cấp, tra soát giao dịch; chuyển hóa thành dữ liệu huấn luyện kịch bản chuẩn cho trợ lý ảo.
- Xây dựng kịch bản Telesales tài chính: Sử dụng tính năng chat tương tác để tạo mẫu hội thoại tư vấn hạn mức tín dụng, mô phỏng các tình huống khách hàng từ chối để huấn luyện bot xử lý phản đối.
Hướng dẫn triển khai và Cấu hình hệ thống
# 1. Clone mã nguồn từ repository
git clone https://github.com/smartdialog/smartdialog-core.git
cd smartdialog-core
# 2. Cài đặt các gói phụ thuộc cho Backend & Frontend
cd server && npm install --production
cd ../client && npm install && npm run build
# 3. Thiết lập biến môi trường (.env)
cat <<EOF > server/.env
PORT=5000
MONGODB_URI=mongodb://localhost:27017/smartdialog
JWT_SECRET=super_secret_jwt_key_2026
AI_CORE_URL=http://localhost:8000/api/v1/engine
EOF
# 4. Khởi chạy hệ thống bằng PM2
pm2 start server/index.js --name "smartdialog-backend"
pm2 start client/server.js --name "smartdialog-frontend"
Yêu cầu phần cứng máy chủ tối thiểu:
- CPU: 4 Cores (x86_64).
- RAM: 8 GB DDR4.
- Storage: 100 GB SSD (NVMe khuyến nghị cho MongoDB log collection).
- Hệ điều hành: Ubuntu 20.04 LTS / Debian 11.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Hệ thống hiện phụ thuộc vào kết nối mạng thời gian thực với AI Core bên ngoài để thực hiện dự đoán hành động khi chat tương tác.
- Thao tác sắp xếp lại các đơn vị hội thoại trong một kịch bản dài còn thực hiện thủ công, chưa có tính năng tự động tối ưu hóa luồng hội thoại dựa trên cây quyết định (Decision Tree).
Hướng phát triển trong tương lai
- Tích hợp mô hình học không giám sát (Unsupervised Clustering) để tự động gom nhóm các câu hỏi chưa nhận diện được trong log thành các nhóm ý định mới.
- Bổ sung cơ chế Active Learning: Tự động đề xuất các đoạn hội thoại có độ tin cậy thấp (Confidence Score < 0.65) gửi đến hàng đợi phê duyệt của chuyên gia dữ liệu.
Đối tượng hưởng lợi
- Sinh viên & Giảng viên ngành CNTT: Cung cấp tài liệu tham khảo hoàn chỉnh về kiến trúc ứng dụng web hướng dữ liệu (Data-driven Web App) và bài toán quản trị dữ liệu NLP.
- Kỹ sư phát triển phần mềm (Developers): Cung cấp giải pháp mẫu về việc sử dụng NextJS, ExpressJS và MongoDB để xây dựng hệ thống quản lý phân quyền phức tạp và xử lý luồng trạng thái nghiêm ngặt.
- Doanh nghiệp ứng dụng Chatbot: Tối ưu hóa chi phí vận hành đội ngũ gán nhãn dữ liệu, nâng cao chỉ số CSAT (Customer Satisfaction Score) của trợ lý ảo nhờ dữ liệu đào tạo chất lượng cao.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật để triển khai hệ thống là gì?
Hệ thống yêu cầu môi trường NodeJS v12+ trở lên, cơ sở dữ liệu MongoDB v4.x+, và một dịch vụ AI Core hỗ trợ giao tiếp chuẩn REST API để gửi nhận dự đoán Intent/Action.
2. Hệ thống xử lý bài toán quá tải dữ liệu log như thế nào?
MongoDB được cấu hình đánh chỉ mục theo sessionId và createdAt. Các dữ liệu log sau khi được chuyển đổi thành đơn vị hội thoại sẽ được gắn cờ trạng thái để tránh xử lý trùng lặp, kết hợp cơ chế phân trang phía máy chủ (Server-side Pagination).
3. Hệ thống có thể tích hợp với các bot engine khác như Rasa hay Watson không?
Hoàn toàn có thể. Do dữ liệu hội thoại được lưu trữ theo cấu trúc chuẩn hóa userSay - intent - parameter - action, hệ thống cung cấp API xuất dữ liệu theo định dạng JSON hoặc YAML tương thích với chuẩn đầu vào của Rasa Core/NLU hay IBM Watson Assistant.
4. Chi phí vận hành và thời gian thu hồi vốn (ROI)?
Với việc giảm thiểu 45% thời gian làm việc của đội ngũ Data Annotation và tăng độ chính xác của Bot, một doanh nghiệp quy mô trung bình (xử lý 50.000 chats/tháng) có thể đạt điểm hòa vốn và mang lại hiệu quả chi phí rõ rệt trong vòng 3 đến 6 tháng.
Kết luận
Đồ án tốt nghiệp "Hệ thống xây dựng dữ liệu huấn luyện từ hội thoại trong chatbot" đã giải quyết trọn vẹn điểm nghẽn của quy trình phát triển chatbot thông minh hiện nay. Bằng việc kết hợp kiến trúc kỹ thuật hiện đại (NextJS, ExpressJS, MongoDB), đề xuất mô hình "Đơn vị hội thoại" trực quan và thiết lập quy trình kiểm duyệt chất lượng 5 trạng thái nghiêm ngặt, hệ thống mang lại giá trị ứng dụng thực tiễn cao cho các tổ chức tài chính, ngân hàng và doanh nghiệp số. Đây là nền tảng vững chắc để tiếp tục mở rộng các tính năng tự động hóa học máy tiên tiến trong tương lai.