Bỏ qua tới nội dung chính
Quay lại tin tức

Kỹ thuật lặp trong truy xuất phân cấp: Đọc tài liệu dài bằng mục lục

Towards Data Science· Kezhan Shi· 9/7/2026general

Tài liệu thông minh cho doanh nghiệp [Tập 1 #7quater] - Một tài liệu dài 492 trang có mục lục gồm 358 mục. Bạn không thể đọc hết toàn bộ tài liệu, và việc sử dụng phương pháp top-k trên mỗi trang sẽ trộn lẫn câu trả lời với các nội dung lân cận. Thay vào đó, hãy định tuyến thông qua mục lục: một vòng lặp giới hạn bên trong quá trình truy xuất giúp tiết kiệm token và nâng cao độ chính xác. Bài đăng Loop Engineering for Hierarchical Retrieval: Reading a Long Document by Its Table of Contents xuất hiện lần đầu trên Towards Data Science.

Mô hình ngôn ngữ lớn Kỹ thuật vòng lặp để truy xuất phân cấp: Đọc tài liệu dài bằng mục lục Enterprise Document Intelligence [Tập 1 #7quater] – Một tài liệu dài 492 trang có mục lục gồm 358 mục. Bạn không thể đọc hết, và việc chọn top-k trên mỗi trang sẽ trộn lẫn câu trả lời với các mục lân cận. Thay vào đó, hãy định tuyến qua mục lục: một vòng lặp giới hạn bên trong quá trình truy xuất giúp tiết kiệm token và nâng cao độ chính xác. Kezhan Shi Ngày 9/7/2026 10 phút đọc Chia sẻ Ảnh của Daniel Forsman, qua Unsplash. Kỹ thuật vòng lặp để truy xuất phân cấp: đọc tài liệu dài bằng mục lục – ảnh động của tác giả Bài viết này là một phần của Phần II của Enterprise Document Intelligence, một chuỗi xây dựng hệ thống RAG cấp doanh nghiệp từ bốn khối: phân tích tài liệu, phân tích câu hỏi, truy xuất và tạo. Khối truy xuất là một bộ ba: Bài viết 7A, Truy xuất là lọc, không phải tìm kiếm: mô hình tư duy, lọc các bảng có cấu trúc thay vì tìm kiếm trên các vector. Bài viết 7B, Phát hiện neo: các bộ phát hiện từ khóa và nhúng song song, sau đó là một lệnh gọi LLM ở cuối. Bài viết 7C, Mô hình trọng tài: một lệnh gọi LLM xếp hạng các ứng cử viên và viết lý do. Bài viết bổ sung này (7quater) xử lý trường hợp mà khối gặp phải trong thực tế: một tài liệu quá dài để đọc, với mục lục quá dài để đưa ra. vị trí của bài viết này trong chuỗi: Bài viết 7quater (truy xuất phân cấp), một bài viết bổ sung cho khối truy xuất trong Phần II – Hình ảnh của tác giả 📓 Các sổ tay đi kèm có thể chạy được trên GitHub: doc-intel/notebooks-vol1. Kho lưu trữ mã công khai doc-intel/notebooks-vol1 – Hình ảnh của tác giả Chúng tôi thực hiện điều này trên NIST SP 800-53 Rev. 5 (Kiểm soát bảo mật và quyền riêng tư cho hệ thống thông tin và tổ chức, công việc của Chính phủ Hoa Kỳ, thuộc phạm vi công cộng ở Hoa Kỳ) và NIST Cybersecurity Framework 2.0. Các đường dẫn mã có thể chạy được gọi các dịch vụ của OpenAI được điều chỉnh bởi Điều khoản sử dụng của OpenAI. 1. Vấn đề: mục lục quá dài để cung cấp NIST SP 800-53 dài 492 trang. Nó định nghĩa các kiểm soát bảo mật mà một hệ thống liên bang Hoa Kỳ phải đáp ứng, từng kiểm soát một, hai mươi nhóm kiểm soát. Một người dùng đặt một câu hỏi đơn giản: “Kiểm soát quản lý tài khoản yêu cầu gì?” Câu trả lời là năm trang, kiểm soát AC-2, trên các trang 46 đến 50. Cách tiếp cận RAG ngây thơ nhúng mọi trang và lấy top-k tương tự nhất với câu hỏi. Nó thất bại theo một cách cụ thể ở đây: các từ tài khoản, quản lý, kiểm soát và truy cập nằm trên hàng trăm trang, bởi vì toàn bộ tài liệu là về các kiểm soát. Top-k trả về AC-2 trộn lẫn với AC-3, AC-17, một vài kiểm soát kiểm toán và bảng chú giải, và mô hình tạo phải đoán xem cái nào được đề cập. Chi phí phải trả hai lần: bạn nhúng 492 trang, và câu trả lời vẫn bị mờ. Một người mở mục lục thay vào đó. Đây là điểm mấu chốt khiến bài viết này trở nên cần thiết: mục lục tự nó có 358 mục. Bạn sẽ không đưa cho đồng nghiệp tất cả 358 dòng cũng như 492 trang. Một chuyên gia quét danh sách chương trước, mười một tiêu đề, chọn The Controls, mở nó ra hai mươi nhóm, chọn Access Control, mở nó ra các kiểm soát của nó, và đến AC-2. Cấp cao nhất trước, sau đó xuống, từng quyết định nhỏ một. Đó là vòng lặp mà bài viết này xây dựng, và đó là luận điểm của chuỗi thu nhỏ: khuếch đại chuyên gia. Làm những gì chuyên gia làm. Đừng đưa toàn bộ tài liệu, hoặc toàn bộ mục lục, cho mô hình cùng một lúc. 2. Mục lục, ba cấp độ sâu Bên trái là trang mục lục thực tế của tài liệu; bên phải là toc_df mà trình phân tích cú pháp đọc từ dàn ý gốc của nó. Bên trái là trang mục lục của tài liệu; bên phải là toc_df của trình phân tích cú pháp, gồm 20 nhóm kiểm soát thuộc Chương 3, mỗi nhóm là một khoảng trang có thể truy cập trực tiếp – Ảnh của tác giả. Trang in dừng ở cấp độ nhóm. Trình phân tích cú pháp đi sâu hơn. Điều 5B chuyển dàn ý gốc của PDF thành một toc_df, mỗi hàng là một tiêu đề. Đối với tài liệu này, có 358 hàng trên ba cấp độ, từ 11 chương cấp cao nhất đến từng trong số 316 kiểm soát riêng lẻ (AC-1, AC-2, và các kiểm soát khác), mỗi kiểm soát có một khoảng trang. Hai mươi nhóm kiểm soát nằm ở giữa. Cây này là thứ mà quá trình truy xuất đi theo. Khi một tài liệu không có dàn ý gốc để đi theo, Điều 5septies sẽ tái tạo một dàn ý từ trang; ở đây dàn ý rõ ràng, vì vậy chúng tôi sử dụng trực tiếp. 3. Vòng lặp: từng cấp độ một Quá trình truy xuất đi theo cây từ trên xuống. Nó chỉ cung cấp cho LLM cấp độ hiện tại, trước tiên là 11 tiêu đề chương, mỗi tiêu đề là một dòng ngắn gọn: tiêu đề, khoảng trang và khi các tiêu đề không rõ ràng thì có một bảng tổng hợp từ khóa ngắn. Mô hình chọn nhánh trả lời câu hỏi. Nếu nhánh đó rộng và có các nhánh con nhỏ hơn, quá trình truy xuất sẽ mở nó ra, các nhánh con của nó trở thành cấp độ tiếp theo và bước này lặp lại. Nó dừng lại ở một lá, hoặc ở một phần đủ nhỏ để đọc toàn bộ. Vòng lặp giới hạn bên trong quá trình truy xuất: chọn, mở, lặp lại, cho đến khi đến một lá hoặc một phần nhỏ; LLM đánh giá ở mỗi cấp độ xem có nên đi sâu hơn không – Ảnh của tác giả. Hai điều phát sinh từ hình dạng này. Bảng mục lục dài không bao giờ được đưa vào một lời nhắc toàn bộ: mô hình đọc 11 dòng, sau đó 20, sau đó khoảng 20, không bao giờ 358 dòng cùng một lúc. Và quá trình đi xuống thực sự là tùy chọn. Trên một tài liệu ngắn, cấp độ cao nhất không có nhánh con để mở, vì vậy vòng lặp chạy một lần và hoạt động chính xác như định tuyến phẳng. Mô hình đánh giá ở mỗi cấp độ xem có bất kỳ lý do nào để đi sâu hơn không. 4. Bước định tuyến, trong mã Bước này là một hàm, reason_on_toc, được gọi một lần cho mỗi cấp độ. Nó đọc cấp độ dưới dạng văn bản, không bao giờ là bảng, vì vậy một cấp độ gồm 20 mục là 20 dòng ngắn, không phải là một lưới tăng thêm một cột cho mỗi từ khóa. # Từ trên xuống: chỉ cung cấp MỘT cấp độ tại một thời điểm, không bao giờ là toàn bộ TOC 358 hàng. # Mỗi mục là một dòng ngắn gọn: tiêu đề + khoảng trang (+ số lần xuất hiện từ khóa). level = toc_df[toc_df.level == toc_df.level.min()] # 11 tiêu đề chương while True: pick = reason_on_toc(question, level, client=client) # một lệnh gọi LLM section = level[level.id.isin(pick.section_ids)] kids = immediate_children(toc_df, section) if kid

Nguồn tin: Towards Data Science — Tác giả: Kezhan Shi. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.