4.0 KiB
Vì sao hệ thống dùng structured RAG thay vì dense search thuần
Phân loại
Loại tài liệu: Explanation.
Reader job: hiểu mental model, lựa chọn thiết kế và trade-off của pipeline.
Vấn đề
Dược thư không phải một tập đoạn văn đồng nhất. Mỗi thuốc có các section mang quan hệ khác nhau: chỉ định, chống chỉ định, thận trọng, liều và tương tác. Hai section có thể dùng cùng từ vựng nhưng trả lời hai câu hỏi đối nghịch. Nếu để vector similarity tự chọn section, đoạn lớn và giàu từ chung dễ trở thành “attractor” dù không đúng quan hệ mà người dùng hỏi.
Đo đạc lịch sử của dự án cho dense-only cho hit@1 0,544; riêng câu hỏi chống
chỉ định chỉ đạt 0,05. Vì vậy similarity không đủ tư cách quyết định phần nào
của sách là nguồn sự thật.
Mental model
Hãy xem pipeline như ba lớp quyền hạn:
Understanding xác định người dùng đang hỏi gì
↓
Retrieval quyết định evidence nào được phép dùng
↓
Generation chỉ quyết định evidence được trình bày ra sao
LLM không được chọn tùy ý một thuốc trong toàn catalog và không được bổ sung kiến thức y khoa ngoài evidence. Candidate thuốc được giới hạn trước; section được validate theo closed vocabulary; claim cuối phải trỏ lại đúng evidence.
Cách retrieval hoạt động
Biết thuốc và section
Qdrant scroll theo payload drug_id + section_key, lấy toàn bộ section và sắp
theo part_index. Đây là exact lookup, không phải similarity search.
Biết thuốc nhưng câu hỏi tự do
Hệ thống lấy các section của thuốc, rerank rồi đóng gói evidence trong token budget. Reranker chỉ sắp thứ tự; lỗi reranker không được làm mất size bound.
Biết condition nhưng chưa biết thuốc
Hệ thống tìm trong chi_dinh: phrase match chính xác trước, dense fallback sau.
Candidate được nhóm theo thuốc và bị giới hạn trước generation. Kết quả là danh
sách factual theo Dược thư, không phải ranking điều trị.
Safety model sau retrieval
Một evidence pool chỉ được đi tiếp khi:
- có source reference;
- có printed-page provenance;
- không chứa block buộc phải xem ảnh PDF.
Generation trả structured claims. Code kiểm tra citation và số theo từng block;
một LLM judge khác kiểm tra entailment. Failure ở bất kỳ gate nào dẫn đến
abstain hoặc VERIFY_PDF, không dẫn đến một câu trả lời “gần đúng”.
Trade-off
| Lựa chọn | Điểm mạnh | Chi phí |
|---|---|---|
| Exact section routing | Đúng quan hệ, lấy đủ section | Phụ thuộc query understanding và metadata tốt |
| Dense search | Bắt được paraphrase | Luôn trả nearest neighbours, kể cả query vô nghĩa |
| Rerank | Chọn evidence tốt trong một thuốc | Thêm latency/cost; chỉ là ordering aid |
| Quarantine bảng/công thức | Không bịa số từ cấu trúc 2D sai | Một số câu hỏi phải yêu cầu xem PDF |
| Grounding + entailment | Claim có thể audit | Nhiều provider calls và fail-closed nhiều hơn |
Hệ quả
- Không gọi runtime hiện tại là BM25 hoặc hybrid RRF; các module liên quan chưa tạo thành live hybrid pipeline.
- Không diễn giải “không tìm thấy” thành “không có” hoặc “an toàn”.
- Không so score
1.0của exact section lookup với cosine score; chúng khác bản chất. - Mở rộng corpus phải bảo toàn section metadata và provenance, không chỉ thêm vector.