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.
Nghe bài viết này dưới dạng podcastNế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ì:
- Cost tăng tuyến tính theo context size
- Attention quality giảm với very long context
- 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.
Chưa có bình luận
Để lại bình luận
Bình luận sẽ được phê duyệt trước khi hiển thị.