Formatting: Structuring the Context
Khái niệm cơ bản
Format giống như cách bạn sắp xếp tủ quần áo…
Cùng một lượng quần áo, nhưng:
- Ném đống → Khó tìm (AI bị confused)
- Gấp gọn, phân loại → Dễ tìm (AI hiểu nhanh)
LLM là pattern matchers - chúng CỰC KỲ nhạy cảm với cách bạn trình bày thông tin.
1. Delimiters (Dấu phân cách)
Tại sao cần?
Phân tách rõ ràng giữa instruction và data để AI không nhầm lẫn.
So sánh
❌ BAD (Không delimiter):
Translate this to English: Xin chào. Also remember to be polite.AI có thể dịch cả “Also remember to be polite” → Bug!
✅ GOOD (Có delimiter):
### INSTRUCTION ###
Translate the text below to English.
### TEXT ###
Xin chào. Also remember to be polite.Các delimiter phổ biến
| Delimiter | Khi nào dùng |
|---|---|
### | General purpose |
--- | Markdown-style |
""" | Code strings |
<tag></tag> | Structured data (Claude yêu thích) |
``` | Code blocks |
2. Format Wars: JSON vs YAML vs XML vs Markdown
JSON
{
"user": {
"name": "Nguyễn Văn A",
"tier": "Gold"
},
"orders": [
{"id": "123", "status": "shipped"}
]
}- ✅ Dễ parse bằng code
- ✅ GPT-4/Claude hiểu cực tốt (trained on code)
- ❌ Tốn tokens (ngoặc, quotes)
YAML
user:
name: Nguyễn Văn A
tier: Gold
orders:
- id: "123"
status: shipped- ✅ Ít tokens hơn JSON ~30%
- ✅ Human-readable
- ❌ Sensitive với indentation
XML
<user>
<name>Nguyễn Văn A</name>
<tier>Gold</tier>
</user>
<orders>
<order id="123" status="shipped"/>
</orders>- ✅ Claude yêu thích XML tags!
- ✅ Ranh giới bắt đầu/kết thúc RÕ RÀNG
- ❌ Verbose nhất
Markdown
## User Info
- **Name:** Nguyễn Văn A
- **Tier:** Gold
## Orders
| ID | Status |
|----|--------|
| 123 | Shipped |- ✅ Tự nhiên nhất (training data = web)
- ✅ Đẹp khi render
- ❌ Khó parse programmatic
3. The Perfect Layout (Thứ tự tối ưu)
LLM có Recency Bias - nhớ tốt phần ĐẦU và phần CUỐI.
Cấu trúc đề xuất
1. [SYSTEM] - Persona, rules (ĐẦU - nhớ tốt)
2. [TOOLS] - Function definitions
3. [KNOWLEDGE] - RAG documents (GIỮA - hay quên)
4. [HISTORY] - Conversation summary
5. [USER INPUT] - Current query (CUỐI - nhớ tốt nhất!)
6. [OUTPUT FORMAT] - Expected response formatVí dụ hoàn chỉnh
<system>
Bạn là AI hỗ trợ của BankXYZ. Trả lời chính xác, không bịa thông tin.
Nếu không biết, nói "Em cần chuyển đến nhân viên hỗ trợ."
</system>
<tools>
[{"name": "check_balance", "description": "Kiểm tra số dư tài khoản"}]
</tools>
<knowledge>
- Lãi suất tiết kiệm 12 tháng: 5.5%/năm
- Hotline: 1900-xxx-xxx
</knowledge>
<conversation_summary>
User hỏi về lãi suất, đã được cung cấp thông tin 12 tháng.
</conversation_summary>
<user_input>
Còn lãi suất 6 tháng thì sao?
</user_input>
<output_format>
Trả lời dưới 100 từ, có thể dùng bullet points.
</output_format>Token Efficiency Chart
| Format | Example | Tokens |
|---|---|---|
| Plain text | ”Name is John, age is 30” | 8 |
| JSON | {"name":"John","age":30} | 12 |
| YAML | name: John\nage: 30 | 9 |
| XML | <name>John</name><age>30</age> | 14 |
💡 Tip: Dùng YAML cho data lớn, XML cho boundaries quan trọng.
Bài tập thực hành 🧪
Mục tiêu
Benchmark các format khác nhau với cùng một dataset.
Code
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o")
data = {
"users": [
{"name": "Alice", "age": 25, "city": "Hanoi"},
{"name": "Bob", "age": 30, "city": "HCMC"},
]
}
# JSON format
json_str = json.dumps(data)
print(f"JSON: {len(enc.encode(json_str))} tokens")
# YAML format
yaml_str = yaml.dump(data)
print(f"YAML: {len(enc.encode(yaml_str))} tokens")
# Markdown format
md_str = """
| Name | Age | City |
|------|-----|------|
| Alice | 25 | Hanoi |
| Bob | 30 | HCMC |
"""
print(f"Markdown: {len(enc.encode(md_str))} tokens")Kết quả mong đợi
JSON: ~45 tokens
YAML: ~35 tokens
Markdown: ~40 tokensThử thách
Thử với dataset 100 users và so sánh % tiết kiệm.
Last updated on