Bỏ qua để đến nội dung

Formatting & Structure

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.


Phân tách rõ ràng giữa instructiondata để AI không nhầm lẫn.

❌ 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.
Delimiter Khi nào dùng
### General purpose
--- Markdown-style
""" Code strings
<tag></tag> Structured data (Claude yêu thích)
``` Code blocks

{
"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)
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
<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
## 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

LLM có Recency Bias - nhớ tốt phần ĐẦU và phần CUỐI.

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 format
<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>

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.


Benchmark các format khác nhau với cùng một dataset.

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")
JSON: ~45 tokens
YAML: ~35 tokens
Markdown: ~40 tokens

Thử với dataset 100 users và so sánh % tiết kiệm.