Chuyển đến nội dung chính

Context Engineering trong RAG: Lọc, nén và sắp xếp

Trong một hệ thống Retrieval-Augmented Generation (RAG), lấy được tài liệu liên quan mới chỉ là một nửa công việc. Nếu đưa nguyên toàn bộ kết quả retrieval vào prompt, mô hình vẫn có thể bị phân tán bởi đoạn dư thừa, thông tin lặp hoặc bằng chứng quan trọng nằm ở vị trí khó chú ý.

Context Engineering trong RAG là bước biến tập tài liệu truy xuất thành ngữ cảnh phù hợp nhất trước khi gửi cho Large Language Model (LLM). Thay vì hỏi “retriever tìm được gì?”, bước này tập trung vào câu hỏi thực tế hơn: “LLM nên nhìn thấy chính xác những gì và theo thứ tự nào?”.

Context Engineering nằm ở đâu trong pipeline RAG?

Một pipeline RAG đơn giản thường có dạng:

Query → Retrieval → Context Processing → Prompt → LLM → Answer

Retrieval chịu trách nhiệm tìm các chunk có khả năng chứa câu trả lời. Context processing tiếp tục xử lý tập chunk đó bằng cách loại nhiễu, rút gọn nội dung, điều chỉnh thứ tự và chọn lượng thông tin vừa với giới hạn context window của mô hình.

Ví dụ, với câu hỏi “RAG khác fine-tuning ở điểm nào?”, retriever có thể trả về tám chunk nói về RAG, fine-tuning, embedding và huấn luyện LLM. Một hệ thống tốt không nhất thiết đưa cả tám chunk vào prompt. Nó có thể giữ lại bốn chunk trực tiếp so sánh hai kỹ thuật, loại phần không liên quan và đặt bằng chứng quan trọng lên trước.

Vì vậy, retrieval tối ưu khả năng tìm thấy bằng chứng, còn Context Engineering tối ưu cách bằng chứng được trình bày cho generator. Hai bước liên quan chặt chẽ nhưng giải quyết hai vấn đề khác nhau.

Filtering: loại chunk không đủ liên quan

Retriever thường ưu tiên recall: lấy đủ rộng để tránh bỏ sót tài liệu đúng. Hệ quả là danh sách kết quả có thể chứa nhiều chunk chỉ liên quan một phần. Filtering thêm một ngưỡng quyết định sau retrieval để chỉ giữ những đoạn đủ hữu ích.

Cách đơn giản nhất là lọc theo similarity score hoặc reranking score. Giả sử retriever trả về các điểm số sau:

Chunk Score Xử lý
Giải thích kiến trúc RAG 0.91 Giữ
So sánh RAG và fine-tuning 0.87 Giữ
Cách tạo embedding 0.54 Loại

Không nên xem một ngưỡng score cụ thể là giá trị chuẩn cho mọi hệ thống. Ý nghĩa của score phụ thuộc embedding model, phương pháp tìm kiếm, cách chuẩn hóa và reranker. Ngưỡng nên được chọn dựa trên dữ liệu đánh giá của chính ứng dụng.

Filtering cũng có thể dùng mô hình riêng để phân loại từng chunk thành relevant hoặc irrelevant. Cách này tốn thêm chi phí nhưng hữu ích khi similarity score không phản ánh tốt mức độ tài liệu thực sự trả lời câu hỏi.

Contextual Compression: giữ bằng chứng, bỏ phần thừa

Một chunk có thể liên quan nhưng chỉ vài câu bên trong thực sự cần thiết. Contextual Compression là quá trình rút gọn tài liệu dựa trên query, giữ lại phần chứa thông tin có ích thay vì gửi nguyên chunk cho LLM.

Ví dụ, một chunk dài 500 từ mô tả nhiều chiến lược xây dựng RAG nhưng query chỉ hỏi về hybrid search. Compressor có thể trích ra vài câu giải thích việc kết hợp lexical search và dense retrieval. Context cuối cùng ngắn hơn nhưng vẫn giữ bằng chứng cần để tạo câu trả lời.

Điểm quan trọng: compression không đơn giản là summarization. Một bản tóm tắt cố gắng mô tả nội dung chung của tài liệu, còn contextual compression chỉ quan tâm đến phần có ích đối với query hiện tại.

Có hai hướng phổ biến. Extractive compression chọn nguyên câu hoặc span từ tài liệu nên dễ bảo toàn nội dung gốc. Abstractive compression dùng mô hình viết lại nội dung ngắn hơn, linh hoạt hơn nhưng có nguy cơ tạo thông tin không có trong nguồn.

Trong RAG yêu cầu độ chính xác cao, extractive compression thường dễ kiểm soát hơn. Nếu dùng LLM để nén theo kiểu abstractive, cần coi kết quả nén là một bước sinh nội dung trung gian và đánh giá nguy cơ mất hoặc biến đổi bằng chứng.

Reordering: thứ tự tài liệu cũng ảnh hưởng đến context

Sau filtering và compression, hệ thống vẫn cần quyết định thứ tự các chunk trong prompt. Cách đơn giản là sắp xếp giảm dần theo relevance score, nhưng đây không phải lựa chọn duy nhất.

Với context dài, thông tin quan trọng có thể khó được mô hình tận dụng nếu nằm giữa nhiều đoạn khác. Một chiến lược thực dụng là ưu tiên các chunk có độ liên quan cao ở những vị trí nổi bật, đồng thời nhóm các đoạn cùng chủ đề hoặc cùng tài liệu để duy trì mạch thông tin.

Reordering đặc biệt hữu ích khi câu trả lời cần tổng hợp từ nhiều nguồn. Chẳng hạn, một query hỏi cả ưu điểm và hạn chế của Graph RAG có thể cần hai nhóm tài liệu khác nhau. Gom các chunk theo khía cạnh trước khi xây prompt thường tạo context dễ đọc hơn việc xen kẽ chúng chỉ dựa trên score.

Nếu ứng dụng cần trích dẫn nguồn, metadata như document ID, section hoặc URL nội bộ cũng nên đi cùng chunk trong quá trình sắp xếp. Điều này giúp giữ liên kết giữa phát biểu và bằng chứng thay vì cố khôi phục nguồn sau khi mô hình đã tạo câu trả lời.

Context Packing: chọn dữ liệu trong giới hạn token

LLM có context window hữu hạn và mỗi token đưa vào prompt đều làm tăng chi phí xử lý. Context Packing là quá trình chọn tập chunk tốt nhất sao cho không vượt quá ngân sách token dành cho phần tài liệu.

Một chiến lược cơ bản là duyệt các chunk theo relevance score và thêm chúng cho đến khi hết ngân sách. Đoạn code dưới đây minh họa nguyên tắc này bằng số token đã được tính trước:

def pack_context(chunks, max_tokens):
    selected = []
    used_tokens = 0

    for chunk in sorted(
        chunks,
        key=lambda x: x["score"],
        reverse=True
    ):
        size = chunk["tokens"]

        if used_tokens + size > max_tokens:
            continue

        selected.append(chunk)
        used_tokens += size

    return selected

Hàm trên không phải thuật toán packing tối ưu trong mọi trường hợp, nhưng thể hiện rõ mục tiêu: ưu tiên tài liệu có score cao trong một ngân sách cố định. Trong hệ thống thực tế, số token nên được tính bằng tokenizer tương ứng với model thay vì ước lượng từ số ký tự.

Ngoài relevance, packing có thể cân nhắc thêm tính đa dạng. Nếu năm chunk điểm cao nhất đều lặp lại cùng một thông tin, lấy cả năm thường kém hiệu quả hơn việc giữ hai chunk tốt nhất và dành chỗ cho bằng chứng bổ sung từ nguồn khác.

Đừng nhầm Context Engineering với Prompt Engineering

Prompt Engineering chủ yếu thiết kế instruction: yêu cầu model làm gì, trả lời theo định dạng nào và tuân theo quy tắc nào. Context Engineering rộng hơn ở phần dữ liệu: thông tin nào được đưa vào model, lấy từ đâu, được lọc ra sao và được tổ chức theo thứ tự nào.

Khía cạnh Prompt Engineering Context Engineering
Trọng tâm Instruction cho model Thông tin model được nhìn thấy
Ví dụ “Chỉ trả lời dựa trên tài liệu” Lọc và nén tài liệu trước khi đưa vào prompt
Vấn đề chính Cách giao nhiệm vụ Chất lượng và cấu trúc ngữ cảnh

Trong RAG thực tế, hai kỹ thuật thường được dùng cùng nhau. Một instruction tốt không thể bù hoàn toàn cho context chứa tài liệu sai; ngược lại, retrieval chính xác vẫn có thể cho kết quả kém nếu prompt không nói rõ model phải sử dụng bằng chứng như thế nào.

Khi nào cần đầu tư vào bước xử lý context?

Context Engineering trở nên quan trọng khi hệ thống lấy nhiều chunk, tài liệu dài, có nhiều nguồn trùng lặp hoặc chi phí token bắt đầu tăng đáng kể. Nó cũng hữu ích khi quan sát thấy retriever đã tìm đúng tài liệu nhưng câu trả lời của LLM vẫn bỏ sót bằng chứng hoặc tập trung vào đoạn ít quan trọng.

  • Dùng filtering khi top-k chứa nhiều kết quả chỉ liên quan yếu.
  • Dùng contextual compression khi chunk dài nhưng thông tin cần thiết chỉ chiếm một phần nhỏ.
  • Dùng reordering khi câu trả lời phải tổng hợp nhiều bằng chứng hoặc context khá dài.
  • Dùng context packing khi cần kiểm soát context window, latency hoặc chi phí token.

Không nên thêm tất cả kỹ thuật ngay từ đầu. Mỗi tầng processing làm pipeline phức tạp hơn và có thể tăng latency. Cách phù hợp là đo retrieval trước, kiểm tra những chunk thực sự được gửi tới LLM, rồi bổ sung bước xử lý giải quyết đúng lỗi đang quan sát được.

Một hệ thống RAG tốt không cố nhồi nhiều tài liệu nhất có thể vào prompt. Mục tiêu là cung cấp ít context nhưng đủ bằng chứng, đúng với câu hỏi và được tổ chức để model sử dụng dễ dàng. Sau chunking, retrieval và query transformation, Context Engineering là lớp nối quan trọng giữa “tìm thấy thông tin” và “tạo ra câu trả lời dựa trên thông tin đó”.

© The CS Note · THE CS NOTE

Nội dung gốc thuộc tác giả. Vui lòng không đăng lại toàn văn khi chưa được phép, trừ trường hợp pháp luật hoặc giấy phép áp dụng cho phép. Nội dung của bên thứ ba tuân theo quyền và giấy phép tương ứng.

Nguồn gốc: Context Engineering trong RAG: Lọc, nén và sắp xếp

Về trang chủ Về đầu bài

Bài Đăng Phổ Biến

Bài toán tháp Hà nội

Trải nghiệm Tháp Hà Nội Kéo thả đĩa hoặc chạm vào các nút bên dưới để di chuyển. Bạn phải chuyển toàn bộ đĩa sang cột ngoài cùng bên phải (Cột 3) mà không đặt đĩa to lên đĩa nhỏ. Cột 1 Cột 2 Cột 3 Điều khiển & Chế độ Số lượng đĩa 4 Tốc độ máy giải ↪ Undo ↻ Chơi lại 🤖 Máy tự giải Thống kê ván chơi Nước đã đi 0 Thời gian 00:00 Tối thiểu cần 15 Kỷ lục của bạn - Lịch sử và Nguồn gốc Truyền thuyết Bài toán Tháp Hà Nội (hay Tháp Brahma) là một trò chơi xếp hình toán học kinh điển được giới thiệu lần đầu vào năm 1883 bởi nhà toán học người Pháp Édouard L...

Bài toán phân tích cảm xúc trong văn bản

Bài toán phân tích cảm xúc (sentiment analysis) là một bài toán NLP nhằm xác định thái độ hoặc cảm xúc được thể hiện trong văn bản. Ví dụ, từ một đánh giá như “Điện thoại đẹp, chạy nhanh nhưng pin hơi yếu”, hệ thống có thể nhận biết rằng người dùng có cả nhận xét tích cực và tiêu cực. Điểm thú vị của bài toán nằm ở khoảng cách giữa cách con người hiểu ngôn ngữ và cách máy tính xử lý dữ liệu. Một hệ thống phân tích cảm xúc cần biến văn bản tự nhiên thành dữ liệu có cấu trúc, học được các mẫu ngôn ngữ từ dữ liệu huấn luyện và đưa ra dự đoán hợp lý trên những câu chưa từng gặp. 1. Bài toán phân tích cảm xúc bắt đầu từ đâu? Hãy tưởng tượng một cửa hàng trực tuyến có hàng nghìn đánh giá mỗi ngày. Con người có thể đọc từng đánh giá để biết khách hàng hài lòng hay không, nhưng việc này nhanh chóng trở nên tốn thời gian khi dữ liệu tăng lên. NLP có thể biến bài toán đó thành một bài toán phân loại. Với mỗi văn bản, hệ thống nhận vào một chuỗi ký...

KAN cho phân đoạn khối u não với bộ BraTS 2020

Kolmogorov-Arnold Network (KAN) mở ra một hướng khác với MLP truyền thống: thay vì chỉ học các trọng số vô hướng trên mỗi kết nối, KAN có thể học những hàm phi tuyến một biến trên các cạnh . Khi đưa ý tưởng này vào kiến trúc encoder-decoder như U-Net, ta có thể sử dụng convolution để giữ cấu trúc không gian của ảnh MRI và dùng KAN để thực hiện các phép biến đổi phi tuyến mạnh hơn trên representation trung gian. Một bài toán phù hợp để nghiên cứu hướng này là phân đoạn u thần kinh đệm trên BraTS 2020 . Dataset cung cấp MRI đa mô thức và yêu cầu xác định các vùng Whole Tumor (WT), Tumor Core (TC) và Enhancing Tumor (ET). Đây là bài toán 3D có sự mất cân bằng voxel lớn, hình dạng khối u rất đa dạng và ranh giới giữa các mô bệnh lý không đơn giản. Lưu ý học thuật quan trọng: U-KAN gốc được công bố cho nhiều benchmark phân đoạn ảnh y tế nhưng không báo cáo kết quả BraTS 2020. Một công trình sau đó đã mở rộng U-KAN sang 3D MRI brain tumor segmentation , nhưng đánh giá trên BraTS 2...

Tách từ trong tiếng Việt Word Segmentation

Tách từ tiếng Việt là bài toán xác định ranh giới giữa các từ trong một chuỗi văn bản. Khó khăn nằm ở chỗ khoảng trắng trong tiếng Việt thường phân cách các âm tiết , nhưng một từ hoàn chỉnh có thể gồm nhiều âm tiết như “sinh viên” , “đại học” , “công nghệ” hay “tự nhiên” . Tách từ đúng giúp các hệ thống NLP dựa trên từ biểu diễn văn bản hợp lý hơn, đặc biệt trong tìm kiếm, TF-IDF, phân loại văn bản, gán nhãn từ loại và một số mô hình ngôn ngữ tiếng Việt. Tuy nhiên, với các Transformer sử dụng tokenizer dưới mức từ như subword hoặc SentencePiece, tách từ thủ công không phải lúc nào cũng là bước bắt buộc . Việc có cần tách từ trước hay không phụ thuộc vào mô hình và pipeline cụ thể. Tóm tắt nội dung Khoảng trắng trong tiếng Việt không phải lúc nào cũng là ranh giới từ ; nhiều từ gồm hai hoặc nhiều âm tiết. Word segmentation và tokenization có liên quan nhưng không hoàn toàn đồng nghĩa. Ba hướng chính gồm dựa trên từ điển, mô hình thống kê và mô hình học sâu . Tron...

KAN là gì? Mạng Kolmogorov-Arnold khác MLP thế nào?

Kolmogorov-Arnold Network (KAN) là một kiến trúc mạng nơ-ron trong đó mỗi cạnh không chỉ chứa một trọng số vô hướng mà mang một hàm một biến có thể học được . Đây là khác biệt cốt lõi so với Multi-Layer Perceptron (MLP), nơi các cạnh chủ yếu thực hiện phép nhân với trọng số còn hàm kích hoạt thường được áp dụng tại các node. KAN được lấy cảm hứng từ định lý biểu diễn Kolmogorov-Arnold và đặc biệt đáng chú ý trong các bài toán xấp xỉ hàm, mô hình hóa khoa học và symbolic regression. Tuy nhiên, KAN không nên được hiểu là kiến trúc đã thay thế MLP trong mọi bài toán Deep Learning; khả năng biểu diễn, chi phí tính toán và mức độ phù hợp của hai kiến trúc khác nhau theo từng nhiệm vụ. Tóm tắt nội dung MLP học chủ yếu trọng số trên các cạnh , còn KAN đặt hàm một biến học được trên từng cạnh . Một KAN layer cộng kết quả của nhiều hàm cạnh để tạo activation của node tiếp theo. KAN gốc sử dụng B-spline để tham số hóa các hàm phi tuyến trên cạnh. KAN có lợi thế đáng chú ý về trực...