
Kỹ thuật suy luận LLM: Chain-of-Thought, Tree-of-Thought và Self-Consistency
Các mô hình ngôn ngữ lớn (LLM) thường gặp khó khăn với các tác vụ suy luận phức tạp, toán học hoặc logic nhiều bước. Ba kỹ thuật prompt engineering cốt lõi — Chain-of-Thought (CoT), Tree-of-Thought (ToT) và Self-Consistency — đã được chứng minh giúp cải thiện đáng kể khả năng suy luận của LLM mà không cần fine-tuning, chỉ bằng cách thay đổi cáchprompt.
Các kỹ thuật này tận dụng khả năng “system 2 thinking” (suy luận chậm, có hệ thống) của LLM bằng cách ép mô hình trình bày quá trình suy nghĩ từng bước thay vì đưa ra câu trả lời ngay lập tức.
Chain-of-Thought (CoT): Suy luận từng bước
Chain-of-Thought (Wei et al., 2022) khuyến khích LLM sinh ra chuỗi suy luận trung gian trước khi đưa ra câu trả lời cuối cùng. Thay vì prompt "Giải bài toán này", bạn dùng "Hãy suy luận từng bước rồi đưa ra kết quả" hoặc cung cấp few-shot examples có reasoning trace.
Ví dụ CoT few-shot:
Q: Roger có 5 quả bóng tennis. Anh ấy mua 2 hộp bóng tennis, mỗi hộp 3 quả. Hỏi Roger có bao nhiêu quả bóng? A: Roger bắt đầu với 5 quả. 2 hộp × 3 quả = 6 quả mới. 5 + 6 = 11 quả. #### 11 Q: Căn tin có 23 ghế. 18 ghế bị chiếm. Còn bao nhiêu ghế trống? A: Tổng 23 ghế. 18 ghế bị chiếm. 23 - 18 = 5 ghế trống. #### 5
Ưu điểm: đơn giản, không tăng chi phí tính toán đáng kể, hiệu quả tốt trên GSM8K, SVAMP, AQuA. Nhược điểm: chỉ khám phá một đường suy luận duy nhất — nếu bước đầu sai, toàn bộ chuỗi sai.
Tree-of-Thought (ToT): Tìm kiếm trên không gian suy luận
Tree-of-Thought (Yao et al., 2023) mở rộng CoT bằng cách cho phép LLM khám phá nhiều nhánh suy luận song song, đánh giá từng nhánh, và quay lui (backtrack) khi cần. ToT mô hình hóa suy luận như tìm kiếm trên cây: mỗi node là một trạng thái suy luận, edges là các bước suy luận.
Quy trình ToT:
- Decompose: Chia vấn đề thành các bước suy luận nhỏ (thoughts).
- Generate: LLM sinh nhiều thought candidates cho mỗi bước.
- Evaluate: LLM (hoặc value function) chấm điểm từng thought (ví dụ: sure/likely/impossible).
- Search: Dùng BFS/DFS để tìm đường dẫn từ root đến solution, prune nhánh kém.
ToT vượt trội CoT trên các bài toán cần lập kế hoạch, tìm kiếm (Game of 24, Creative Writing, Crosswords). Chi phí: nhiều LLM calls hơn (thường 10-100x CoT).
Self-Consistency: Bỏ phiếu đa số trên nhiều reasoning paths
Self-Consistency (Wang et al., 2022) quan sát rằng: CoT đơn lẻ có thể sai do ngẫu nhiên sampling, nhưng nếu sample nhiều reasoning paths độc lập và lấy câu trả lời xuất hiện nhiều nhất (majority vote), độ chính xác tăng mạnh.
Quy trình:
- Prompt CoT với
temperature > 0(ví dụ 0.7). - Sample
kreasoning paths (thường k=10-40). - Trích xuất câu trả lời cuối từ mỗi path.
- Chọn câu trả lời có tần suất cao nhất (majority vote).
Kết quả: Self-Consistency + CoT đạt 94% accuracy trên GSM8K (vs 74% CoT greedy, 81% CoT sample once). Chi phí: k lần LLM call, nhưng có thể song song hóa.
So sánh và khi nào dùng kỹ thuật nào
| Kỹ thuật | Chi phí LLM calls | Phù hợp cho | Độ phức tạp implement |
|---|---|---|---|
| CoT (greedy) | 1x | Toán học, logic đơn giản, few-shot có sẵn | Thấp |
| CoT + Self-Consistency | k× (10-40) | Toán học, reasoning có đáp án duy nhất, cần độ chính xác cao | Trung bình |
| Tree-of-Thought | 10-100x | Lập kế hoạch, tìm kiếm, creative tasks, bài toán có nhiều đường giải | Cao |
Kết hợp thực tế: CoT + Self-Consistency cho production
Trong production, phương pháp cân bằng chi phí/hiệu quả nhất thường là CoT + Self-Consistency (k=10-20). Code Python đơn giản:
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI()
async def cot_self_consistency(question, k=20, temp=0.7):
prompt = f"""{question}
Hãy suy luận từng bước rồi đưa ra câu trả lời cuối cùng."""
async def single_call():
resp = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=temp,
max_tokens=512
)
return resp.choices[0].message.content
# Chạy song song k calls
responses = await asyncio.gather(*[single_call() for _ in range(k)])
# Trích xuất câu trả số (giả sử format: #### NUMBER)
import re
answers = []
for r in responses:
match = re.search(r'####s*(d+)', r)
if match:
answers.append(int(match.group(1)))
# Majority vote
from collections import Counter
return Counter(answers).most_common(1)[0][0] if answers else None
Mở rộng: Program-of-Thoughts, ReAct, Reflexion
Các biến thể mới hơn:
- Program-of-Thoughts (PoT): LLM sinh code Python để giải bài toán thay vì ngôn ngữ tự nhiên — chính xác 100% trên GSM8K Hard.
- ReAct (Reasoning + Acting): Kết hợp reasoning với tool use (search, calculator, API) — phù hợp cho agent thực tế.
- Reflexion: LLM tự phản biện kết quả sai, sinh feedback, thử lại — cải thiện trên HumanEval, MBPP.
Các kỹ thuật này có thể kết hợp: ToT dùng PoT làm thought generator, ReAct dùng Self-Consistency cho action selection.
Tóm tắt
Chain-of-Thought, Tree-of-Thought và Self-Consistency là ba trụ cột của prompt engineering cho suy luận LLM. CoT là nền tảng đơn giản; Self-Consistency tăng độ tin cậy bằng bỏ phiếu; ToT cho phép tìm kiếm không gian giải pháp phức tạp. Chọn kỹ thuật phù hợp với độ phức tạp bài toán, ngân sách LLM calls và yêu cầu độ chính xác.
Chain-of-Thought Paper (arXiv:2201.11903) | Tree-of-Thought Paper (arXiv:2305.10601) | Self-Consistency Paper (arXiv:2203.11171)
