- LLM (Large Language Model) là gì và hoạt động như thế nào?
LLM là mô hình ngôn ngữ dựa trên kiến trúc Transformer, được pre-train trên lượng lớn text corpus (hàng trăm tỷ đến hàng nghìn tỷ token). Cốt lõi của LLM là dự đoán token tiếp theo (next-token prediction) dựa trên chuỗi token đầu vào —…
- Kiến trúc Transformer gồm những thành phần nào?
Transformer (Vaswani 2017) gồm các khối chính: Token embedding (biến token ID thành vector) + Positional encoding (thêm thông tin vị trí); Multi-Head Self-Attention (cho phép mỗi token "nhìn" các token khác qua Query/Key/Value); Feed-Forward Network (FFN — 2 lớp linear + activation, thường mở…
- Tokenization là gì? BPE (Byte Pair Encoding) hoạt động ra sao?
Tokenization là bước chia text thành đơn vị nhỏ (token) mà model có thể hiểu — có thể là ký tự, subword, hoặc word. LLM hiện đại thường dùng subword tokenization vì cân bằng được kích thước vocabulary và khả năng xử lý từ chưa…
- Self-attention và Query/Key/Value hoạt động như thế nào?
Self-attention cho phép mỗi token "hỏi" các token khác trong câu mức độ liên quan rồi lấy thông tin tương ứng — giải quyết được hạn chế của RNN (phụ thuộc xa). Với input X, model tính 3 ma trận bằng 3 linear projection: Q…
- Context window là gì và tại sao nó quan trọng?
Context window là số token tối đa model có thể "nhìn thấy" cùng lúc — bao gồm cả prompt (system + user + history) và output đang sinh. Model hiện hành phổ biến ở mức vài trăm nghìn token, một số (như Gemini) lên tới…
- Temperature, Top-p và Top-k trong LLM là gì?
Đây là ba tham số sampling kiểm soát cách chọn token tiếp theo từ phân phối xác suất do model sinh ra. Temperature (T) chia logits trước softmax: softmax(logits / T). T=0 → greedy (luôn chọn token xác suất cao nhất, deterministic). T<1 → làm…
- KV Cache là gì và tại sao nó tăng tốc inference?
- Zero-shot, one-shot, few-shot prompting khác nhau thế nào?
Zero-shot: chỉ mô tả task bằng ngôn ngữ tự nhiên, không cho ví dụ. Ví dụ: "Phân loại sentiment của câu sau: 'Sản phẩm rất tệ'". Dùng khi task phổ biến, model lớn đủ khả năng hiểu. One-shot: cho 1 ví dụ input→output trước task…
- Chain-of-Thought (CoT) prompting là gì và khi nào dùng?
Chain-of-Thought là kỹ thuật yêu cầu model "suy nghĩ từng bước" trước khi đưa ra đáp án cuối, thay vì trả lời trực tiếp. Tăng độ chính xác đáng kể trên các task reasoning (toán, logic, nhiều bước). Hai dạng: Zero-shot CoT — thêm câu…
- ReAct (Reasoning + Acting) prompting hoạt động như thế nào?
ReAct (Yao et al. 2022) kết hợp Reasoning (suy luận bằng CoT) với Acting (gọi tool/API lấy thông tin bên ngoài). Model lặp vòng: Thought → Action → Observation → Thought → ... cho đến khi có đủ dữ kiện để trả lời. Ví dụ…
- Prompt Injection là gì? Cách phòng chống?
Prompt Injection là tấn công bảo mật đặc thù của LLM, trong đó attacker chèn instruction độc vào input (user text, tài liệu, kết quả tool) để ghi đè system prompt, làm model làm việc ngoài ý muốn. Phân loại: Direct injection — user gõ…
- Làm sao để LLM trả về structured output (JSON) ổn định trong production?
Các cách theo độ tin cậy tăng dần: 1. Prompt-only — yêu cầu JSON + cho schema mẫu. Kém ổn định, model có thể wrap trong markdown, thêm comment, thiếu field. 2. JSON mode — OpenAI responseformat: {"type": "jsonobject"}, Anthropic prompt patterns. Đảm bảo output…
- Prompt chaining là gì? Khác gì agent và khi nào nên dùng?
Prompt chaining là chia một việc phức tạp thành chuỗi prompt nhỏ, đầu ra của bước trước làm đầu vào bước sau. Luồng do lập trình viên định trước, không phải do model quyết. Ví dụ viết một bài blog: sinh dàn ý → viết…
- Jailbreaking LLM là gì? Các kỹ thuật phổ biến và cách phòng chống?
- RAG (Retrieval-Augmented Generation) là gì? Tại sao quan trọng?
RAG là kỹ thuật bổ sung kiến thức bên ngoài cho LLM tại runtime bằng cách retrieve (tìm kiếm) đoạn tài liệu liên quan từ knowledge base, rồi chèn vào prompt để LLM generate câu trả lời dựa trên ngữ cảnh đó. Tại sao cần:…
- Các thành phần của một pipeline RAG đầy đủ?
RAG cần 2 giai đoạn: Indexing (offline build knowledge base) và Querying (online retrieve + generate). A. Indexing (offline): 1. Data loading — đọc tài liệu (PDF, HTML, Markdown, DB, API). 2. Parsing/cleaning — extract text, xử lý table/image, loại bỏ boilerplate. 3. Chunking —…
- Các chiến lược chunking trong RAG? Chọn chunk size thế nào?
1. Fixed-size chunking — cắt theo số ký tự/token cố định (ví dụ 500 token, overlap 50). Đơn giản, nhanh; nhược: cắt giữa câu/ý làm mất ngữ nghĩa. 2. Recursive character chunking (LangChain RecursiveCharacterTextSplitter) — chia theo danh sách separator ưu tiên ["\n\n", "\n", ".…
- Hybrid search là gì? Tại sao tốt hơn pure vector search?
Vector search (dense) giỏi ngữ nghĩa (semantic) — tìm được câu diễn đạt khác nhưng cùng ý ("car" ↔ "automobile"). Yếu với: từ hiếm (mã sản phẩm SKU-A2391, tên riêng), acronym, exact match, số liệu. Keyword search (sparse — BM25, TF-IDF) giỏi exact match và…
- Re-ranking trong RAG là gì? Khi nào nên dùng?
- RAG hallucinates dù context đúng. Debug và khắc phục thế nào?
- Agentic RAG và Graph RAG khác RAG thông thường thế nào?
- Query transformation trong RAG: HyDE, query decomposition, step-back prompting?
- Cách đánh giá RAG end-to-end? RAGAS metrics hoạt động ra sao?
- AI Agent là gì? Khác LLM call thông thường thế nào?
LLM call thuần — input vào, output ra, 1 lượt. Không có bộ nhớ ngoài context, không tương tác bên ngoài. AI Agent = LLM đóng vai trò "brain" kết hợp với tools (truy cập thế giới bên ngoài), memory (state qua nhiều turn), và…
- Function/Tool calling hoạt động ra sao? Cách design tool tốt?
Tool calling (function calling): app khai báo danh sách tool với JSON schema (tên, mô tả, parameters). LLM đọc câu hỏi, nếu cần dùng tool sẽ trả về structured output {"tool": "search", "args": {"query": "..."}}. App thực thi tool, trả kết quả vào context, LLM…
- MCP (Model Context Protocol) là gì?
Model Context Protocol (Anthropic công bố 11/2024) là giao thức mở chuẩn hoá cách LLM/agent kết nối với tools, data sources, và prompts bên ngoài. Giống như "USB-C cho AI": thay vì mỗi app AI tự viết integration riêng cho Google Drive, GitHub, Postgres..., các…
- Agent memory: short-term vs long-term khác nhau thế nào?
Agent cần nhiều loại memory với vai trò khác nhau: 1. Short-term / Working memory — conversation history trong session hiện tại, lưu trực tiếp trong context window. Giới hạn bởi context size; khi quá dài phải xử lý: - Sliding window: giữ N turn…
- Agent bị kẹt vòng lặp vô hạn hoặc tốn quá nhiều token. Xử lý thế nào?
- Plan-and-Execute vs ReAct agent pattern. Khi nào dùng cái nào?
- Multi-agent system là gì? Pattern orchestration phổ biến?
- Human-in-the-loop (HITL) trong AI agent: khi nào cần và cách thiết kế?
HITL là để agent dừng lại xin ý kiến người trước khi đi tiếp, thay vì chạy tự chủ hoàn toàn. Khi bắt buộc phải có — quy về ba nhóm: - Hành động không hoàn tác được: xoá dữ liệu, git push --force, merge…
- Fine-tuning là gì? Khi nào nên fine-tune thay vì RAG/prompt?
Fine-tuning là quá trình tiếp tục train một model pre-trained trên dataset chuyên biệt của bạn để model "nhớ" phong cách, format, hoặc kiến thức domain. Khác pre-training (train từ đầu trên raw text) và prompt engineering (không đụng vào weights). Các loại: Full fine-tuning…
- LoRA (Low-Rank Adaptation) hoạt động thế nào? Tại sao hiệu quả?
Vấn đề của full fine-tuning: LLaMA-70B có 70 tỷ tham số → update hết cần hàng trăm GB VRAM, khó train trên GPU phổ thông. Lưu mỗi task 1 bản full weights cũng rất tốn. Ý tưởng LoRA (Hu et al. 2021): giữ nguyên (freeze)…
- QLoRA khác LoRA thế nào? Cho phép fine-tune 65B model trên 1 GPU 48GB ra sao?
- RLHF là gì? Pipeline alignment cho LLM hoạt động thế nào?
RLHF là quy trình biến một base model (chỉ biết đoán token tiếp theo) thành trợ lý biết nghe chỉ dẫn và biết từ chối. Base model đọc xong cả internet vẫn không biết nên trả lời thế nào — RLHF dạy nó điều đó.…
- Catastrophic forgetting trong fine-tuning là gì? Cách phòng tránh?
- Chuẩn bị dataset cho fine-tune LLM: format, kích thước, chất lượng?
Chất lượng dữ liệu quyết định kết quả fine-tune nhiều hơn kỹ thuật fine-tune. Model học đúng những gì được cho xem, kể cả cái sai. Cần bao nhiêu: - LoRA/QLoRA cho tác vụ hẹp — 500 tới vài nghìn ví dụ chất lượng cao…
- Embeddings là gì? Cách model biến text thành vector?
Embedding là biểu diễn vector số của dữ liệu (text, image, audio) sao cho khoảng cách trong không gian vector phản ánh độ tương đồng ngữ nghĩa. Ví dụ vector của "dog" và "puppy" rất gần nhau; "dog" và "bicycle" xa nhau. Cách tạo text…
- Vector database khác DB truyền thống thế nào? Cách nó làm similarity search nhanh?
DB truyền thống tra cứu bằng khớp chính xác hoặc khoảng giá trị với B-tree hay hash — cực nhanh cho WHERE id = ?. Nhưng câu hỏi "vector nào gần vector này nhất trong 10 triệu vector" thì index đó vô dụng, và quét…
- Metadata filtering trong vector DB: pre-filter vs post-filter vs hybrid?
- Embedding drift khi đổi embedding model. Cách xử lý migration?
- LLMOps khác MLOps truyền thống thế nào?
MLOps quản lý lifecycle ML classic (train → deploy → monitor) với mô hình in-house, feature pipeline, model registry. LLMOps kế thừa nhưng phải giải quyết 5 đặc thù của LLM: 1. Model ownership: LLM thường là API bên thứ 3 (OpenAI, Anthropic) → quan…
- Quantization trong LLM là gì? INT8, INT4, FP16 khác nhau ra sao?
Quantization là giảm độ chính xác biểu diễn của trọng số (và có thể cả activation) để tiết kiệm bộ nhớ và chạy nhanh hơn, đổi lại mất một ít chất lượng. Các mức thường gặp: - FP32 — độ chính xác lúc train, gần…
- Chi phí LLM quá cao. Các chiến lược giảm chi phí production mà không giảm chất lượng?
- Guardrails cho LLM là gì? Cách implement input/output guardrails?
- Streaming response trong LLM: cách triển khai và lợi ích?
LLM sinh token lần lượt, nên stream từng mảnh ra client ngay khi có thay vì đợi xong cả câu trả lời. Được gì: người dùng thấy chữ chạy sau chưa tới một giây, nên tổng thời gian 10 giây vẫn thấy nhanh; và họ…
- Prompt versioning, A/B test, rollback trong production LLM?
Prompt là artifact chính của LLM app: sửa một dòng có thể làm sập chất lượng mà không compiler nào báo. Nên quản như code. Đánh version: - Đưa prompt ra ngoài code. Để trong repo thì mỗi lần chỉnh chữ phải build và deploy…
- LLM-as-a-judge là gì? Ưu nhược điểm?
LLM-as-a-judge là dùng một LLM mạnh để chấm output của LLM khác theo các tiêu chí như đúng/sai, hữu ích, bám đề, an toàn. Nó thay được phần lớn công chấm tay: rẻ hơn khoảng ba bậc và chạy được trên hàng chục nghìn mẫu.…
- Cách phát hiện và đo hallucination trong LLM output?
Hallucination là model sinh ra thông tin nghe hợp lý nhưng sai hoặc không có trong nguồn. Hai loại cần tách bạch vì cách xử lý khác nhau: - Nội tại — mâu thuẫn với chính ngữ cảnh đã cung cấp. Đây là loại nghiêm…
- Red teaming LLM là gì? Quy trình và testing framework?
- Multi-modal AI là gì? CLIP và vision-language model hoạt động ra sao?
Multi-modal AI là model xử lý nhiều loại dữ liệu cùng lúc (chữ, ảnh, âm thanh, video). Chia hai hướng: hiểu đa phương thức (các VLM như GPT-4o, Claude, Gemini) và sinh đa phương thức (DALL·E, Stable Diffusion, Sora). CLIP là nền của gần như…
- Xử lý PII trong input/output LLM như thế nào (GDPR, data privacy)?
PII gồm tên, email, số điện thoại, CCCD, số thẻ, địa chỉ, hồ sơ y tế. Với LLM có bốn đường rò: gửi thẳng lên provider bên ngoài, lọt vào log, lọt vào dữ liệu fine-tune rồi bị model ghi nhớ, và chính model sinh…
- Design một chatbot customer support dùng LLM. Architecture ra sao?
- Design AI gateway (LLM proxy) quản lý multi-provider trong org?
- Chọn GPU cho LLM inference như thế nào? Memory, bandwidth, compute.
Chọn sai GPU thì chi phí phục vụ chênh nhau vài lần. Ba yếu tố, và thứ tự quan trọng không như nhiều người nghĩ. 1. VRAM — quyết định có chạy được hay không. Phải chứa đủ: - Trọng số: số tham số ×…
- Continuous batching vs static batching. Tại sao tăng throughput LLM 10-20x?
- Speculative decoding là gì? Tại sao giảm latency inference 2-3x?
- Tensor parallelism vs Pipeline parallelism vs Data parallelism: khi nào dùng?
- Monitor LLM inference trong production: TTFT, ITL, GPU util, metrics quan trọng?
LLM serving có bộ chỉ số riêng; đo như web API thường sẽ không thấy nút thắt nằm ở đâu. Độ trễ — nhìn theo hai pha, đừng nhìn con số tổng: - TTFT (Time To First Token) — từ lúc nhận request đến token…
- Self-hosted LLM vs API-based inference: khi nào, chi phí và thách thức?
- Implement basic RAG pipeline (embedding + vector search + generation).
Minimal working RAG trong Python ~80 dòng (không framework), để show các thành phần rõ ràng: Nâng cấp khi lên production: 1. Chunking — dùng RecursiveCharacterTextSplitter (LangChain) hoặc semantic chunking thay vì split raw. 2. Vector DB — thay SimpleVectorStore bằng Qdrant/Pinecone/pgvector; persist, scale, filter…
- Implement retry với exponential backoff cho LLM API call (handle rate limit, timeout).
Lời gọi LLM hỏng vì nhiều lý do khác nhau, và mỗi loại lỗi cần cách xử lý khác nhau — đây mới là phần chính, không phải đoạn code retry. Lỗi Xử lý ------ 429 quá hạn mức chờ đúng theo header Retry-After provider…
- Implement semantic caching cho LLM query (cache response cho query tương đồng).
Cache thông thường khớp key chính xác, nên "thủ đô VN?" và "Việt Nam có thủ đô gì?" là hai key khác nhau dù cùng một ý. Semantic cache embed câu hỏi thành vector, tìm câu đã hỏi gần giống, đủ giống thì trả luôn…
- Implement prompt injection detection cho input user (multi-layer).
Không có 1 method nào đủ — cần defense in depth. Code pattern cho input guardrail: Patterns production hay dùng: 1. Delimiter wrap trước khi inject vào system prompt: 2. Structured input — thay vì cho user gõ free text, dùng form/dropdown reduce attack surface.…
- AI Engineer vs ML Engineer: khác biệt, skill set, khi nào cần từng vai trò?
ML Engineer xây model từ dữ liệu: feature engineering, chọn kiến trúc, train, rồi lo cả pipeline MLOps quanh nó — thu thập dữ liệu, feature store, model registry, retrain khi drift. Sản phẩm bàn giao là bộ trọng số + pipeline train. AI Engineer…
- Sếp hỏi "AI feature này ROI thế nào?" — trả lời và đo như nào?
Trả lời kém câu này thì feature bị cắt. Điều lãnh đạo muốn nghe là con số có nguồn gốc, không phải niềm tin vào AI. Khung: ROI = (Lợi ích − Chi phí) / Chi phí. Chi phí dễ đo, nhưng đừng chỉ tính…
- Giải thích giới hạn LLM cho non-technical stakeholder (sếp bảo "sao AI không 100% accurate")?
Câu "sao không 100%" là câu hỏi về kỳ vọng, không phải câu hỏi kỹ thuật. Đáp bằng thuật ngữ (hallucination, temperature) là mất người nghe ngay. Khung trả lời: - Đổi câu hỏi từ đúng/sai sang ngưỡng chấp nhận. Không phải "AI có đúng…
- Self-consistency và Tree-of-Thought: khi nào dùng để cải thiện reasoning?
- Multi-modal RAG: xử lý PDF có bảng, hình ảnh, chart trong knowledge base?
- DPO (Direct Preference Optimization) hoạt động thế nào? Tại sao thay thế RLHF?
- Bias trong AI: các dạng bias, cách detect và mitigate?
- Speech-to-Text (Whisper) và Text-to-Speech: kiến trúc và use case?
STT (nhận dạng tiếng nói) — chuẩn mở hiện nay là Whisper: - Kiến trúc: Transformer encoder-decoder. Audio → phổ log-mel → encoder → decoder sinh token chữ. - Train đa nhiệm trên ~680k giờ audio kèm văn bản nhiều thứ tiếng, nên cùng một…
- Document understanding: extract structured data từ PDF có layout phức tạp?
- Benchmark suites nổi tiếng: MMLU, HumanEval, GSM8K — đánh giá gì và hạn chế?
- Implement AI agent với tool use (calculator + web search) từ đầu?
Vòng lặp agent về bản chất rất ngắn: gọi model kèm khai báo tool → nếu model xin gọi tool thì chạy tool, nhét kết quả vào hội thoại, gọi lại → lặp cho tới khi model trả lời thẳng. Ví dụ hỏi "GDP Việt…
- Quy trình debug một RAG system đang perform kém (answer sai, retrieval miss)?
Bắt đầu bằng phân bố nguyên nhân: khoảng 70% lỗi RAG nằm ở chunking và retrieval, 20% ở prompt và cách ghép ngữ cảnh, 10% ở model. Đừng nhảy vào đổi model trước — đó là chỗ ít khả năng gây lỗi nhất. Nguyên tắc:…
- Design AI code review system scale cho tổ chức 1000+ engineer?
- Một prompt tốt gồm những thành phần nào? Nguyên tắc viết prompt hiệu quả?
Prompt tốt tách bạch các thành phần rõ ràng để model không phải đoán ý: 1. Vai trò / bối cảnh (role) — "Bạn là chuyên viên phân tích hợp đồng...". 2. Nhiệm vụ cụ thể (task) — nói rõ việc cần làm, tránh mơ…
- Các vai trò message system / user / assistant khác nhau thế nào? Chat template là gì?
API chat của LLM nhận một danh sách message, mỗi message có role và content: - system — chỉ dẫn nền, đặt hành vi/persona/ràng buộc cho cả cuộc hội thoại. Thường đặt một lần ở đầu, ưu tiên cao. - user — đầu vào của…
- Base model và Instruct/Chat model khác nhau thế nào?
Base model (còn gọi pretrained / foundation model) chỉ được train mục tiêu dự đoán token tiếp theo trên corpus lớn. Nó "biết" ngôn ngữ và kiến thức nhưng chỉ hoàn thành văn bản — đưa vào một câu hỏi, nó có thể tiếp tục…
- Khi nào few-shot prompting là đủ, khi nào nên fine-tune? Chọn example few-shot thế nào?
Nền tảng là in-context learning: model suy ra khuôn mẫu từ ví dụ ngay trong prompt qua attention, trọng số không đổi — "sự học" chỉ tồn tại trong một lần gọi (hiện tượng GPT-3 làm nổi bật). Câu hỏi thực dụng là chọn giữa…
- Chi phí LLM API tính theo token ra sao? Tại sao chi phí hội thoại tăng dần theo lượt?
API LLM tính tiền theo token, tách riêng input (prompt) token và output (completion) token — giá output thường cao hơn input vài lần (vì output phải sinh tuần tự, tốn compute hơn). Một token ≈ 4 ký tự tiếng Anh; tiếng Việt và code…
- Chọn embedding model cho RAG dựa trên tiêu chí nào?
Embedding model biến text thành vector; chọn sai ảnh hưởng trực tiếp chất lượng retrieval. Các tiêu chí: 1. Chất lượng retrieval trên tác vụ của bạn — tham khảo MTEB leaderboard (đặc biệt nhóm Retrieval), nhưng luôn eval lại trên dữ liệu thật của…
- Perplexity là gì? Đo cái gì và có hạn chế nào?
Perplexity (PPL) đo mức độ "bất ngờ" của một mô hình ngôn ngữ khi dự đoán một chuỗi text — chính là luỹ thừa của cross-entropy trung bình (exp(mean negative log-likelihood)). Hiểu nôm na: PPL = số lựa chọn khả dĩ trung bình mà model…
- RAG và long-context window: khi nào chọn cái nào?
Khi context window đã lên tới hàng trăm nghìn — hàng triệu token, câu hỏi "cứ nhét hết tài liệu vào prompt thay vì RAG" trở nên thực tế. Không có bên nào thắng tuyệt đối. Chọn RAG khi: - Kho tri thức lớn hơn…
- Knowledge distillation là gì? Vì sao tạo được model nhỏ mà vẫn mạnh?
Knowledge distillation (Hinton 2015) huấn luyện một model student nhỏ để bắt chước một model teacher lớn (hoặc ensemble), thay vì chỉ học từ nhãn cứng của dữ liệu gốc. Điểm cốt lõi: thay vì học hard label (one-hot: đáp án đúng = 1, còn…
- LangChain, LangGraph, LlamaIndex khác nhau thế nào? Khi nào chọn cái nào?
Ba framework phổ biến, tối ưu cho mục tiêu khác nhau — chọn theo bài toán, không theo độ nổi tiếng. LangChain — thư viện "keo dán" nhiều thành phần (model, prompt, tool, memory, retriever) qua các abstraction chung. Hợp để dựng nhanh chuỗi LLM…
- Đánh giá một ứng dụng LLM thế nào? Offline vs online evaluation, golden dataset?
Không thể cải thiện thứ không đo được. Một hệ eval LLM hoàn chỉnh gồm hai vòng. Offline evaluation (trước khi release): - Golden dataset — tập ví dụ đại diện gồm input và (khi có) đáp án/ngữ cảnh mong muốn. Xây từ log thật,…
- Reasoning model (o-series, extended thinking) là gì? Test-time compute nghĩa là gì?
Reasoning model (OpenAI o-series, Claude với extended thinking, DeepSeek-R1...) là LLM được huấn luyện để suy nghĩ trước khi trả lời: model sinh một chuỗi reasoning token nội bộ (chain-of-thought) để lập kế hoạch, thử phương án, tự kiểm tra và sửa lỗi, rồi mới…
- Synthetic data (dữ liệu tổng hợp) để fine-tune/eval LLM: cách tạo và rủi ro?
Synthetic data là dữ liệu do LLM (thường model mạnh — "teacher") sinh ra để huấn luyện hoặc đánh giá, thay vì hoàn toàn do người gán nhãn. Dùng khi dữ liệu thật khan hiếm, đắt, hoặc nhạy cảm về quyền riêng tư. Cách tạo…
- Data flywheel cho ứng dụng LLM: thu thập feedback người dùng để cải thiện dần thế nào?
Data flywheel là vòng lặp biến tương tác thực của người dùng thành tín hiệu để liên tục cải thiện hệ thống — lợi thế lớn nhất của việc đã có sản phẩm chạy production. Vòng lặp: 1. Ghi trace đầy đủ — mỗi request…
- Đo chất lượng retrieval bằng metric nào? Recall@k, MRR, NDCG khác nhau ra sao?
Trong RAG, nếu bước retrieval trả sai đoạn thì generation không thể đúng — nên phải đo riêng chất lượng retrieval bằng các metric IR offline, dựa trên tập query có đánh dấu tài liệu liên quan (ground truth). Recall@k — tỉ lệ tài liệu…
- Constrained decoding (structured output) hoạt động ở tầng token thế nào? Khác gì chỉ prompt "trả JSON"?
- Indirect prompt injection qua RAG/tool result hoạt động thế nào? Thiết kế defense-in-depth cho app production ra sao?
- Đánh giá một AI agent khác đánh giá một LLM call đơn thế nào? Đo trajectory ra sao?
- RAG đa người dùng (multi-tenant): làm sao đảm bảo mỗi user chỉ truy xuất tài liệu được phép?
- Giữ knowledge base của RAG luôn cập nhật (freshness): cách quản lý indexing tăng dần và xoá?
RAG chỉ đúng khi index phản ánh nguồn hiện tại. Re-embed toàn bộ mỗi lần đổi là quá tốn — cần incremental indexing. Xử lý thay đổi theo loại: - Thêm tài liệu mới → chunk, embed, upsert. - Sửa tài liệu → re-chunk phần…
- Xử lý tiếng Việt trong pipeline LLM/RAG: tokenizer, embedding, chuẩn hoá Unicode cần lưu ý gì?
Pipeline mặc định của các thư viện LLM được tối ưu cho English; đưa tiếng Việt vào có ba điểm phải xử lý chủ động: 1. Token inflation — tokenizer BPE học chủ yếu trên English, nên từ tiếng Việt có dấu thường bị tách…
- Chọn LLM provider/model cho sản phẩm phục vụ người dùng Việt Nam: cân nhắc những yếu tố nào?
Bốn trục cân nhắc, và trục nào cũng phải đo trên bối cảnh Việt Nam thay vì tin số liệu global: 1. Chất lượng tiếng Việt — benchmark công bố chủ yếu đo English; chất lượng tiếng Việt giữa các model chênh rõ (từ vựng,…
- Self-host model mở (Qwen, Llama, model Việt hoá như PhoGPT/Vistral) so với gọi API thương mại: khi nào đáng?
- Thiết kế chatbot CSKH tích hợp Zalo OA / Facebook Messenger dùng LLM: luồng webhook, session và handoff sang người thế nào?
Cả Zalo OA lẫn Messenger đều theo mô hình webhook bất đồng bộ: người dùng nhắn → nền tảng POST sự kiện về endpoint của bạn → bạn xử lý → gọi API của nền tảng để gửi tin trả lời. Không phải request/response đồng…
- Prompt caching hoạt động thế nào? Điều kiện cache hit và cách cấu trúc prompt để tận dụng?
Cơ chế: khi xử lý prompt, model tính KV cache (attention key/value) cho từng token theo thứ tự từ trái sang phải. Prompt caching cho phép lưu lại phần tính toán của tiền tố (prefix) đã xử lý; request sau có cùng prefix thì bỏ…
- Tài liệu dài có heading, bảng và code thì nên cắt chunk thế nào để không mất nghĩa?
Nguyên tắc: cắt theo cấu trúc của tài liệu trước, cắt theo độ dài sau. Cắt cứng theo số ký tự sẽ chia đôi một bảng hoặc một khối code, và cả hai mảnh đều trở nên vô nghĩa khi truy xuất. Thứ tự ưu…
- Chunk mất ngữ cảnh khi tách khỏi tài liệu gốc. Contextual retrieval xử lý vấn đề này thế nào?
Vấn đề: một chunk như "Doanh thu quý này tăng 3%" không nói rõ công ty nào, quý nào, nên vector của nó không khớp với truy vấn "doanh thu quý 2/2024 của ACME". Contextual retrieval thêm một đoạn ngữ cảnh ngắn (thường 50-100 token)…
- Chunk nhỏ thì tìm chính xác nhưng thiếu ngữ cảnh, chunk lớn thì ngược lại. Small-to-big retrieval giải quyết ra sao?
Tách đơn vị đem đi tìm khỏi đơn vị đưa vào prompt. Đây là ý chính của small-to-big (còn gọi là parent document retrieval). - Index: chunk nhỏ (~200-300 token). Vector của đoạn ngắn đặc trưng hơn nên khớp truy vấn tốt hơn. - Trả…
- Hybrid search BM25 + vector: hợp nhất hai bảng xếp hạng bằng cách nào? Vì sao không cộng thẳng điểm?
- Bi-encoder và cross-encoder khác nhau thế nào? Vì sao reranker chính xác hơn nhưng không dùng để tìm kiếm trực tiếp?
Bi-encoder mã hoá truy vấn và tài liệu độc lập thành hai vector rồi so cosine. Vì tài liệu được embed sẵn lúc ingest, lúc truy vấn chỉ cần một lần encode + tìm láng giềng gần — quét hàng triệu tài liệu trong vài…
- Nên đưa bao nhiêu chunk vào prompt? Tăng top-k lên 50 có làm câu trả lời tốt hơn không?
Không — thường tệ đi. Tăng top-k làm tăng recall của bước truy xuất nhưng đồng thời nhồi thêm chunk nhiễu, và model không đọc đều toàn bộ context. Hiện tượng lost in the middle: độ chính xác cao nhất khi thông tin cần thiết…
- Lúc ingest nên lưu những metadata gì vào vector DB? Vì sao không chỉ lưu mỗi text và vector?
Vì phần lớn truy vấn thực tế đều kèm ràng buộc không nằm trong ngữ nghĩa: chỉ tài liệu của phòng ban tôi, chỉ bản hiệu lực năm nay, chỉ tiếng Việt. Similarity không lọc được những thứ này — chúng phải là metadata để…
- Chọn embedding model cho domain của công ty: dựa vào bảng xếp hạng công khai có đủ không? Tự đo thế nào?
Không đủ. Bảng xếp hạng công khai đo trên tập dữ liệu chung, tiếng Anh là chính, và các model đứng đầu đôi khi đã được tối ưu cho chính các tập đó. Dữ liệu của bạn có thuật ngữ riêng, viết tắt nội bộ…
- Model gọi tool với tham số sai hoặc tool ném lỗi thì xử lý thế nào? Thiết kế vòng phản hồi lỗi ra sao?
Nguyên tắc: trả lỗi về cho model như một tool result bình thường, kèm thông tin đủ để nó tự sửa. Không ném exception ra ngoài vòng lặp, cũng không nuốt lỗi rồi trả chuỗi rỗng. Những gì nên có trong thông báo lỗi: loại…
- Làm sao ép model bắt buộc gọi tool thay vì tự trả lời? Parallel tool call là gì?
Dùng tham số toolchoice (Anthropic/OpenAI) hay functioncallingconfig.mode (Gemini). Ba chế độ thường gặp: - auto (mặc định): model tự quyết định gọi tool hay trả lời thẳng. - any / required: bắt buộc gọi một tool nào đó, không được trả lời bằng văn bản.…
- Agent gọi tool có side effect (tạo đơn, gửi mail, hoàn tiền). Thiết kế thế nào để retry không gây hậu quả nhân đôi?
- Hội thoại kéo dài vượt context window. Cửa sổ trượt và tóm tắt luỹ tiến khác nhau thế nào, chọn cái nào?
Cửa sổ trượt: giữ N lượt gần nhất, cắt bỏ phần đầu. Rẻ, tất định, không gọi thêm LLM. Nhược điểm: mất hẳn thông tin đầu hội thoại — người dùng khai tên, mã đơn, ràng buộc ở lượt 2 thì đến lượt 30 model…
- JSON model trả về bị cắt giữa chừng hoặc kèm chữ thừa ngoài JSON. Xử lý thế nào trong production?
Phân biệt hai lỗi vì cách xử lý khác nhau. Kèm chữ thừa (Here is the JSON: {...}, hoặc bọc JSON trong một khối code fence): xảy ra khi chỉ dặn bằng prompt. Cách chắc chắn là dùng structured output theo schema của provider (responseformat…
- Người dùng upload tài liệu vào RAG. Tài liệu có thể chứa lệnh ẩn tấn công model. Xử lý ở khâu ingest thế nào?
- Dùng LLM chấm điểm output có những thiên lệch nào? Hiệu chỉnh ra sao để con số đáng tin?
- Nhà cung cấp LLM lỗi hoặc rate limit giữa giờ cao điểm. Thiết kế fallback thế nào mà chất lượng không tụt bất ngờ?
- Đẩy câu trả lời LLM về trình duyệt theo kiểu chảy chữ: chọn SSE hay WebSocket?
Mặc định chọn SSE (server-sent events). Luồng chat LLM là một chiều server → client: client gửi đúng một request, server phát dần các mảnh chữ. Đó chính xác là mô hình SSE. Vì sao SSE hợp hơn: - Chạy trên HTTP thường, đi qua…
- Trong app Next.js, đặt lời gọi LLM ở đâu? Vì sao không gọi thẳng từ component phía client?
Gọi từ route handler phía server (app/api/chat/route.ts) hoặc server action, không bao giờ gọi trực tiếp từ trình duyệt. Lý do: - API key. Bất cứ biến nào có tiền tố NEXTPUBLIC đều nằm trong bundle mà người dùng xem được. Key lộ nghĩa là…
- Trong lúc chờ model trả lời, UI nên hiển thị gì để người dùng không nghĩ app bị treo?
Chia thời gian chờ thành hai giai đoạn và hiển thị khác nhau cho từng giai đoạn. Giai đoạn 1 — trước token đầu tiên (TTFT). Thường 0.5–3 giây, có thể lâu hơn nếu prompt dài hoặc có bước truy xuất. Ở đây hiển thị…
- Khi nào KHÔNG nên dùng LLM mà dùng code thường?
Khi bài toán có đáp án đúng xác định và có thể diễn đạt bằng luật. LLM đắt hơn, chậm hơn, không tất định và có thể sai — chỉ chấp nhận ba nhược điểm đó khi đổi lại được thứ code thường không làm…
- Người dùng bấm Dừng giữa lúc model đang trả lời. Huỷ thế nào để thật sự ngừng tính tiền?
Phải huỷ cả ba tầng, thiếu một tầng là vẫn tốn tiền. 1. Client dừng đọc. AbortController huỷ fetch tới route handler của bạn. 2. Server nhận biết client đã ngắt. Route handler dùng req.signal — signal này được kích hoạt khi kết nối đứt.…
- Provider trả lỗi hoặc đứt khi đã stream được nửa câu trả lời. Timeout và retry thiết kế thế nào?
Tách rõ lỗi trước khi phát token đầu tiên và lỗi giữa chừng — hai loại này xử lý khác hẳn nhau. Chưa phát token nào: retry an toàn, người dùng không thấy gì. Retry khi gặp 429, 500, 502, 503, 529 và lỗi mạng/timeout.…
- Thiết kế fallback sang model/nhà cung cấp khác khi provider chính lỗi. Cạm bẫy là gì?
Đặt một lớp abstraction cho model ở server: một hàm generate(messages, options) nội bộ, bên trong chọn provider theo thứ tự ưu tiên. Thêm circuit breaker để khi provider chính hỏng liên tục thì bỏ qua luôn trong vài phút, không phải request nào cũng…
- Nhiều người dùng gọi cùng lúc, provider chặn 429. Thiết kế hàng đợi và giới hạn tốc độ thế nào?
Nhà cung cấp giới hạn theo hai chiều: số request mỗi phút (RPM) và số token mỗi phút (TPM). Vượt chiều nào cũng nhận 429, và trong ứng dụng LLM thì TPM thường chạm trần trước vì mỗi request nuốt hàng nghìn token. Ba tầng…
- Đo và đặt hạn mức chi phí token theo từng người dùng thế nào? Chặn ở đâu?
Nguyên tắc: ước lượng trước khi gọi để chặn, ghi nhận sau khi gọi để tính tiền. Ghi nhận (sau mỗi lời gọi). Response của provider trả về số token thật (inputtokens, outputtokens, và phần đọc từ cache nếu có). Lưu một dòng cho mỗi…
- Lưu lịch sử hội thoại trong DB thế nào để vừa hiển thị lại đầy đủ, vừa kiểm soát phần gửi lên model?
Điểm mấu chốt: cái hiển thị cho người dùng và cái gửi lên model là hai thứ khác nhau. DB lưu đầy đủ vĩnh viễn; prompt chỉ lấy ra một tập con. Lược đồ tối thiểu: bảng conversations (id, userid, title, createdat) và bảng messages…
- Chống lạm dụng tính năng AI: người dùng spam, cố tình đốt token, hoặc dùng app của bạn như một LLM miễn phí?
Vấn đề cần lo ở đây là chi phí và uy tín, khác với prompt injection (bảo vệ dữ liệu). Xếp phòng thủ theo thứ tự rẻ đến đắt. 1. Chặn ẩn danh. Yêu cầu đăng nhập cho tính năng tốn tiền. Nếu vẫn cho…
- Dữ liệu khách hàng có thông tin cá nhân, sản phẩm lại gọi API của nhà cung cấp nước ngoài. Xử lý trước khi gửi đi thế nào?
- Sửa prompt phải deploy lại app nên rollback rất chậm. Thiết kế prompt như cấu hình có phiên bản thế nào?
- A/B test hai phiên bản prompt trên người dùng thật: chia nhóm thế nào, đo chỉ số gì, bao lâu thì kết luận được?
- Đo chất lượng tính năng AI trên production: log những gì, lấy mẫu ra sao, và biến traffic thật thành bộ dữ liệu đánh giá thế nào?
- Tính năng AI chạy trên serverless: câu trả lời dài vượt giới hạn thời gian chạy của function. Xử lý thế nào?