Tháng 9/2024, OpenAI công bố o1. Model trả lời chậm hơn GPT-4o (30-60 giây), token đầu ra nhiều hơn (gồm cả “thinking”), nhưng đánh bại GPT-4o trong toán (AIME), code (Codeforces), khoa học (GPQA Diamond) với margin lớn. Một số task tăng 30-50% accuracy.
Tháng 1/2025, DeepSeek công bố R1. Cùng level với o1 trên benchmark, mã nguồn mở, kèm technical report chi tiết. Cộng đồng có thể fine-tune model của riêng mình thành reasoning model.
Đây không phải prompt engineering. Đây là cách train model mới, dùng reinforcement learning để thưởng cho việc model “suy nghĩ” trước khi trả lời. Bài này mở câu chuyện reasoning model: ý tưởng cốt lõi, cách DeepSeek R1 train, và limitation.
Dành cho: dev đã hiểu fine-tuning (bài 18-21) và muốn hiểu hướng quan trọng nhất của 2024-2025.
Mental model: suy nghĩ trước khi trả lời
Chain-of-thought (CoT) là kỹ thuật cũ: prompt “let’s think step by step” làm LLM viết bước trung gian trước khi đưa đáp án. CoT thường tăng accuracy 5-15% trên task suy luận.
Vấn đề CoT prompt: model thường viết bước thừa, bỏ qua bước quan trọng, hoặc skip thẳng tới answer. Train data của model không có nhiều “long reasoning” examples vì internet chủ yếu là final answer.
Reasoning model giải vấn đề này bằng cách train model suy nghĩ dài và đúng, không chỉ prompt nó.
GPT-4o (model thường):
User: 2 + 2 = ?
Model: 4
o1 (reasoning model):
User: 2 + 2 = ?
Model: <thinking>2 + 2 là phép cộng cơ bản, kết quả 4</thinking>
4
GPT-4o với complex math:
User: tích phân của x^2 từ 0 đến 5?
Model: Tích phân là x^3/3, từ 0 đến 5 là 125/3.
(đôi khi đúng, đôi khi sai bước tính)
o1 với complex math:
User: tích phân của x^2 từ 0 đến 5?
Model: <thinking>
Đầu tiên áp dụng power rule: integral x^n = x^(n+1)/(n+1).
Với n=2, integral x^2 dx = x^3/3.
Đánh giá tại biên trên 5: 5^3/3 = 125/3.
Đánh giá tại biên dưới 0: 0^3/3 = 0.
Hiệu: 125/3 - 0 = 125/3.
Kiểm tra lại: power rule đúng, tính x^3 = 125 đúng, chia 3 đúng.
</thinking>
125/3
Sự khác biệt: o1 spend test-time compute để suy nghĩ. Càng nghĩ lâu, accuracy càng cao. Đây là pattern mới: trade compute lấy quality.
Phần 1: Test-time compute, biến mới trong scaling
Scaling laws cổ điển (Chinchilla 2022): chất lượng model phụ thuộc params × training tokens × training compute.
OpenAI o1 thêm chiều mới: test-time compute. Tại inference, cho model suy nghĩ nhiều hơn -> accuracy tăng. Có thể đổi quality vs latency liên tục.
Quality vs compute:
o1-mini, 1 second thinking: ~70% AIME accuracy
o1-mini, 10 seconds: ~80%
o1-mini, 60 seconds: ~85%
o1 full, 60 seconds: ~90%
Đường cong này không tồn tại với GPT-4o. GPT-4o thinking 60s không tốt hơn 1s, vì model không được train để dùng thinking time hiệu quả.
Trade-off mới: muốn quality cao, trả nhiều token thinking (hoá đơn API đắt hơn 5-10x).
Phần 2: Cách train (DeepSeek R1 phơi bày)
DeepSeek R1 paper (1/2025) là tài liệu công khai chi tiết nhất về cách train reasoning model. OpenAI o1 không có paper detail, nhưng cộng đồng tin pattern tương tự.
Quy trình DeepSeek R1:
Bước 1: Cold-start SFT. Thu thập vài nghìn examples “long reasoning” chất lượng cao (toán, code, science). Fine-tune base model (DeepSeek-V3) trên data này.
Example:
Question: tích phân của x^2 từ 0 đến 5?
Long reasoning:
Đầu tiên... (200-500 token reasoning)
...
Final answer: 125/3
Bước này giúp model học format “long reasoning” trước khi RL.
Bước 2: RL với rule-based rewards. Train model với reinforcement learning. Reward function dựa trên:
- Accuracy: answer cuối có đúng không? (check bằng grader: code execution, math equivalence)
- Format: có dùng
<thinking>tag đúng không?
Không reward “reasoning quality” trực tiếp. Chỉ reward final correctness. Model tự khám phá pattern suy nghĩ hiệu quả.
Bước 3: Rejection sampling. Sau RL, model sinh ra một loạt reasoning trace. Lọc ra trace đúng (final correct + reasoning hợp lý). Fine-tune lại model trên dataset này.
Bước 4: General-purpose RL. Mix reasoning data với general instruction-following data. Đảm bảo model vẫn trả lời được câu hỏi thường, không chỉ math/code.
DeepSeek R1-Zero (variant chỉ chạy RL không SFT) cũng hoạt động được nhưng output ít readable hơn (mix language, formatting kém). Cold-start SFT quan trọng cho UX.
Phần 3: “Aha moment” và self-correction
Một phát hiện thú vị từ R1 paper: trong quá trình RL, model tự phát triển khả năng self-correction. Ban đầu model train với “Aha, đợi đã, tôi tính sai”, hoặc “Để tôi kiểm tra lại bằng cách khác”.
Không ai dạy model làm vậy. Reward chỉ check final answer. Model học rằng: nếu phát hiện sai giữa chừng và sửa, xác suất final correct cao hơn -> reward cao hơn -> hành vi được củng cố.
Ví dụ trace thật từ R1 (paraphrase):
Câu hỏi: Tính 1234 × 5678
Reasoning:
1234 × 5678
= 1234 × 5000 + 1234 × 678
= 6,170,000 + ...
Đợi, để tôi tính 1234 × 678 cẩn thận hơn.
1234 × 678 = 1234 × 700 - 1234 × 22
= 863,800 - 27,148
= 836,652
Vậy 1234 × 5678 = 6,170,000 + 836,652 = 7,006,652
Hmm, để verify lại bằng cách khác:
1234 × 5678 ≈ 1234 × 5700 = 7,033,800 (gần)
ok không quá lệch.
Answer: 7,006,652
Hành vi “Hmm, để verify” emergent từ training, không hardcode.
Phần 4: o1 và Claude extended thinking
OpenAI o1 (và o1-mini) ra mắt là model reasoning đầu tiên public. API cho phép set reasoning_effort (low / medium / high).
response = client.chat.completions.create(
model="o1-mini",
messages=[{"role": "user", "content": "Solve: ..."}],
reasoning_effort="high" # nhiều thinking tokens hơn
)
OpenAI không expose thinking tokens cho user (lý do: tránh competitors học cách training). User chỉ thấy final answer. Hoá đơn tính tổng tokens (input + thinking + output).
Anthropic Claude (3.7 trở đi) có “extended thinking” mode:
response = anthropic.messages.create(
model="claude-3-7-sonnet-20250219",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
messages=[{"role": "user", "content": "..."}]
)
print(response.content[0].thinking) # Claude expose thinking
print(response.content[1].text) # Final answer
Anthropic expose thinking, lợi cho debug nhưng cũng làm copycat dễ hơn.
DeepSeek R1 hoàn toàn open: model weights, training data structure, code. Đây là lý do R1 quan trọng cho cộng đồng.
Phần 5: Khi nào dùng reasoning model
Reasoning model đắt (5-10x cost so với model thường) và chậm. Quy tắc dùng:
Reasoning model tốt cho:
- Math, science problems
- Code phức tạp (debug, algorithm design)
- Multi-step planning
- Logic puzzles
- Analysis cần precision cao
Reasoning model không cần thiết cho:
- Chat thông thường, casual Q&A
- Tóm tắt văn bản
- Translation
- Format conversion (JSON, CSV)
- Tasks có 1-2 step đơn giản
Khi không chắc: test cả hai trên benchmark của bạn. Nếu reasoning model không tăng accuracy đáng kể (>5%), dùng model thường để tiết kiệm.
Phần 6: Limitations và pitfall
Limitation 1: Overthinking đơn giản.
Hỏi reasoning model “2+2 = ?”, nó vẫn thinking 5-10 giây, sinh ra 200 tokens reasoning thừa rồi mới trả lời 4. Cost gấp 50 lần GPT-4o cho task này.
Fix: route logic ở application layer. Câu hỏi đơn giản -> GPT-4o-mini. Câu phức tạp -> o1 / R1.
Limitation 2: Hallucination trong reasoning.
Reasoning trace nhìn rất “hợp lý” nhưng có thể chứa step sai. Một số bước tính được model bịa số. Final answer sai dù reasoning trông “ổn”.
Đừng tin reasoning trace mù quáng. Verify final answer độc lập (chạy code, kiểm tra math).
Limitation 3: Domain narrow.
Reasoning model train chủ yếu trên math, code, science. Trên domain khác (creative writing, business strategy) không tốt hơn GPT-4o, đôi khi tệ hơn vì overthink.
Limitation 4: Không cải thiện common-sense.
Câu hỏi cần kiến thức ngoại lai (history fact, current events) reasoning không giúp. Model vẫn cần kiến thức từ training data hoặc retrieval (RAG).
Reasoning ≠ knowledge. Đừng confuse.
Pitfall: Fine-tune reasoning model như model thường.
Reasoning model fine-tune phải cẩn thận giữ reasoning behavior. Fine-tune bằng data short answer có thể “kill” reasoning ability.
Quy tắc: fine-tune reasoning model bằng data có long reasoning trace tương ứng. Hoặc fine-tune phần khác của model (LoRA trên specific layer), giữ reasoning intact.
Phần 7: Hands-on với DeepSeek R1
R1 weights open source trên HuggingFace. Distilled versions (R1-Distill-Llama-8B, R1-Distill-Qwen-7B) chạy được trên consumer hardware.
# Pull qua Ollama
ollama pull deepseek-r1:8b
# Chạy
ollama run deepseek-r1:8b "Tính 17 * 23 và giải thích cách tính"
Output sẽ có format:
<think>
17 * 23 = 17 * 20 + 17 * 3
= 340 + 51
= 391
Verify: 17 * 23 ≈ 17 * 25 = 425, hoặc 20 * 23 = 460, lệch ~70.
391 nằm giữa, hợp lý.
</think>
17 × 23 = 391
Cách tính: tách 23 = 20 + 3, dùng phân phối...
Phần <think> là reasoning. Một số API tự động hide, một số expose.
Để build app trên R1:
from openai import OpenAI
# R1 qua API DeepSeek hoặc serve local với vLLM
client = OpenAI(
base_url="https://api.deepseek.com",
api_key="your-key"
)
response = client.chat.completions.create(
model="deepseek-reasoner",
messages=[{"role": "user", "content": "Giải phương trình: x^2 - 5x + 6 = 0"}]
)
# Reasoning content + answer
print("Thinking:", response.choices[0].message.reasoning_content)
print("Answer:", response.choices[0].message.content)
Reasoning content có thể dài 1000-5000 tokens. Tính cost chú ý.
Cheatsheet
| Khái niệm | Bản chất |
|---|---|
| Chain-of-thought (CoT) | Viết bước trung gian trước khi answer |
| Reasoning model | Model được train để dùng test-time compute hiệu quả |
| Test-time compute | Tăng quality bằng cách “nghĩ” lâu hơn |
| RL với rule-based reward | Train bằng correctness signal, không cần human feedback |
| Cold-start SFT | Fine-tune ban đầu trên long reasoning examples |
| Self-correction emergent | Model tự học sửa lỗi trong quá trình RL |
| Reasoning effort | Tham số control bao nhiêu thinking tokens |
So sánh nhanh:
| Model | Open source | Expose thinking | Best at |
|---|---|---|---|
| OpenAI o1 | Không | Không | General reasoning |
| OpenAI o1-mini | Không | Không | Math, code (cheaper) |
| DeepSeek R1 | Có | Có | Math, code, mã nguồn mở |
| DeepSeek R1-Distill | Có | Có | Run trên consumer hardware |
| Claude extended thinking | Không | Có | General + tool use |
| QwQ | Có | Có | Math, được train từ Qwen |
Lời kết
Reasoning model là step change quan trọng nhất của LLM kể từ instruction tuning. Trước đây, quality LLM scale theo train compute. Bây giờ, quality cũng scale theo test-time compute. Hai trục độc lập.
Hiểu reasoning model giúp bạn:
- Chọn đúng model cho task (đừng overthink với question đơn giản)
- Build app routing logic (cheap model cho easy, expensive cho hard)
- Đánh giá research mới về test-time scaling
- Fine-tune reasoning model đúng cách
Hands-on cho bạn:
- Download DeepSeek-R1-Distill-Qwen-7B GGUF Q4, chạy local. Test với 5 bài toán AIME (hoặc tương đương). So sánh với Qwen-7B thường.
- Đọc DeepSeek R1 paper (arXiv 2501.12948), tập trung section 2 (Approach). Đây là tài liệu công khai chi tiết nhất về reasoning model training.
- Build router đơn giản: classify câu hỏi “easy” vs “hard” bằng GPT-4o-mini, route hard sang o1. Đo cost savings.
- Implement RL với rule-based reward đơn giản cho task math nhỏ (vd: addition 4 chữ số). Dùng TRL library. Cảm nhận quá trình RL.
Bài tiếp theo: Evaluation: MMLU, GSM8K, HumanEval, custom benchmark. Đây là bài cuối series, đóng gói câu hỏi sống còn: làm sao biết model A tốt hơn model B? Benchmark nào đáng tin, benchmark nào đã bị “contamination”, và làm sao build benchmark riêng cho use case của bạn.