Context Window
Cửa sổ ngữ cảnh là số token tối đa mà model có thể xử lý bằng attention trong một yêu cầu; giới hạn này được chia sẻ giữa prompt, lịch sử, tài liệu và câu trả lời.
Cửa sổ ngữ cảnh là số lượng token tối đa mà model có thể tính đến trong một yêu cầu. Với mô hình ngôn ngữ lớn (LLM), mọi nội dung model đọc và viết đều dùng chung ngân sách này: system prompt, định nghĩa công cụ, lịch sử hội thoại, tài liệu truy xuất, câu hỏi của người dùng và câu trả lời được tạo. Nội dung nằm ngoài cửa sổ hoàn toàn không đến được model; đó là lý do chatbot mất dấu phần đầu của cuộc hội thoại rất dài khi các lượt trước bị cắt bỏ. Cửa sổ đã tăng từ 2.048 token trong GPT-3 lên 128K token trong GPT-4 Turbo vào cuối năm 2023 và 1 triệu token trong Gemini 1.5 Pro của Google năm 2024; Llama 4 Scout của Meta công bố hỗ trợ 10 triệu token.
Nội dung trong cửa sổ ngữ cảnh#
Token hóa chia văn bản thành các mảnh từ con, trung bình khoảng bốn ký tự tiếng Anh, nên cửa sổ 128K token chứa lượng văn bản tương đương khoảng 300 trang. Mô hình thị giác-ngôn ngữ (VLM) cũng dùng token cho hình ảnh, thường là hàng trăm token patch mỗi ảnh; do đó, video dài lấp đầy cửa sổ nhanh hơn nhiều so với bản chép lời của video. Token được tạo cũng tính vào cùng giới hạn, và nhà cung cấp đặt thêm giới hạn riêng về độ dài đầu ra bên trong cửa sổ đó. Vì vậy, các ứng dụng chạy hội thoại dài hoặc tác tử AI phải tạo prompt cho mỗi lượt và quyết định nội dung nào cần giữ lại:
Vì sao cửa sổ có giới hạn#
Độ dài làm tăng hai loại chi phí. Self-attention so sánh từng token với mọi token khác, do đó chi phí tính toán attention tăng theo bình phương số lượng token. Trong quá trình tạo văn bản, bộ nhớ đệm KV lưu key và value của từng token trước đó: Llama 3.1 8B với 32 lớp và 8 head key-value, mỗi head có 128 chiều, lưu 128 KiB mỗi token ở độ chính xác 16 bit, tương đương 16 GiB với cửa sổ đầy đủ 131.072 token, lớn hơn dung lượng 16 GB mà các trọng số chiếm dụng.
Cửa sổ cũng bị giới hạn bởi quá trình huấn luyện. Model được huấn luyện trên chuỗi 8K token chưa từng thấy các vị trí vượt quá giới hạn đó; vì vậy, việc mở rộng cửa sổ đòi hỏi phải co giãn embedding vị trí xoay (RoPE) bằng các phương pháp như YaRN, rồi tinh chỉnh nhanh trên văn bản dài hơn. Việc phục vụ cửa sổ dài dựa vào các kỹ thuật tiết kiệm bộ nhớ: flash attention tính attention chính xác mà không lưu ma trận điểm đầy đủ, attention truy vấn nhóm (GQA) thu nhỏ bộ nhớ đệm KV, attention cửa sổ trượt giới hạn mỗi token ở các token lân cận gần đây, còn ring attention chia một chuỗi trên nhiều GPU.
Ngữ cảnh được quảng bá và ngữ cảnh hiệu quả#
Model nhận được một triệu token không có nghĩa là sử dụng tốt tất cả số token đó. Nghiên cứu năm 2023 Lạc giữa văn bản cho thấy model trả lời tốt nhất khi đoạn văn liên quan nằm ở đầu hoặc cuối prompt, và kém nhất khi đoạn văn nằm ở giữa. Các bài kiểm tra cây kim trong đống rơm (NIAH) đo khả năng nhớ lại một dữ kiện được chèn ở từng độ sâu và độ dài; còn benchmark RULER khó hơn cho thấy chỉ một nửa trong số 17 model tuyên bố hỗ trợ ít nhất 32K token đạt hiệu suất thỏa đáng ở mức 32K. Sự suy giảm dần khi đầu vào tăng được gọi là suy thoái ngữ cảnh; tạo sinh tăng cường truy xuất (RAG) và kỹ thuật hóa ngữ cảnh giúp khắc phục bằng cách chỉ đưa nội dung liên quan vào cửa sổ.
Cửa sổ ngữ cảnh và các thuật ngữ liên quan#
- Trường tiếp nhận: Vùng của ảnh đầu vào ảnh hưởng đến một đầu ra của mạng nơ-ron tích chập (CNN). Kích thước trường tiếp nhận được cố định bởi kích thước kernel và độ sâu, còn cửa sổ ngữ cảnh là ngân sách token.
- Kích thước batch: Số lượng chuỗi độc lập được xử lý cùng lúc. Cửa sổ ngữ cảnh giới hạn độ dài của từng chuỗi.
- Bộ nhớ: Bộ nhớ của tác tử, chẳng hạn bộ nhớ sự kiện được lưu trong cơ sở dữ liệu vector, được duy trì bên ngoài cửa sổ và được sao chép trở lại cửa sổ khi cần.
Cửa sổ ngữ cảnh trong phát hiện từ vựng mở#
Bộ mã hóa văn bản bên trong model thị giác cũng có cửa sổ ngữ cảnh. Ultralytics YOLOE và YOLO-World mã hóa từng prompt lớp bằng bộ mã hóa văn bản thuộc họ CLIP, có cửa sổ ngữ cảnh 77 token; theo mặc định, bộ mã hóa văn bản của Ultralytics cắt bớt prompt dài hơn. Bộ tokenizer CLIP tương tự cho thấy phần nào bị cắt:
import clip
from clip.simple_tokenizer import SimpleTokenizer
prompt = (
"a warehouse worker wearing a yellow high-visibility vest, a white hard hat, blue gloves and clear safety "
"glasses, standing beside a red forklift that carries wooden pallets stacked with brown cardboard boxes, "
"under bright ceiling lights in a narrow aisle between tall metal shelves, next to a fire extinguisher "
"mounted on the wall, a green emergency exit sign, an open loading dock door and a black dog"
)
# CLIP's BPE tokenizer wraps the text in start and end tokens
tokenizer = SimpleTokenizer()
print(f"Prompt length: {len(tokenizer.encode(prompt)) + 2} tokens")
# The text encoder reads a fixed 77-token window, so truncation drops the tail
tokens = clip.tokenize(prompt, truncate=True)[0]
kept = tokenizer.decode(tokens[1:-1].tolist())
print(f"Window: {len(tokens)} tokens ending in '{' '.join(kept.split()[-4:])}'")
print(f"'black dog' kept: {'black dog' in kept}")Prompt dài 80 token, vì vậy cửa sổ giữ 75 token văn bản đầu tiên cùng với dấu bắt đầu và kết thúc, dừng ở “cửa kho hàng và”, rồi bỏ “một con chó đen” trước khi bộ mã hóa có thể tiếp nhận nội dung đó.










