Checkpoint frontend UI/UX overhaul and ingestion embed benchmark work
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
# RAG rebuild plan — chatbot tra cứu hoàn thiện cho Dược thư Quốc gia VN 2018
|
||||
|
||||
Ngày 2026-08-06. Grounded bằng: (1) chẩn đoán live service thật, (2) đo toàn
|
||||
corpus đã xử lý, (3) **đọc trực tiếp PDF gốc** (render ảnh, text-layer hỏng).
|
||||
|
||||
## 1. Cuốn sách thật ra sao (đọc từ PDF gốc, không suy đoán)
|
||||
|
||||
- **1668 trang, 2 cột, 3 phần.** Text-layer PDF **hỏng/đảo trang** (trang
|
||||
Paracetamol chèn "papaverin hydroclorid") → mọi trích xuất phải dựa vào
|
||||
**span in đậm + hình học + kiểm tra bằng mắt**, không dùng pdfplumber text.
|
||||
- **Part 2 — chuyên luận thuốc (vật lý ~99–1496):** CÓ 19 field in đậm cố định
|
||||
(Tên chung quốc tế, Mã ATC, Loại thuốc, Dạng thuốc, Dược lý, Chỉ định, Chống
|
||||
chỉ định, Thận trọng, Thời kỳ mang thai/cho con bú, Tác dụng KMM, Hướng dẫn xử
|
||||
trí ADR, Liều lượng, Tương tác, Quá liều, Độ ổn định, Tương kỵ, Thông tin qui
|
||||
chế, Tên thương mại). 684 chuyên luận.
|
||||
- **NHƯNG cấu trúc bên trong field KHÔNG đồng nhất:** 172/684 (25%) là chuyên
|
||||
luận NHÓM. INSULIN gộp ~20 mã ATC, section liều 9.268 ký tự; VITAMIN D 14.197
|
||||
ký tự/8 ATC. Thuốc con + đối tượng + chỉ định nằm **lẫn trong prose** (nhãn
|
||||
kết thúc bằng ":", ví dụ "Đái tháo đường typ 1:", "Người lớn:"), **không có
|
||||
heading riêng**. Đây là gốc của "không phải section nào cũng như thế".
|
||||
- **Part 1 — chương tổng quát (vật lý ~37–98):** free-form — dàn ý đánh số phân
|
||||
cấp, bảng phân loại đóng khung, heading tự do. Nội dung lâm sàng quan trọng:
|
||||
ngộ độc & thuốc giải độc, kê đơn cho người suy gan/thận/trẻ em/thai kỳ, hướng
|
||||
dẫn theo bệnh. **Corpus hiện KHÔNG có.**
|
||||
- **Part 3 — phụ lục (vật lý ~1497–1528):** phân loại ATC, tính BSA, pha tiêm
|
||||
tĩnh mạch. Dạng tra cứu/bảng. **Corpus hiện KHÔNG có.**
|
||||
|
||||
## 2. Gốc bệnh đã đo được (bằng chứng live, không phải cảm tính)
|
||||
|
||||
Khi resolve trúng 1 thuốc → trả lời ĐÚNG, grounded, có nguồn. Lỗi tập trung ở
|
||||
**tầng hiểu-câu/định-tuyến + thiếu node**, và ở **độ hạt chunk cho section phi
|
||||
đồng nhất** — KHÔNG phải ở embedding/generation:
|
||||
|
||||
1. Resolver fuzzy vừa nhận nhầm thuốc bịa (`aspirinol`→aspirin) vừa chết ở tên
|
||||
Anh đúng (`amoxicillin`). **[ĐÃ THAY — mục 3.1]**
|
||||
2. Không có node: tương tác 2 thuốc, triệu chứng→thuốc, tính liều mg/kg×cân, BSA.
|
||||
3. Kế thừa đa lượt chập chờn.
|
||||
4. Section chunk trộn nhiều đối tượng (đo: 72% chunk liều) + chuyên luận nhóm bị
|
||||
cắt mù token-window (INSULIN 8 mảnh, không theo ranh giới thuốc con/chỉ định).
|
||||
5. Thiếu phạm vi Part 1 + Part 3.
|
||||
|
||||
## 3. Kế hoạch đập & xây (phân đợt, mỗi đợt có gate + eval)
|
||||
|
||||
**GIỮ (xương sống an toàn, đã kiểm chứng — không đập):** extract span-đậm hình
|
||||
học + provenance; quarantine bảng/công thức (ADR 0006); `grounding.verify` (chặn
|
||||
bịa số); skeleton vòng lặp `reasoning.py`.
|
||||
|
||||
### 3.1. Não mới — hiểu câu bằng LLM ✅ ĐÃ LÀM + PROVEN (session này)
|
||||
`rag/understanding.py` `LlmQueryUnderstander` → `QueryFrame` (turn_type, drugs
|
||||
[chỉ từ 684 thuốc thật], unknown_drugs, attribute, population, weight_kg,
|
||||
indication). Chạy đúng cả 7 ca killer trên LLM thật. `rag/` không import SDK.
|
||||
Đã dọn 2 embedder 0d giả (SectionOnly/LocalHash), chỉ còn cohere-v4; 118 test pass.
|
||||
|
||||
### 3.2. Nối frame vào đường trả lời + thêm node ⬅️ TIẾP THEO ($0, không re-embed)
|
||||
Thay `CatalogDrugResolver` fuzzy + `SectionResolver` keyword bằng router theo
|
||||
`turn_type`:
|
||||
- `drug_attribute`/`drug_overview` → retrieve theo drug_id + attribute.
|
||||
- `interaction` → gom cả 2 thuốc (mục tương tác của mỗi bên) → tổng hợp; "không
|
||||
thấy bằng chứng" phải nói *đã tra ở đâu*, không khẳng định "an toàn".
|
||||
- `symptom_to_drug` → tra ngược `chi_dinh` (48 thuốc chứa "sốt"…).
|
||||
- `dosing_calc` → node tính mg/kg×cân nặng (hàm CÓ TEST, kiểu `calculators.py`,
|
||||
không để LLM nhân số) + BSA.
|
||||
Eval: unit + chạy lại bộ battery live + golden; grounding vẫn bật. Xoá resolver cũ.
|
||||
|
||||
### 3.3. Re-chunk structure-aware (đợt lớn — cần owner GO cho re-embed ~$0.5)
|
||||
- **Part 2:** cắt section lớn/nhóm theo **cấu trúc thật trong prose** — nhãn chỉ
|
||||
định ("Đái tháo đường typ 1:"), nhãn đối tượng ("Người lớn:", "Trẻ em:"), tên
|
||||
thuốc con — thành child chunk; parent = cả section để hydrate. Thêm metadata
|
||||
`population_tags`, `indication_tags`, `subdrug_tags` để lọc. Gỡ 72% trộn +
|
||||
INSULIN blob.
|
||||
- **Part 1:** chunk phân cấp open-taxonomy (đường dẫn heading từ dàn ý đánh số);
|
||||
bảng đóng khung → quarantine/tái dựng.
|
||||
- **Part 3:** phụ lục riêng (bảng ATC; BSA → calculator).
|
||||
- Schema v5 (+`content_type` monograph|chapter|appendix, +`chapter_id`). Embed
|
||||
chunk MỚI (cohere, announce trước). **Gate CLAUDE-cũ:** span-ledger phủ đủ
|
||||
**1668 trang, unassigned=0**, provenance còn nguyên, không mất chuyên luận.
|
||||
|
||||
### 3.4. Tái dựng 151 bảng quarantine cho retrieval (vision↔geometric consensus)
|
||||
Cell nghi ngờ gắn `needs_expert`; hiển thị vẫn crop+trang (bác sĩ tự đối chiếu).
|
||||
|
||||
### 3.5. Eval cuối
|
||||
Golden + battery live, so trước/sau, grounding on; whole-doc gate cho re-chunk.
|
||||
|
||||
## 4. Ràng buộc
|
||||
- Codex làm song song → claim ownership trong `coordination/` trước khi sửa.
|
||||
- Không cloud spend nếu chưa có owner GO cụ thể (Part 2 re-embed + Part 1/3 embed).
|
||||
- AWS $138.50 credit khuyến mãi, pay-per-call, idle ≈ $0.
|
||||
|
||||
## 5. Thứ tự đề xuất
|
||||
3.2 trước (bot hết ngu ngay, $0) → 3.3 (mở phạm vi + sửa chunk, cần GO) → 3.4 → 3.5.
|
||||
Reference in New Issue
Block a user