T3 — NLP và Large Language Models cho Trợ Lý Thông Minh - congsinhv/fluxion GitHub Wiki
NLP và Large Language Models cho Trợ Lý Thông Minh MDM
Issue: #19 — Nghiên cứu NLP và Large Language Models cho trợ lý thông minh Tuần: 3 | 07/04 – 13/04/2026
Numbering chính thức: Mục 2.8 theo Master TOC (Chương 2)
2.8.1 Tổng Quan Xử Lý Ngôn Ngữ Tự Nhiên (NLP)
2.8.1.1 Tokenization
Tokenization chuyển đổi văn bản thô thành các đơn vị rời rạc (tokens) cho mô hình xử lý. Ba mô hình chính [8]:
| Phương pháp | Cơ chế | Sử dụng bởi | Đánh đổi |
|---|---|---|---|
| Word-level | Tách theo khoảng trắng/dấu câu | NLP cổ điển | Vấn đề OOV; kém với hình thái học |
| BPE (Byte Pair Encoding) | Ghép cặp ký tự tần suất cao nhất | GPT-2/3/4, Llama | Cân bằng OOV + độ dài chuỗi |
| WordPiece | Ghép cặp tối đa hoá likelihood | BERT, DistilBERT | Nắm bắt ngữ nghĩa tốt hơn BPE |
| SentencePiece | Agnostic ngôn ngữ, byte-level input | T5, mô hình đa ngôn ngữ | Tốt nhất cho chữ viết non-Latin |
Phương pháp subword (BPE, WordPiece, SentencePiece) thống trị LLM hiện đại vì loại bỏ OOV tokens trong khi giữ độ dài chuỗi hợp lý [8].
2.8.1.2 Nhận Dạng Ý Định (Intent Recognition)
Xác định mục tiêu ngữ nghĩa đằng sau câu phát ngôn của người dùng. Ba thế hệ:
- Rule-based: Pattern regex/keyword. Nhanh, chi phí zero, nhưng dễ vỡ trước paraphrase.
- ML-based: Classifiers (SVM, BiLSTM+CRF, BERT fine-tuned). Cần labeled dataset; robust với paraphrase; taxonomy cố định.
- LLM-based (zero/few-shot): Prompt LLM phân loại intent từ mô tả ngôn ngữ tự nhiên. Không cần labeled data; xử lý intent mới; latency và cost cao hơn [8].
Cho chatbot MDM: LLM-based là lựa chọn tối ưu — không gian lệnh rộng, paraphrases đa dạng, labeled data khan hiếm.
2.8.1.3 Nhận Dạng Thực Thể (NER)
Xác định và phân loại các entity spans (device ID, username, policy name) trong văn bản. Kiến trúc: sequence labeling với BIO tagging. Cho MDM: entity types tuỳ chỉnh — DEVICE_ID, USERNAME, COMMAND — cần few-shot prompting với domain examples [8].
2.8.2 Large Language Models (LLMs)
2.8.2.1 Kiến Trúc Transformer
Vaswani et al. (2017) trong "Attention Is All You Need" thay thế RNN/CNN bằng kiến trúc hoàn toàn dựa trên attention [1]:
- Self-attention: Mỗi token attend đến tất cả tokens khác; nắm bắt phụ thuộc tầm xa trong O(1) layers
- Multi-head attention: h=8 heads × d_k=64 chiều = phép chiếu không gian con song song
- Positional encoding: Vectors hình sin được thêm vào vì attention không nhạy cảm thứ tự
- Song song hoá: Khác RNN, xử lý toàn bộ chuỗi song song khi huấn luyện
2.8.2.2 Tiến Hoá LLM
| Mô hình | Nghiên cứu | Năm | Đóng góp chính |
|---|---|---|---|
| GPT-3 | Brown et al. [2] | 2020 | 175B tham số; in-context learning xuất hiện ở quy mô lớn |
| GPT-4 / GPT-4o | OpenAI Tech Report | 2023/2024 | Đa phương thức; instruction-following; structured output |
| Claude | Anthropic, Constitutional AI | 2022+ | RLHF + CAI; tập trung an toàn |
| Llama 3 | Meta AI | 2024 | Open weights; 8B/70B/405B; cạnh tranh GPT-4 |
2.8.2.3 Khả Năng Chính
- In-context learning: Mô hình suy luận task từ examples trong prompt mà không cần cập nhật trọng số [2]
- Few-shot learning: 3–8 examples trong context đủ để chuyển giao hành vi task
- Instruction following: Mô hình RLHF (InstructGPT → GPT-4) tuân thủ chỉ dẫn ngôn ngữ tự nhiên
2.8.2.4 Hạn Chế
| Hạn chế | Mô tả | Giải pháp |
|---|---|---|
| Hallucination | Sinh nội dung hợp lý nhưng sai sự thật [9] | RAG, tool use, grounding |
| Context window | Giới hạn token cố định; nội dung cũ bị cắt | Sliding window, summarization |
| Latency | API round-trip 0,5–5s | Streaming, mô hình nhỏ |
| Chi phí | Tính theo token; tốn kém ở volume cao | Caching, mô hình nhỏ cho task đơn giản |
2.8.2.5 So Sánh Mô Hình
| Mô hình | Provider | Context | Input ($/1M) | Output ($/1M) | Open Weights |
|---|---|---|---|---|---|
| GPT-4o | OpenAI | 128K | $5,00 | $15,00 | Không |
| GPT-4o mini | OpenAI | 128K | $0,15 | $0,60 | Không |
| Claude 3.5 Sonnet | Anthropic | 200K | $3,00 | $15,00 | Không |
| Claude 3.5 Haiku | Anthropic | 200K | $0,80 | $4,00 | Không |
| Llama 3.1 70B | Meta | 128K | ~$0,90 | ~$0,90 | Có |
Bảng 2.8.1: So sánh LLM hiện tại (giá tham khảo, có thể thay đổi)
2.8.3 Prompt Engineering
2.8.3.1 System Prompts
Được inject trước user turns; định nghĩa vai trò, ràng buộc, format output:
You are the Fluxion MDM assistant. You help admins manage iOS devices via natural language.
Available device states: idle, registered, enrolled, active, locked, released.
Rules:
- For wipe or release commands: always ask for explicit confirmation first.
- If device_id is ambiguous, call query_devices first to clarify.
- Respond in the same language as the user (Vietnamese or English).
2.8.3.2 Few-Shot Learning
Cung cấp 3–8 cặp (input, output) trong context. Thực nghiệm cho thấy few-shot > zero-shot trên các task extraction có cấu trúc mà không cần fine-tuning.
2.8.3.3 Chain-of-Thought (CoT)
Wei et al. (2022) trong "Chain-of-Thought Prompting Elicits Reasoning" [3]: thêm bước suy luận trung gian (intermediate reasoning steps) vào exemplars kích hoạt suy luận từng bước trong output. Hiệu quả trên arithmetic, commonsense, symbolic reasoning. Xuất hiện ở mô hình > 100B tham số.
2.8.3.4 ReAct Pattern
Yao et al. (2023) "ReAct: Synergizing Reasoning and Acting" [4]: xen kẽ Thought → Action → Observation:
- Thought: Mô hình suy luận cần làm gì
- Action: Thực thi tool call
- Observation: Nhận kết quả từ tool
- Lặp lại cho đến khi hoàn thành
Vượt CoT-only 34% trên ALFWorld benchmark. Là tiền thân trực tiếp của các framework agent hiện đại (LangChain, AutoGen) [4].
2.8.4 Function Calling / Tool Use
2.8.4.1 Khái Niệm
Thay vì sinh văn bản tự do, LLM sinh đối tượng JSON có cấu trúc chỉ định function nào cần gọi và với tham số gì. Hệ thống host thực thi call, trả kết quả; LLM format response cuối cùng.
User query → LLM nhận tool schemas → LLM output tool_call JSON
→ System thực thi → Kết quả trả về → LLM sinh answer cuối
2.8.4.2 Định Dạng OpenAI
{
"tools": [{
"type": "function",
"function": {
"name": "lock_device",
"description": "Locks a managed device",
"strict": true,
"parameters": {
"type": "object",
"properties": { "device_id": {"type": "string"} },
"required": ["device_id"],
"additionalProperties": false
}
}
}]
}
strict: true (2024) đảm bảo output khớp schema chính xác — loại bỏ hallucinated parameters.
2.8.4.3 Định Dạng Anthropic Claude
Truyền qua tools array với name, description, input_schema (JSON Schema). Claude trả về tool_use content blocks; caller thực thi và trả tool_result blocks.
2.8.4.4 Nghiên Cứu Nền Tảng
- Toolformer — Schick et al. (2023) [5]: Self-supervised training về khi nào/cách gọi API. Chứng minh đầu tiên rằng LLM tự học tool use từ minimal demonstrations.
- Gorilla — Patil et al. (2023) [6]: Fine-tuned LLaMA trên 1.600+ API schemas; vượt GPT-4 về API call accuracy; giới thiệu Retriever-Aware Training (RAT) giảm hallucination trong function arguments.
2.8.5 Quản Lý Bộ Nhớ Hội Thoại (Conversation Memory)
2.8.5.1 Chiến Lược
| Chiến lược | Cơ chế | Ưu điểm | Nhược điểm |
|---|---|---|---|
| Full history | Truyền tất cả turns mỗi request | Không mất thông tin | Token cost tăng không giới hạn |
| Sliding window | Giữ N messages gần nhất | Chi phí dự đoán được | Mất context đầu |
| Summarization | Nén turns cũ qua LLM | Giữ bản chất ngữ nghĩa | Summary mất chi tiết |
| RAG | Truy xuất chunks liên quan từ vector store | Scale lớn; recall chính xác | Latency index; embedding cost |
2.8.5.2 RAG (Retrieval-Augmented Generation)
Lewis et al. (2020) [7]: Kết hợp bộ nhớ tham số (parametric memory — trọng số LLM) với bộ nhớ phi tham số (non-parametric memory — dense vector index). Retriever (DPR) truy xuất top-k passages; generator sinh conditioned trên query + passages.
2.8.5.3 Chiến Lược Cho Fluxion MDM Chatbot
Chatbot MDM cần mang theo trong context:
- Device inventory — device ID, OS version, trạng thái (ngăn hallucinate device references)
- User permissions — lệnh nào user được phép thực thi
- Command history — N lệnh gần nhất (ngăn duplicate lock/wipe)
- Conversation turns — 8–12 messages gần nhất
Chiến lược đề xuất: Sliding window (turns) — giữ 10 messages gần nhất. Ở quy mô thesis (< 500 devices), device inventory đủ nhỏ để nhúng vào system prompt hoặc truy vấn trực tiếp qua tool call.
2.8.6 Ứng Dụng trong Fluxion — Thiết Kế Chatbot MDM
2.8.6.1 Intent Mapping
| Intent (Tiếng Việt) | Entities | GraphQL Operation | Mức nguy hiểm |
|---|---|---|---|
| "khóa thiết bị X" | device_id | mutation lockDevice(id) |
— |
| "mở khóa thiết bị X" | device_id | mutation unlockDevice(id) |
— |
| "khởi động lại thiết bị X" | device_id | mutation restartDevice(id) |
— |
| "xóa dữ liệu thiết bị X" | device_id | mutation wipeDevice(id) |
CAO |
| "kết thúc quản lý thiết bị X" / "hoàn tất hợp đồng thiết bị X" | device_id | mutation releaseDevice(id) |
CAO (terminal — không revert được) |
| "liệt kê thiết bị đang [state]" | state | query listDevices(state) |
— |
| "thông tin thiết bị X" | device_id | query getDevice(id) |
— |
| "thống kê theo trạng thái" | — | query deviceStatsByState() |
— |
| "lịch sử lệnh thiết bị X" | device_id | query commandHistory(deviceId) |
— |
| "thiết bị nào anomaly cao?" | threshold | query anomalyAlerts(threshold) |
— |
| "gửi profile cho thiết bị X" | device_id, profile_id | mutation installProfile() |
— |
Bảng 2.8.2: Intent mapping cho Fluxion MDM chatbot
2.8.6.2 Function Definitions (Tool Schema)
6 tools được định nghĩa theo OpenAI JSON Schema format:
| Tool | Mô tả | Tham số chính |
|---|---|---|
query_devices |
Liệt kê/lọc devices theo FSM state | state (enum 6 giá trị), limit |
get_device |
Thông tin chi tiết 1 device | device_id (required) |
send_device_command |
Gửi lệnh MDM | device_id, command (enum), confirmed (boolean) |
get_command_history |
Lịch sử lệnh device | device_id, limit |
get_device_stats |
Thống kê device theo state | — |
query_anomaly_alerts |
Devices có anomaly score cao | min_score, limit |
Cơ chế an toàn: send_device_command có field confirmed: boolean. Khi confirmed=false, Lambda short-circuit trả về confirmation prompt; chỉ thực thi khi user xác nhận rõ ràng và LLM gọi lại với confirmed=true.
2.8.6.3 Lựa Chọn LLM Provider
| Tiêu chí | GPT-4o mini | Claude 3.5 Haiku | Llama 3.3 70B (Bedrock) |
|---|---|---|---|
| Input price | $0,15/M tokens | $0,80/M tokens | ~$0,72/M tokens |
| Output price | $0,60/M tokens | $4,00/M tokens | ~$0,72/M tokens |
| Function calling | Xuất sắc; strict:true |
Xuất sắc; input_schema |
Tốt; occasional schema hallucination |
| Tiếng Việt | Mạnh | Mạnh | Trung bình |
| Latency | ~600ms p50 | ~500ms p50 | ~800ms–1,2s p50 |
| Chi phí thesis (~10K msgs) | ~$0,20–0,50 | ~$1,20–2,00 | ~$0,80–1,20 |
Bảng 2.8.3: So sánh LLM provider cho Fluxion chatbot
Đề xuất: GPT-4o mini — chi phí gần zero ở quy mô thesis, Vietnamese entity extraction tốt nhất, strict JSON schema enforcement. Có thể thay thế bằng Claude Haiku hoặc Llama 3 via Bedrock tuỳ ràng buộc.
2.8.6.4 Luồng Xác Nhận Lệnh Nguy Hiểm
User: "xóa dữ liệu thiết bị abc-123"
→ LLM: phát hiện wipe intent
→ LLM gọi send_device_command(device_id="abc-123", command="wipe", confirmed=false)
→ Lambda: confirmed=false → trả về {requiresConfirmation: true}
→ LLM → User: "Bạn có chắc muốn XÓA DỮ LIỆU thiết bị abc-123? Nhập 'xác nhận'."
→ User: "xác nhận"
→ LLM gọi send_device_command(confirmed=true) → thực thi
Phân quyền: Lambda kiểm tra JWT role claim — admin cho wipe/release, operator cho lock/unlock. Mọi attempt được log vào PostgreSQL.
2.8.6.5 Kiến Trúc trong Fluxion
[API Gateway POST /api/v1/chat]
→ chat-handler Lambda
1. Validate JWT → extract user_id, role
2. Load 10 messages gần nhất từ PostgreSQL (chat_messages)
3. Build messages: [system_prompt] + history + user message
4. Call LLM API với tools array
5. Nếu tool_call: validate confirmed → execute → gọi LLM lần 2
6. Persist messages vào chat_messages
7. Return response
DB Schema:
CREATE TABLE chat_sessions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE TABLE chat_messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
session_id UUID REFERENCES chat_sessions(id),
role TEXT CHECK (role IN ('user','assistant','tool')),
content TEXT NOT NULL,
tool_call_id TEXT,
created_at TIMESTAMPTZ DEFAULT now()
);
Sync vs Streaming: Sử dụng synchronous cho thesis — MDM responses ngắn (< 100 tokens), streaming thêm ~3x complexity mà không cải thiện UX đáng kể ở admin tooling.
Kết Luận
Nghiên cứu về Xử lý Ngôn Ngữ Tự Nhiên (Natural Language Processing — NLP) và Mô hình Ngôn Ngữ Lớn (Large Language Models — LLM) trong chương này cung cấp nền tảng lý thuyết từ kiến trúc Transformer (Vaswani et al., 2017) và học tập trong ngữ cảnh (In-Context Learning) của GPT-3 (Brown et al., 2020) đến các kỹ thuật nâng cao như Retrieval-Augmented Generation (RAG) và Function Calling. Sự phát triển từ NLP truyền thống (rule-based, ML-based) đến LLM-based approach đánh dấu bước chuyển mình quan trọng: thay vì xây dựng và duy trì taxonomy intent cố định, hệ thống có thể hiểu ngôn ngữ tự nhiên theo ngữ cảnh và thực thi hành động phức tạp thông qua cơ chế Tool Use / Function Calling.
Cần lưu ý rằng module NLP Chatbot trong Fluxion được định vị là ứng dụng LLM tăng cường công cụ (Tool-Augmented LLM Application), tập trung vào thiết kế prompt engineering, định nghĩa tool schema, và cơ chế an toàn (safety gate) — chứ không phải nghiên cứu NLP cơ bản. Đóng góp chính của module này nằm ở việc thiết kế system prompt chuyên biệt cho domain MDM, xây dựng 5 tool definitions cho phép LLM tương tác với hệ thống, và triển khai cơ chế xác nhận 2 bước (two-step confirmation) cho các lệnh nguy hiểm.
Thách thức kỹ thuật chính được xác định là vấn đề ảo giác (hallucination) của LLM — nguy cơ nghiêm trọng trong bối cảnh quản lý thiết bị nơi một lệnh sai có thể khóa hàng trăm thiết bị. Giải pháp được chọn kết hợp ba lớp bảo vệ: (1) system prompt với role-binding rõ ràng ngăn LLM thực thi ngoài domain MDM, (2) cơ chế xác nhận hai bước yêu cầu admin phê duyệt trước khi thực thi lệnh nguy hiểm, và (3) kiểm tra quyền hạn (permission check) tại tầng GraphQL resolver — đảm bảo chatbot không thể vượt qua cơ chế phân quyền hiện có của hệ thống.
Tài Liệu Tham Khảo
[1] Vaswani, A., et al. (2017). Attention Is All You Need. NeurIPS. arXiv:1706.03762.
[2] Brown, T., et al. (2020). Language Models are Few-Shot Learners. NeurIPS. arXiv:2005.14165.
[3] Wei, J., et al. (2022). Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. NeurIPS. arXiv:2201.11903.
[4] Yao, S., et al. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR. arXiv:2210.03629.
[5] Schick, T., et al. (2023). Toolformer: Language Models Can Teach Themselves to Use Tools. NeurIPS. arXiv:2302.04761.
[6] Patil, S. G., et al. (2023). Gorilla: Large Language Model Connected with Massive APIs. NeurIPS 2024. arXiv:2305.15334.
[7] Lewis, P., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS. arXiv:2005.11401.
[8] Jurafsky, D. & Martin, J. H. (2024). Speech and Language Processing (3rd ed., draft). Stanford.
[9] Xu, Z., et al. (2024). Hallucination is Inevitable: An Innate Limitation of Large Language Models. arXiv:2401.11817.
[10] OpenAI. Function Calling Documentation. https://developers.openai.com/api/docs/guides/function-calling
[11] Anthropic. Tool Use Documentation. https://docs.anthropic.com/en/docs/agents-and-tools/tool-use
[12] AWS. Bedrock Tool Use. https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html