Series 3 - Bài 2: Context Window là constraint quan trọng nhất

Context window không chỉ là giới hạn kỹ thuật. Nó là design constraint ảnh hưởng đến mọi quyết định trong agent architecture. Bài này giải thích tại sao.

5 phút đọc
Tập này đang được chuẩn bị, quay lại sau nhé.

Nếu phải chọn một constraint quan trọng nhất trong agent design, đó là context window — không phải model intelligence, không phải tool quality, không phải system prompt.

Mọi thứ khác có thể được cải thiện incrementally. Context window là hard boundary mà mọi decision trong agent architecture phải design around.

Context Window là gì

 Context Window = RAM của LLM

 ┌─────────────────────────────────────────────────────┐
 │                 Context Window                      │
 │                (e.g., 200,000 tokens)               │
 │                                                     │
 │  ┌──────────────┐  ┌──────────────────────────────┐│
 │  │ System Prompt│  │   Conversation History        ││
 │  │  ~2,000 tok  │  │   grows with each turn        ││
 │  └──────────────┘  └──────────────────────────────┘│
 │  ┌───────────────────────────────────────────────┐  │
 │  │             Tool Results                       │  │
 │  │   có thể rất lớn (file content, command output)│  │
 │  └───────────────────────────────────────────────┘  │
 │  ┌───────────────────────────────────────────────┐  │
 │  │          Current User Message                  │  │
 │  └───────────────────────────────────────────────┘  │
 └─────────────────────────────────────────────────────┘
           ↑ Tất cả phải fit vào đây

Mọi thứ LLM "biết" trong một request đều phải nằm trong context window. Không có hidden memory. Không có background process. LLM đọc text từ đầu đến cuối, process một lần, và trả về response.

Tại sao nó là constraint quan trọng nhất

1. Nó giới hạn độ phức tạp của task

Task đơn giản (5 turns, 3 tool calls):
  System prompt:        2,000 tokens
  Conversation:        10,000 tokens
  Tool results:         5,000 tokens
  ─────────────────────────────────
  Total:               17,000 tokens ✓ Thoải mái

Task phức tạp (20 turns, 15 tool calls):
  System prompt:         2,000 tokens
  Conversation:         40,000 tokens
  Tool results:         80,000 tokens
  ─────────────────────────────────
  Total:               122,000 tokens ⚠ Gần limit

Task rất phức tạp (40 turns):
  Total:               250,000 tokens ✗ Vượt limit

Không phải mọi task đều fit trong một agent run. Đây là lý do tại sao multi-agent architecture ra đời — không phải vì một agent không đủ thông minh, mà vì context window không đủ lớn.

2. Nó ảnh hưởng trực tiếp đến cost

Token cost không chỉ là số token trong response. Input tokens cũng tốn tiền — và input tokens tăng theo mỗi turn:

Turn 1:  1,000 input tokens  →  $0.003
Turn 5:  5,000 input tokens  →  $0.015
Turn 10: 15,000 input tokens →  $0.045
Turn 20: 50,000 input tokens →  $0.150

Một session phức tạp có thể tốn gấp 50x
so với một simple request.

Token budget management không phải optimization — đó là cost control bắt buộc trong production.

3. LLM attention không đồng đều trong long context

Nghiên cứu về LLM attention cho thấy pattern "lost in the middle" — LLM attend mạnh hơn vào:

  • Phần đầu của context (system prompt)
  • Phần cuối của context (current message)
  • Ít hơn vào giữa (conversation history cũ)
Attention strength:

  Đầu context  ████████████████████ (strong)
  Giữa context ████████░░░░░░░░░░░░ (weaker)
  Cuối context ████████████████████ (strong)

Implication: Thứ tự trong context window không phải ngẫu nhiên — nó ảnh hưởng đến những gì LLM "để ý".

4. Khi context đầy, behavior thay đổi

 Context 50% đầy:   LLM perform tốt nhất
 Context 80% đầy:   LLM bắt đầu miss details
 Context 95% đầy:   LLM ignore content giữa
 Context 100%+:     API error hoặc truncation

Agent không bao giờ nên approach giới hạn mà không có strategy xử lý.

Context Window theo model

 Model                  Context Window
 ─────────────────────────────────────
 Claude 3.5 Haiku       200,000 tokens
 Claude Sonnet 4        200,000 tokens
 Claude Opus 4          200,000 tokens
 GPT-4o                 128,000 tokens
 GPT-4o mini            128,000 tokens
 Gemini 1.5 Pro       1,000,000 tokens
 Gemini 2.0 Flash     1,000,000 tokens

Context window lớn hơn giúp ích — nhưng không giải quyết vấn đề triệt để vì:

  1. Cost tăng tuyến tính theo context size
  2. Attention quality giảm với very long context
  3. Latency tăng

Token là gì: Hiểu để ước tính đúng

Token ≠ Word

"Hello"        = 1 token
"processLoan" = 2 tokens (process + Loan)
"refactoring" = 3 tokens

1,000 words ≈ 750 tokens (tiếng Anh)
1,000 words ≈ 1,200 tokens (tiếng Việt, ký tự unicode)

1 file TypeScript 200 lines ≈ 3,000-5,000 tokens
1 file JSON config 50 lines ≈ 800-1,500 tokens

Agent đọc 5 file → có thể 15,000-25,000 tokens
chỉ cho tool results.

Việt Nam developers nên lưu ý: tiếng Việt tốn token gấp 1.5-2x so với tiếng Anh vì tokenizer được optimize cho Latin alphabet.

Design Principles từ context window constraint

Principle 1: Measure trước khi inject

Mọi thứ bạn thêm vào context cần được đo token count. Đừng inject file lớn mà không biết size.

Principle 2: Thiết kế budget, không phải hope

Budget allocation ví dụ (100,000 token budget):
  System prompt:    5% =  5,000 tokens
  File context:    30% = 30,000 tokens
  History:         30% = 30,000 tokens
  Tool results:    25% = 25,000 tokens
  Current message:  5% =  5,000 tokens
  Buffer:           5% =  5,000 tokens

Principle 3: Trim trước khi approach limit

Không chờ đến khi overflow. Khi đạt 80% budget, bắt đầu trim history cũ.

Principle 4: Không phải mọi thứ đều cần ở trong context

File không liên quan đến task hiện tại không cần ở trong context. Tool result đã được processed có thể được summarize. History cũ có thể được compress.

Trade-off: Larger vs Smaller Context

Larger context:
  + Nhiều thông tin hơn cho LLM
  + Ít cần trimming hơn
  - Cost cao hơn
  - Latency cao hơn
  - Attention quality có thể giảm

Smaller context (aggressively managed):
  + Cost thấp hơn
  + Latency thấp hơn
  + LLM tập trung hơn
  - Phải trim thường xuyên
  - Rủi ro mất context quan trọng

Không có đáp án đúng. Phụ thuộc vào task complexity, cost tolerance, và latency requirements.

Kết luận

  • Context window là RAM của LLM — hard limit mà mọi thứ phải fit vào.
  • Nó là constraint quan trọng nhất vì ảnh hưởng đến task complexity, cost, và attention quality.
  • LLM attend không đồng đều — thứ tự trong context window có ý nghĩa.
  • Token count của tiếng Việt cao hơn tiếng Anh — factor này ảnh hưởng đến budget planning.
  • Design around context window từ đầu, không phải sau khi hit limit.
  • Budget allocation, active trimming, và selective injection là các kỹ thuật bắt buộc.