Sổ tay kỹ thuật

RAG cơ bản – chunking, embedding, retrieval

concept#rag#agents#python· cập nhật 2026-11-06

Hiểu pipeline RAG (chunking, embedding, vector store, retrieval, rerank) và khi nào không cần RAG cho tài liệu vận hành mạng.

Sửa trang này
Mục lục

RAG (Retrieval-Augmented Generation): trước khi hỏi model, tìm các đoạn tài liệu liên quan nhất rồi đưa vào prompt. Model trả lời dựa trên tài liệu của bạn (runbook, MOP, design doc) thay vì kiến thức chung, và có thể trích nguồn.

Pipeline

flowchart LR D["Runbook / MOP / config"] --> C[Chunking] C --> E1["Embedding (offline)"] E1 --> V[(Vector store)] Q[Câu hỏi] --> E2[Embedding] E2 --> R["Retrieve top-k"] V --> R R --> RR[Rerank] RR --> L["LLM + context"] L --> A["Trả lời + nguồn"]

Thành phần

Bước Việc cần quyết định Gợi ý khởi điểm
Chunking Kích thước, overlap, cắt theo cấu trúc Cắt theo heading Markdown; 300-800 token, overlap 10-15%; giữ tiêu đề cha trong mỗi chunk
Metadata Lọc trước khi tìm vendor, os, site, doc_type, updated
Embedding Model, số chiều, đa ngôn ngữ Chọn model hỗ trợ tiếng Việt; dùng cùng model cho index và query
Vector store Nơi lưu và tìm pgvector (đã có Postgres), Qdrant, Chroma (dev)
Retrieval Dense, keyword (BM25) hay hybrid Hybrid: tên lệnh, mã lỗi (%BGP-5-ADJCHANGE) cần keyword match
Rerank Sắp lại top-k bằng cross-encoder / LLM Lấy 20-50, rerank còn 5
Generation Prompt yêu cầu bám nguồn "Chỉ trả lời từ tài liệu, không có thì nói không biết, ghi nguồn"

Chunking cho tài liệu mạng

  • Không cắt giữa code block cấu hình: một khối router bgp bị cắt đôi là vô nghĩa.
  • Bảng lỗi: mỗi dòng (triệu chứng, nguyên nhân, cách xử lý) có thể là một chunk riêng kèm tiêu đề trang.
  • Config thiết bị: thường không nên embed nguyên file; tra trực tiếp bằng tool (grep, Batfish, NetBox) chính xác hơn.

Đánh giá

Đo gì Cách
Retrieval có tìm đúng đoạn không Bộ 30-50 câu hỏi thật kèm đoạn đúng, đo recall@k
Trả lời có bám nguồn không Kiểm tra trích dẫn, chấm thủ công hoặc LLM-as-judge
Tài liệu cũ Lọc theo updated, xoá chunk của tài liệu đã thay thế

Khi nào KHÔNG cần RAG

Tình huống Làm thay
Tài liệu tổng cộng nhỏ (vài chục trang, vừa context) Đưa thẳng vào prompt, bật prompt caching
Dữ liệu có cấu trúc, cần chính xác (inventory, IPAM, trạng thái BGP) Tool gọi API/DB (thiết kế tool), không embed
Cần số liệu realtime (telemetry, flow) Tool truy vấn ClickHouse/Prometheus
Agent làm việc trong repo (Claude Code) Để agent tự grep/đọc file; CLAUDE.md cho quy ước
Câu hỏi kiến thức chung (BGP là gì) Model đã biết, RAG chỉ thêm nhiễu

Bắt đầu đơn giản: một tool search_docs(query) dùng full-text search (ripgrep/Postgres FTS) trên thư mục Markdown thường đã đủ tốt. Chỉ thêm embedding + vector store khi đo được là keyword search bỏ sót.

Khi nào dùng

  • Kho runbook/MOP/postmortem lớn, câu hỏi dạng ngôn ngữ tự nhiên, cần trích nguồn.
  • Kết hợp với agent: RAG là một tool (search_runbook) bên cạnh tool đọc thiết bị, thay vì một pipeline cố định. Khái niệm tool/server xem MCP tổng quan.