AI Core cho lập trình viên/Tổng kết: Embedding, tìm kiếm & RAG
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 bóc cách máy biến nghĩa thành số, rồi 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 (embed → retrieve → context → generate), 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à biết chọn 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 việc bẻ gãy 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 được từ mục tiêu "kéo gần cặp liên quan, đẩy xa cặp không liên quan" — nên "gần nghĩa" mang định nghĩa của dữ liệu huấn luyện, không phải của bài toán bạn đang giải, và số chiều là nút chi phí chứ không phải nút chất lượng. Cosine similarity là phép đo mặc định cho "gần" đó: đo góc giữa hai vector, chủ động 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 thua trắng 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 hoà điểm, không phải "semantic trước, lọc từ khoá sau".

Bài 04 và 05 dựng phần "ống dẫn": tài liệu phải chunk trước khi embed vì context hữu hạn và vì vector có độ dài cố định — cắt quá nhỏ mất ngữ cảnh, cắt quá to loãng tín hiệu. Chunk chính là đơn vị chảy qua 5 bước RAG: embed query → retrieve top-k bằng cosine → nhét context → generate — tách bạch với 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 khung chẩn đoán và khung 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 tổng hợp tất cả vào ba ticket ngân hàng, buộc bạn tự 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 sáu nhánh của module: embedding và cosine, semantic vs keyword, chunking, RAG pipeline, bốn kiểu hỏng, và ba trục chọn kiến trúc

🗺️ 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 là nút chi phí, không phải 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 vs 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 ýThua trắng 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 từ 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ố hoà đ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 loãng tín hiệu; 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 đúng 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 tồn tại ở 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 ⇒ phải RAG" là bẫy; fine-tune không nạp được sự 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 hoà đ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 mỗi câu hỏi (query-time)
Noise robustnessKhả năng generation bỏ qua đoạn nhiễu gần nghĩa nhưng không trả lời được
Negative rejectionKhả năng generation từ chối trả lời khi đáp án không tồn tại trong kho tài liệu
Information integrationKhả năng generation gộp thông tin từ nhiều đoạn để trả lời trọn vẹn
Counterfactual robustnessKhả năng generation phát hiện 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 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 — lúc đó điểm thấp mới là gần nhau.

Coi hybrid search là "semantic trước, lọc từ khoá sau": lọc sau chỉ hoạt động trên kết quả semantic đã trả về; nếu semantic không đưa đúng đoạn vào top-k ban đầu, 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ỏ mất ngữ cảnh (câu tách rời không tự giải nghĩa được), quá to loãng tín hiệu (chunk chứa đúng câu trả lời chưa chắc được xếp hạng cao).

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, luôn trả về đúng k đoạn kể cả khi chẳng đoạn nào thật sự 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 sự kiện mới: fine-tune đổi giọng/định dạng/hành vi đầu ra, không nạp được sự kiện đáng tin — kiến thức cần grounding 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 ⇒ 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ó điểm hỏng retrieval — thêm RAG lúc đó là thêm hạ tầng để đổi lấy không gì cả.

✅ Self-assessment

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

🚀 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ột cách an toàn.

Module 6 — Tầng quyết định của engineer (đang biên soạn) sẽ đi vào prompt principles, fine-tune đào sâu hơn khi nào thật sự cần, khái niệm agent ở mức tổng quan, cách dựng evalgolden set, và ràng buộc cost/latency/privacy trước khi ship. Đây là bước từ "hiểu cơ chế" sang "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 đáng gửi cho bạn học cùng?

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

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

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

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên

Bài tiếp theo

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