Skip to Content

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 instructiondata để 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

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

Ví 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

FormatExampleTokens
Plain text”Name is John, age is 30”8
JSON{"name":"John","age":30}12
YAMLname: John\nage: 309
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 tokens

Thử thách

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

Last updated on