$ cat ./work/2026/tro-ly-tra-cuu-noi-bo/README.md

Trợ lý tra cứu tài liệu nội bộ cho một ngân hàng

Hỏi đáp trên 180.000 trang quy trình, thông tư và hợp đồng, mỗi câu trả lời kèm trích dẫn tới đúng trang gốc và tôn trọng phân quyền theo phòng ban.

roleAI Engineer
team4 người
timeline7 tháng, 2025-2026
statusđang vận hành

## bối cảnh

Nhân viên vận hành mất trung bình 18 phút cho mỗi lần tra cứu quy trình: mở cổng nội bộ, đoán từ khoá, tải về vài file PDF dài hàng trăm trang rồi đọc dò. Bộ phận pháp chế nhận khoảng 400 câu hỏi lặp lại mỗi tháng, phần lớn có sẵn câu trả lời trong tài liệu.

Yêu cầu bắt buộc từ đầu: không câu trả lời nào được đưa ra mà thiếu trích dẫn kiểm chứng được, và không ai đọc được tài liệu ngoài quyền hạn của mình. Hai điều kiện đó định hình toàn bộ kiến trúc.

## việc tôi làm

01

Tầng nhận và chuẩn hoá tài liệu

OCR lại 40.000 trang scan, tách bảng khỏi văn bản, gộp các bản sửa đổi thông tư về một dòng thời gian duy nhất.

02

Truy hồi hai tầng

BM25 lọc thô rồi embedding xếp hạng lại, kèm bộ lọc quyền truy cập áp ngay trong truy vấn thay vì sau khi có kết quả.

03

Bộ eval và vòng phản hồi

200 câu hỏi có đáp án chuẩn do pháp chế soạn, chạy tự động mỗi lần đổi prompt hoặc mô hình.

04

Vận hành và bàn giao

vLLM trên hai GPU nội bộ, bảng theo dõi tỉ lệ trích dẫn sai, tài liệu vận hành cho nhóm hạ tầng của khách.

## kiến trúc

~/diagrams/internal-document-assistant/rag-dataflow.htmlmở riêng ↗
Hình 1Đường đi của một tài liệu từ kho nội bộ đến câu trả lời có trích dẫn.

## ba quyết định đáng nhớ

Áp phân quyền trong truy vấn, không phải sau truy hồi

Bản đầu lọc kết quả sau khi truy hồi, khiến người dùng thấy số lượng kết quả thay đổi theo quyền và đoán được sự tồn tại của tài liệu mật. Chúng tôi chuyển nhãn phòng ban thành điều kiện trong câu truy vấn pgvector.

-> không còn kênh rò rỉ suy đoán, độ trễ giảm 90ms

Giữ bảng ở dạng bảng

Biểu phí và hạn mức chiếm phần lớn câu hỏi thực tế, nhưng khi chuyển thành văn bản phẳng thì mô hình đọc lệch cột. Bảng được tách riêng, lưu dạng markdown và trả về nguyên khối.

-> độ chính xác câu hỏi về biểu phí: 61% -> 94%

Trích dẫn tới số trang, không tới tên file

Người vận hành cần mở đúng trang để đối chiếu. Chúng tôi giữ toạ độ trang qua toàn bộ pipeline chunking, đắt hơn về lưu trữ nhưng đổi lại sự tin tưởng.

-> 94% câu trả lời được người dùng đối chiếu và chấp nhận

## điều tôi làm lại khác đi

Chúng tôi dựng bộ eval sau khi đã có prototype, và trả giá bằng sáu tuần tranh luận cảm tính về chất lượng câu trả lời. Lần sau, 200 câu hỏi có đáp án chuẩn sẽ là thứ đầu tiên được viết, trước cả khi chọn mô hình embedding.

Cần một hệ thống tương tự trên dữ liệu của bạn? Viết vài dòng về bối cảnh.