AI Core cho lập trình viên
45/54
Bài 45 / 54~6 phútEmbedding, tìm kiếm & RAGMiễn phí… lượt xem

Tổng kết: Embedding, tìm kiếm & RAG

Từ vector nghĩa tới quyết định kiến trúc — cheat sheet, glossary, pitfall tổng hợp và self-assessment đối chiếu 5 learning outcomes của module.

TL;DR: Module 5 đi từ cách máy biến nghĩa thành số tới cách dùng số đó để trả lời câu hỏi. Bạn phân biệt được embedding (vector nghĩa, không phải mã hoá) với phép đo cosine similarity (đo hướng, bỏ qua độ dài); biết khi nào semantic search thua keyword/BM25 và cần hybrid; hiểu vì sao phải chunk tài liệu trước khi embed; trace được 5 bước pipeline RAG và tách bạch index-time với query-time; chẩn đoán một hệ RAG hỏng theo bốn failure mode có tên chuẩn; và chọn được giữa prompt-only, RAG, RAG hybrid, fine-tune cho một use case cụ thể. Đây là trang để bookmark.

Đã đi qua những gì

Module mở đầu bằng cách gỡ một ngộ nhận: embedding không phải mã hoá. Nó là hàm ánh xạ văn bản thành vector độ dài cố định, học từ mục tiêu "kéo gần cặp liên quan, đẩy xa cặp không liên quan". Vì thế "gần nghĩa" mang định nghĩa của dữ liệu huấn luyện chứ không phải của bài toán bạn đang giải, và số chiều quyết định chi phí nhiều hơn chất lượng. Cosine similarity là phép đo mặc định cho chữ "gần" đó: đo góc giữa hai vector, bỏ qua độ dài, nên điểm cao chỉ nói "gần theo hướng model đã học", không nói "đúng ý người dùng".

Bài 03 lật ngược chiến thắng đó. Semantic search mạnh ở diễn đạt tự nhiên nhưng trượt trước định danh chính xác (mã lỗi, endpoint, version), thứ không có khái niệm "gần nghĩa", chỉ có trùng hoặc không. Keyword/BM25 thắng đúng chỗ đó, và hybrid chạy song song cả hai đường rồi gộp điểm, không phải "semantic trước, lọc từ khoá sau".

Bài 04 và 05 dựng phần đường ống. Tài liệu phải chunk trước khi embed, vì embedding model có trần input và vì vector có độ dài cố định; cắt quá nhỏ thì mất ngữ cảnh, cắt quá to thì nghĩa bị nhoè. Chunk là đơn vị chảy qua 5 bước RAG: nhận câu hỏi, embed câu hỏi, retrieve top-k bằng cosine, nhét context, generate. Tách bạch với đó là index-time (chunk, embed, lưu), chạy trước và không phụ thuộc câu hỏi nào.

Bài 06 và 07 khép module bằng cách chẩn đoán và cách quyết định. RAG giảm hallucination nhưng không triệt tiêu: có đúng đoạn tài liệu không đảm bảo generation dùng đúng nó, và bốn failure mode (noise robustness, negative rejection, information integration, counterfactual robustness) cho bạn tên gọi chuẩn thay vì đoán mò. Mini-challenge gom tất cả vào ba ticket ngân hàng, buộc bạn chọn giữa prompt-only, RAG, RAG hybrid, fine-tune theo ba trục: kho có vượt context không, truy vấn là ngôn ngữ tự nhiên hay định danh, dữ liệu đổi bao lâu một lần.

🗺️ Cheat sheet

ConceptKhi nào dùngPitfall
EmbeddingBiến văn bản thành vector để so sánh theo nghĩa, không theo chuỗi ký tựKhông có model tốt nhất cho mọi task; số chiều quyết định chi phí trước chất lượng
Cosine similarityĐo "gần nghĩa" giữa hai vector, bỏ qua độ dàiĐiểm cao không đồng nghĩa đúng ý người dùng; kiểm distance hay similarity trước khi đọc chiều
Semantic searchTruy vấn diễn đạt tự nhiên, nhiều cách nói cùng một ýTrượt với truy vấn chứa định danh chính xác (mã lỗi, endpoint, version)
Keyword / BM25Truy vấn cần khớp đúng chuỗi/token (mã lỗi, version, tên riêng)Thua khi người dùng diễn đạt khác chữ dù cùng ý định
Hybrid searchTruy vấn lẫn cả diễn đạt tự nhiên lẫn định danh chính xácKhông phải "semantic trước, lọc sau"; trọng số gộp điểm phải đo trên dữ liệu thật
ChunkingBắt buộc trước khi embed tài liệu dài hơn một ýQuá nhỏ mất ngữ cảnh, quá to nhoè nghĩa hoặc vượt trần input; overlap giảm rủi ro cắt ngang một ý
RAG pipelineKho vượt context, hoặc đổi thường xuyên, hoặc cần trích nguồnKhông phải tra database bằng khoá; model chỉ thấy phần được nhét vào context
Noise robustnessContext lẫn đoạn nhiễu gần nghĩa nhưng không trả lời đượcModel bị nhiễu lái sang hướng khác dù đoạn đúng vẫn có mặt
Negative rejectionĐáp án không có ở bất cứ đâu trong kho tài liệuModel phải biết từ chối; bịa ra một câu tự tin là hỏng
Information integrationĐáp án cần gộp thông tin từ hai đoạn trở lênModel chỉ dùng một đoạn rồi dừng, bỏ sót phần còn lại
Counterfactual robustnessMột đoạn trong context chứa thông tin sai hoặc lỗi thờiModel tin theo mù quáng thay vì phát hiện mâu thuẫn với đoạn khác
Chọn kiến trúc (prompt-only/RAG/fine-tune)Ba trục: kho có vượt context, truy vấn loại gì, dữ liệu đổi bao lâu"Có tài liệu thì phải RAG" là chọn sai; fine-tune không phải cách nạp dữ kiện đáng tin

📖 Glossary module

Thuật ngữĐịnh nghĩa 1 câu
EmbeddingHàm ánh xạ văn bản thành vector độ dài cố định trong không gian nghĩa đã học
VectorDãy số thực độ dài cố định đại diện cho nghĩa của một đoạn văn bản
Cosine similarityPhép đo góc giữa hai vector, bỏ qua độ lớn, kết quả từ -1 đến 1
Semantic searchTìm kiếm theo độ gần nghĩa của vector, không cần chung từ khoá
Keyword search / BM25Tìm kiếm xếp hạng theo tần suất và độ hiếm của từ khoá, khớp chuỗi chính xác
Hybrid searchChạy song song semantic và keyword search rồi gộp điểm thành một bảng xếp hạng
Chunk / chunkingCắt tài liệu dài thành đoạn nhỏ hơn trước khi embed, mỗi đoạn ra một vector riêng
OverlapPhần cuối một chunk lặp lại ở đầu chunk kế tiếp, giảm rủi ro cắt ngang một ý
RAG (Retrieval-Augmented Generation)Kiến trúc retrieve đoạn liên quan rồi nhét vào context trước khi model generate
RetrieveBước xếp hạng toàn bộ index theo cosine similarity rồi lấy k đoạn điểm cao nhất
Top-kSố đoạn điểm cao nhất được lấy ra ở bước retrieve để nhét vào context
Index-time / query-timeGiai đoạn chunk-embed-lưu chạy trước (index-time) và giai đoạn chạy lại cho mỗi câu hỏi (query-time)
Noise robustnessNăng lực của generation bỏ qua đoạn nhiễu gần nghĩa mà không trả lời được câu hỏi
Negative rejectionNăng lực của generation từ chối trả lời khi đáp án không có trong kho tài liệu
Information integrationNăng lực của generation gộp thông tin từ nhiều đoạn để trả lời trọn vẹn
Counterfactual robustnessNăng lực của generation nhận ra một đoạn context chứa thông tin sai hoặc lỗi thời
MTEB (Massive Text Embedding Benchmark)Bộ benchmark đo embedding model trên nhiều loại task, kết luận không model nào thống trị mọi task

⚠️ Pitfall tổng hợp

❌ Coi embedding là mã hoá, và coi vector là dữ liệu vô hại. Không có hàm decode chính chủ dựng lại nguyên văn, nhưng vector cũng không ẩn danh tuyệt đối: OWASP xếp riêng LLM08:2025 vì embedding có thể bị đảo ngược để khôi phục một phần thông tin gốc.

❌ Trộn vector cũ và mới sau khi đổi embedding model. Hai model dựng hai không gian nghĩa khác nhau; index lẫn cả hai vẫn chạy được nhưng kết quả vô nghĩa với phần nằm sai không gian. Đổi model là index lại toàn bộ.

❌ Đọc điểm cosine như một tỉ lệ phần trăm đúng. 0.91 không phải "91% đúng", và một số vector store trả về khoảng cách thay vì độ giống nhau, khi đó điểm thấp mới là gần.

❌ Coi hybrid search là "semantic trước, lọc từ khoá sau". Lọc sau chỉ chạy trên kết quả semantic đã trả về; nếu semantic không đưa đúng đoạn vào top-k ban đầu, bộ lọc phía sau không còn gì để lọc.

❌ Chọn chunk-size theo bản năng "càng nhỏ càng an toàn" hoặc "càng to càng an toàn". Quá nhỏ thì câu tách rời không tự giải nghĩa được; quá to thì chunk chứa đúng câu trả lời chưa chắc được xếp hạng cao, còn vượt trần input thì phần thừa bị cắt hẳn.

❌ Coi RAG là cho model "tra database bằng khoá trùng khớp". Retrieve là xếp hạng gần đúng theo cosine similarity và luôn trả về đúng k đoạn, kể cả khi chẳng đoạn nào liên quan.

❌ Thấy bot trả lời sai là sửa prompt hoặc đổi model ngay. Luôn cô lập bước hỏng trước (đáp án có trong kho không, có được retrieve vào context không) rồi mới kết luận lỗi nằm ở generation.

❌ Dùng fine-tune để nạp kiến thức mới. Fine-tune đổi giọng/định dạng/hành vi đầu ra, không phải cách nạp dữ kiện đáng tin: kiến thức cần có căn cứ ngay lúc suy luận (RAG), không phải nhồi vào trọng số.

❌ Mặc định "có tài liệu thì phải dùng RAG". Khi kho vừa cửa sổ context và tĩnh trong phiên, prompt-only đơn giản hơn và không có chỗ hỏng retrieval; thêm RAG lúc đó là thêm hạ tầng mà chẳng được gì.

✅ Self-assessment

Bạn đã đạt module này nếu trả lời được:

  • Explain embedding ánh xạ văn bản thành vector trong không gian nghĩa, và vì sao chất lượng phụ thuộc task chứ không phụ thuộc kích thước.
  • Predict các truy vấn mà semantic search thua keyword search và khi nào cần hybrid.
  • Trace pipeline RAG từ query tới câu trả lời qua embed → retrieve → context → generate.
  • Diagnose một hệ RAG hỏng ở retrieval hay generation theo taxonomy bốn failure mode.
  • Justify lựa chọn prompt-only vs RAG vs fine-tune cho use case cụ thể, kèm rủi ro và chi phí.

🚀 What's next

Module này cho bạn kiến trúc: làm sao nạp kiến thức ngoài tham số vào một câu trả lời đáng tin. Module tiếp theo lùi lại một bước. Giả sử kiến trúc đã đúng, làm sao đưa một AI feature từ demo lên production mà không cháy?

Module 6: Tầng quyết định của engineer đi vào nguyên tắc prompt, khi nào fine-tune thật sự đáng tiền, agent ở mức tổng quan, cách dựng eval và golden set, và ràng buộc cost/latency/privacy trước khi ship. Đó là bước từ "hiểu cơ chế" sang "ra quyết định kỹ thuật có trách nhiệm".

Khám phá thêm: Khoá AI Core cho lập trình viên

📚 Tài liệu mở rộng

Ghi chú: mọi số đối chiếu nguồn gốc ngày 2026-07-23; benchmark đổi theo thời gian, kiểm lại khi ra quyết định thật.

Bài tiếp theo: Module 6: Tầng quyết định của engineer

Bài này có giúp bạn hiểu bản chất không?

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Thảo luận & góp ý

Hỏi đáp về bài này

Bài tiếp theo

Tổng quan: Tầng quyết định của engineer