Extended Thinking Claude — Tăng Cường Suy Luận Cho Bài Toán Phức Tạp
Extended Thinking Claude — Tăng Cường Suy Luận Cho Bài Toán Phức Tạp
Extended Thinking là tính năng nâng cao của Claude API, cho phép Claude thực hiện suy luận sâu và có hệ thống trước khi đưa ra câu trả lời cuối cùng. Thay vì trả lời ngay, Claude sẽ "suy nghĩ" qua các bước trung gian — tương tự như cách một chuyên gia phân tích vấn đề trước khi đưa ra kết luận.
Đây là tính năng đặc biệt hữu ích cho các bài toán kinh doanh phức tạp mà doanh nghiệp SME Việt Nam thường gặp: phân tích chiến lược, lập kế hoạch tài chính, giải quyết vấn đề kỹ thuật nhiều bước, hay đưa ra quyết định dựa trên nhiều yếu tố.
thinking: {type: "adaptive"}) với effort parameter thay vì manual thinking mode. Chế độ thinking: {type: "enabled", budget_tokens: N} đã được deprecated trên các model này.
Các model hỗ trợ Extended Thinking
Extended Thinking được hỗ trợ trên các model sau:
- Claude Opus 4.6 (
claude-opus-4-6) — khuyến nghị dùng adaptive thinking - Claude Opus 4.5 (
claude-opus-4-5-20251101) - Claude Opus 4.1 (
claude-opus-4-1-20250805) - Claude Opus 4 (
claude-opus-4-20250514) - Claude Sonnet 4.6 (
claude-sonnet-4-6) — khuyến nghị dùng adaptive thinking - Claude Sonnet 4.5 (
claude-sonnet-4-5-20250929) - Claude Sonnet 4 (
claude-sonnet-4-20250514) - Claude Sonnet 3.7 (
claude-3-7-sonnet-20250219) — deprecated - Claude Haiku 4.5 (
claude-haiku-4-5-20251001)
Cách Extended Thinking hoạt động
Khi bật Extended Thinking, Claude tạo ra các thinking content blocks chứa quá trình suy luận nội tâm. API response bao gồm thinking blocks theo sau là text blocks:
{
"content": [
{
"type": "thinking",
"thinking": "Hãy để tôi phân tích vấn đề này từng bước...",
"signature": "WaUjzkypQ2mUEVM36O2TxuC06KN8xyfbJwyem2dw3URve..."
},
{
"type": "text",
"text": "Dựa trên phân tích của tôi..."
}
]
}
Cách sử dụng cơ bản
Thêm object thinking với type: "enabled" và tham số budget_tokens:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
messages=[
{
"role": "user",
"content": "Phân tích chiến lược mở rộng thị trường cho startup B2B SaaS tại Việt Nam. "
"Xem xét các yếu tố: thị trường mục tiêu, kênh phân phối, định giá và cạnh tranh.",
}
],
)
# Response chứa thinking blocks và text blocks
for block in response.content:
if block.type == "thinking":
print(f"\n[Quá trình suy luận]: {block.thinking[:200]}...")
elif block.type == "text":
print(f"\n[Câu trả lời]: {block.text}")
Các tham số quan trọng
type: Đặt là"enabled"cho manual thinking (hoặc"adaptive"cho Opus 4.6 và Sonnet 4.6)budget_tokens: Số token tối đa dành cho quá trình suy luận nội tâm. Claude có thể không dùng hết budget, đặc biệt với giá trị trên 32k. Lưu ý:budget_tokensphải nhỏ hơnmax_tokens.
Summarized Thinking — Tóm tắt quá trình suy luận
Các model Claude 4 trả về tóm tắt của quá trình thinking đầy đủ theo mặc định. Một số điểm cần biết:
- Bạn bị tính phí cho toàn bộ token thinking, không chỉ phần tóm tắt hiển thị
- Số token output được tính sẽ không khớp với số token hiển thị
- Vài dòng đầu tiên verbose hơn để thuận tiện cho prompt engineering
- Claude Sonnet 3.7 trả về toàn bộ thinking output (không tóm tắt)
- Nếu cần toàn bộ thinking trên model Claude 4, hãy liên hệ sales của Anthropic
Dùng display: "omitted" để tăng tốc độ
Trường display kiểm soát cách thinking được trả về:
"summarized"(mặc định): Thinking blocks chứa văn bản tóm tắt"omitted": Thinking blocks trả về với trườngthinkingrỗng;signaturevẫn được giữ để đảm bảo liên tục trong multi-turn
Dùng display: "omitted" khi bạn muốn tăng tốc độ streaming (faster time-to-first-text-token) mà không cần xem quá trình suy luận. Lưu ý: bạn vẫn bị tính phí cho toàn bộ thinking tokens.
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000,
"display": "omitted", # Ẩn thinking, chỉ lấy kết quả
},
messages=[
{"role": "user", "content": "Tính 27 × 453 và giải thích cách tính?"},
],
)
for block in response.content:
if block.type == "thinking":
print("Thinking: [đã ẩn]")
elif block.type == "text":
print(f"Kết quả: {block.text}")
Streaming Extended Thinking
Bạn có thể stream Extended Thinking qua server-sent events (SSE) để hiển thị kết quả từng phần cho người dùng:
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
messages=[
{
"role": "user",
"content": "Phân tích 5 rủi ro chính khi triển khai AI Agent trong doanh nghiệp SME?",
}
],
) as stream:
thinking_started = False
response_started = False
for event in stream:
if event.type == "content_block_start":
print(f"\n--- Bắt đầu block {event.content_block.type} ---")
thinking_started = False
response_started = False
elif event.type == "content_block_delta":
if event.delta.type == "thinking_delta":
if not thinking_started:
print("💭 Đang suy luận: ", end="", flush=True)
thinking_started = True
print(event.delta.thinking, end="", flush=True)
elif event.delta.type == "text_delta":
if not response_started:
print("✅ Câu trả lời: ", end="", flush=True)
response_started = True
print(event.delta.text, end="", flush=True)
elif event.type == "content_block_stop":
print("\n--- Block hoàn tất ---")
Extended Thinking với Tool Use
Extended Thinking hoạt động kết hợp với Tool Use, cho phép Claude suy luận qua việc lựa chọn tool và xử lý kết quả.
Giới hạn quan trọng khi dùng với Tool Use
- Tool choice: Chỉ hỗ trợ
tool_choice: {"type": "auto"}(mặc định) hoặc{"type": "none"}. Dùng{"type": "any"}hoặc ép buộc tool cụ thể sẽ gây lỗi. - Giữ nguyên thinking blocks: Phải truyền lại thinking blocks không thay đổi trong các vòng lặp tool use để đảm bảo liên tục suy luận.
weather_tool = {
"name": "get_weather",
"description": "Lấy thời tiết hiện tại cho một địa điểm",
"input_schema": {
"type": "object",
"properties": {"location": {"type": "string", "description": "Tên thành phố"}},
"required": ["location"],
},
}
# Request đầu tiên — Claude suy luận và gọi tool
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
tools=[weather_tool],
messages=[{"role": "user", "content": "Thời tiết Hà Nội hôm nay thế nào?"}],
)
# Lấy thinking và tool_use blocks
thinking_block = next(
(block for block in response.content if block.type == "thinking"), None
)
tool_use_block = next(
(block for block in response.content if block.type == "tool_use"), None
)
# Giả lập gọi weather API
weather_data = {"nhiet_do": 28, "trang_thai": "Nắng nhẹ"}
# Request tiếp theo — PHẢI truyền lại thinking_block
continuation = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
tools=[weather_tool],
messages=[
{"role": "user", "content": "Thời tiết Hà Nội hôm nay thế nào?"},
# Bắt buộc phải truyền thinking_block cùng tool_use_block
{"role": "assistant", "content": [thinking_block, tool_use_block]},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": tool_use_block.id,
"content": f"Nhiệt độ: {weather_data['nhiet_do']}°C, {weather_data['trang_thai']}",
}
],
},
],
)
Interleaved Thinking — Suy luận giữa các Tool Call
Với Interleaved Thinking, Claude có thể suy luận giữa các tool call, cho phép lý giải kết quả trung gian trước khi quyết định bước tiếp theo:
Không có Interleaved Thinking:
User: "Tính tổng doanh thu từ 150 đơn hàng x 500k/đơn?"
Claude: [suy luận] "Tính 150 × 500k..." → [gọi calculator]
User: [kết quả: 75.000.000đ]
Claude: [gọi database_query] (không có suy luận thêm)
User: [kết quả DB]
Claude: [trả lời cuối] "Tổng doanh thu là 75 triệu đồng..."
Có Interleaved Thinking:
User: "Tính tổng doanh thu từ 150 đơn hàng x 500k/đơn?"
Claude: [suy luận] "Tính 150 × 500k..." → [gọi calculator]
User: [kết quả: 75.000.000đ]
Claude: [suy luận] "Được 75tr. Giờ cần kiểm tra DB để đối chiếu..." → [gọi database_query]
User: [kết quả DB: 72.000.000đ]
Claude: [suy luận] "75tr vs 72tr — có chênh lệch 4%, cần giải thích..."
[trả lời] "Tổng doanh thu tính toán là 75 triệu, DB ghi nhận 72 triệu (chênh lệch 4%...)..."
Hỗ trợ Interleaved Thinking theo model:
- Claude Opus 4.6: Tự động bật với adaptive thinking
- Claude Sonnet 4.6: Tự động bật với adaptive thinking (khuyến nghị); manual mode với beta header
interleaved-thinking-2025-05-14đã deprecated - Các model Claude 4 khác: Thêm beta header
interleaved-thinking-2025-05-14
Extended Thinking với Prompt Caching
Khi kết hợp Extended Thinking với Prompt Caching, có một số điểm quan trọng cần lưu ý:
- Thinking blocks từ các turn trước bị xóa khỏi context (không chiếm context window), nhưng khi đọc từ cache trong tool use, chúng vẫn tính là input tokens.
- Thay đổi thinking parameters (bật/tắt hoặc thay đổi budget) sẽ invalidate message cache breakpoints.
- System prompt cache KHÔNG bị ảnh hưởng dù thay đổi thinking parameters.
import anthropic
client = anthropic.Anthropic()
# System prompt với cache — sẽ không bị invalidate khi đổi budget
system_prompt = [
{
"type": "text",
"text": "Bạn là chuyên gia phân tích kinh doanh cho doanh nghiệp SME Việt Nam.",
},
{
"type": "text",
"text": "... [nội dung hướng dẫn dài]...",
"cache_control": {"type": "ephemeral"} # Cache system prompt
},
]
# Request 1 — thiết lập cache
response1 = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=20000,
thinking={"type": "enabled", "budget_tokens": 4000},
system=system_prompt,
messages=[{"role": "user", "content": "Phân tích thị trường bán lẻ online Việt Nam 2026?"}],
)
# Request 2 — đổi budget (system prompt vẫn cache, messages miss cache)
response2 = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=20000,
thinking={"type": "enabled", "budget_tokens": 8000}, # Đổi budget
system=system_prompt, # Vẫn được cache
messages=[
{"role": "user", "content": "Phân tích thị trường bán lẻ online Việt Nam 2026?"},
{"role": "assistant", "content": response1.content},
{"role": "user", "content": "Đề xuất chiến lược cho SME trong lĩnh vực này?"},
],
)
Lưu ý về Zero Data Retention
Extended Thinking đủ điều kiện cho Zero Data Retention (ZDR). Khi tổ chức của bạn có thỏa thuận ZDR với Anthropic, dữ liệu sẽ không được lưu trữ sau khi API trả về response.
Xem đầy đủ thông tin về Claude tại trang Claude Anthropic trên Agentwork.vn. Tìm hiểu thêm về Tool Use API để kết hợp với Extended Thinking trong quy trình agentic. Khám phá Prompt Engineering để tối ưu hóa kết quả với thinking. Xem thêm các nền tảng AI hàng đầu cho doanh nghiệp.
Đoàn Đình Tỉnh
admin