Bỏ qua để đến nội dung
Ẩn sidebar
Search & RAG
Tìm kiếm
Ctrl
K
Hủy
Chọn giao diện
Tối
Sáng
Tự động
Menu
Phần 1 — Nhập môn
Phần 1 — Nhập môn
1.1 Vì sao không dùng Ctrl+F là xong?
1.2 Từ vựng tối thiểu
1.3 Ba nhân vật rất dễ lẫn
1.4 RAG là gì, và vì sao nó phải tồn tại
1.5 Đi bộ qua một câu hỏi
1.6 Inverted index — dựng bằng tay
1.7 BM25 tính bằng tay
1.8 Vector và embedding — trực giác hình học
1.9 "Tốt" nghĩa là gì
1.10 Bảy ngộ nhận của người mới
Phần 2 — Metrics
Phần 2 — Metrics
0. Nền tảng: metric đo cái gì, và dựa trên giả định nào
1. Nhóm SET-BASED — bỏ qua thứ tự
2. Nhóm RANK-BASED, relevance NHỊ PHÂN
3. Nhóm RANK-BASED, relevance CÓ MỨC
4. Metrics cho pipeline RAG end-to-end
5. Tổng hợp qua nhiều truy vấn
6. Ý nghĩa thống kê — phần dễ bị bỏ qua nhất
7. Bảy lỗi phương pháp phổ biến
8. Bảng quyết định — chọn metric nào
9. Checklist cho bản `metrics.py` khi dựng lại
10. Nguồn tham khảo
Phụ lục — bảng công thức một trang
Phần 3 — Nền tảng kỹ thuật
Phần 3 — Nền tảng kỹ thuật
3.1 Tiền xử lý văn bản: từ chuỗi ký tự thành term
3.2 Boolean retrieval: giao hai danh sách
3.3 Postings và lưu trữ: index nằm ở đâu, tốn bao nhiêu
3.4 TF-IDF và vector space model — tính bằng tay
3.4b BM25: từ mô hình xác suất đến công thức bạn đang dùng
3.5 Positional index: cụm từ và khoảng cách gần
3.6 Prefix, wildcard và substring
3.7 Fuzzy search (1): edit distance tính bằng tay
3.8 Fuzzy search (2): n-gram và độ tương đồng tập hợp
3.9 Fuzzy search (3): làm cho nó nhanh
3.10 Lỗi chính tả tiếng Việt: bốn loại, bốn cách chữa
3.11 Sửa lỗi, "có phải bạn muốn tìm", và autocomplete
3.12 Dựng, cập nhật và xoá index
3.13 Top-k: không tính điểm cho thứ không thể vào top
3.14 Bảng chọn: nhu cầu nào dùng cấu trúc nào
3.15 BM25 tiếng Việt: chọn tham số và kích thước chunk
Phần 4 — Lý thuyết
Phần 4 — Lý thuyết
Tầng 0 — Bài toán nền: vocabulary mismatch
Tầng 1 — Embeddings: cơ chế thật
Tầng 2 — Hybrid & Fusion
Tầng 3 — Reranking: món có ROI cao nhất
Tầng 4 — Chunking & Indexing
Tầng 5 — ANN & hạ tầng vector
Tầng 6 — Query understanding
Tầng 6b — Keyword extraction: từ câu hỏi hội thoại đến truy vấn BM25
Tầng 7 — Ma trận dữ liệu ↔ thuật toán
Tầng 8 — Context assembly & chống hallucination
Tầng 9 — Agentic retrieval
Tầng 10 — Production
Phần 5 — Reranker
Phần 5 — Reranker
5.1 Reranker là gì: một việc duy nhất, làm rất tốt
5.2 Bi-encoder vs cross-encoder: một chi tiết kiến trúc, hai thế giới
5.3 Điểm của reranker nghĩa là gì (và vì sao đừng đặt ngưỡng cứng lên nó)
5.4 Trần không vượt được: recall@k của stage 1
5.5 Cross-encoder được huấn luyện thế nào
5.6 Late interaction: mua tương tác bằng dung lượng index
5.7 Dùng LLM làm reranker
5.8 Bản đồ model, tháng 8/2026
5.9 Latency và throughput: chỗ reranker tốn tiền
5.10 Toán chi phí: API hay tự host
5.11 Cắm reranker vào một hệ thống thật
5.12 Đo xem reranker có thực sự giúp không
5.13 Khi nào reranker làm tệ hơn
5.14 Fine-tune reranker của riêng bạn
5.15 Bảng quyết định và checklist triển khai
Phần 6 — Vector index & ANN
Phần 6 — Vector index & ANN
6.1 — Quantization cho vector: scalar, product, binary, TurboQuant
6.2 — ANN đồ thị: từ small world tới HNSW (và sau HNSW)
Phần 7 — Qdrant
Phần 7 — Qdrant
7.1 Qdrant là gì, và khi nào đừng dùng
7.2 Collection, point, vector, payload
7.3 Nhiều biểu diễn trên một point: named vector, sparse, multivector
7.4 Segment — đơn vị thật của Qdrant
7.5 WAL, flush, và ý nghĩa của `wait`
7.6 Optimizer: ba loại, và vì sao latency nhấp nháy
7.7 HNSW trong Qdrant
7.8 Filterable HNSW và query planner
7.9 Payload index
7.10 Mô hình bộ nhớ: pinned / cached / cold
7.11 Query API và prefetch
7.12 Hybrid: RRF và DBSF
7.13 Filtering: mệnh đề và điều kiện
7.14 Formula, grouping, facet
7.15 Phân tán: shard, replica, Raft
7.16 Consistency: núm vặn và giá của chúng
7.17 Multitenancy
7.18 Toán tài nguyên và sizing
7.19 Snapshot và phục hồi
7.20 Bảo mật, quan sát, checklist production
7.21 Bảng quyết định
Phần 8 — Áp vào AI Agent
Phụ lục
Phụ lục
Phụ lục — Lộ trình & baseline
Phụ lục — Sổ tay công thức
Phụ lục — Sai số của tài liệu
Bài tập
Bài tập
Bài tập 01 — Xây một hệ thống Inverted Index
Chọn giao diện
Tối
Sáng
Tự động
Phụ lục — bảng công thức một trang
Success@
k
=
1
[
R
∩
π
1
:
k
≠
∅
]
Recall@
k
=
∣
R
∩
π
1
:
k
∣
/
R
Precision@
k
=
∣
R
∩
π
1
:
k
∣
/
k
R-Prec
=
∣
R
∩
π
1
:
R
∣
/
R
RR
=
1
/
min
{
i
:
d
i
∈
R
}
AP@
k
=
1
R
∑
i
=
1
k
1
[
d
i
∈
R
]
⋅
Precision@
i
DCG@
k
=
∑
i
=
1
k
(
2
r
e
l
(
d
i
)
−
1
)
/
log
2
(
i
+
1
)
nDCG@
k
=
DCG@
k
/
IDCG@
k
ERR
=
∑
i
=
1
k
1
i
R
i
∏
j
<
i
(
1
−
R
j
)
,
R
i
=
2
r
e
l
(
d
i
)
−
1
2
r
e
l
max
RBP
=
(
1
−
p
)
∑
i
≥
1
p
i
−
1
r
e
l
(
d
i
)
\begin{aligned} \text{Success@}k &= \mathbb{1}[\mathcal{R} \cap \pi_{1:k} \neq \emptyset] \\[4pt] \text{Recall@}k &= \lvert\mathcal{R} \cap \pi_{1:k}\rvert \,/\, R \\[4pt] \text{Precision@}k &= \lvert\mathcal{R} \cap \pi_{1:k}\rvert \,/\, k \\[4pt] \text{R-Prec} &= \lvert\mathcal{R} \cap \pi_{1:R}\rvert \,/\, R \\[4pt] \text{RR} &= 1 / \min\{i : d_i \in \mathcal{R}\} \\[4pt] \text{AP@}k &= \tfrac{1}{R}\textstyle\sum_{i=1}^{k} \mathbb{1}[d_i \in \mathcal{R}] \cdot \text{Precision@}i \\[4pt] \text{DCG@}k &= \textstyle\sum_{i=1}^{k} (2^{\mathrm{rel}(d_i)}-1) \,/\, \log_2(i+1) \\[4pt] \text{nDCG@}k &= \text{DCG@}k \,/\, \text{IDCG@}k \\[4pt] \text{ERR} &= \textstyle\sum_{i=1}^{k} \tfrac{1}{i} R_i \prod_{j<i}(1-R_j), \quad R_i = \tfrac{2^{\mathrm{rel}(d_i)}-1}{2^{\mathrm{rel}_{\max}}} \\[4pt] \text{RBP} &= (1-p)\textstyle\sum_{i\ge1} p^{i-1}\,\mathrm{rel}(d_i) \end{aligned}
Success@
k
Recall@
k
Precision@
k
R-Prec
RR
AP@
k
DCG@
k
nDCG@
k
ERR
RBP
=
1
[
R
∩
π
1
:
k
=
∅
]
=
∣
R
∩
π
1
:
k
∣
/
R
=
∣
R
∩
π
1
:
k
∣
/
k
=
∣
R
∩
π
1
:
R
∣
/
R
=
1/
min
{
i
:
d
i
∈
R
}
=
R
1
∑
i
=
1
k
1
[
d
i
∈
R
]
⋅
Precision@
i
=
∑
i
=
1
k
(
2
rel
(
d
i
)
−
1
)
/
lo
g
2
(
i
+
1
)
=
DCG@
k
/
IDCG@
k
=
∑
i
=
1
k
i
1
R
i
∏
j
<
i
(
1
−
R
j
)
,
R
i
=
2
rel
m
a
x
2
rel
(
d
i
)
−
1
=
(
1
−
p
)
∑
i
≥
1
p
i
−
1
rel
(
d
i
)
Mọi metric trên đều lấy
macro-average
qua tập truy vấn.
Phần 2 — Metrics