Kỹ thuật suy luận LLM: Chain-of-Thought, Tree-of-Thought và Self-Consistency

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.

Sơ đồ so sánh ba kỹ thuật suy luận LLM: Chain-of-Thought đường thẳng, Tree-of-Thought cây nhánh, Self-Consistency nhiều đường song song bỏ phiếu

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:

  1. Decompose: Chia vấn đề thành các bước suy luận nhỏ (thoughts).
  2. Generate: LLM sinh nhiều thought candidates cho mỗi bước.
  3. Evaluate: LLM (hoặc value function) chấm điểm từng thought (ví dụ: sure/likely/impossible).
  4. 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).

Minh họa ToT search tree cho bài Game of 24 với các node thought, edge step và pruning nhánh impossible

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:

  1. Prompt CoT với temperature > 0 (ví dụ 0.7).
  2. Sample k reasoning paths (thường k=10-40).
  3. Trích xuất câu trả lời cuối từ mỗi path.
  4. 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

Biểu đồ độ chính xác GSM8K: CoT greedy 74%, CoT sample-once 81%, CoT+SC k=10 89%, CoT+SC k=40 94%

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)

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Ollama: Chạy LLM cục bộ không cần GPU đắt tiền

Bạn muốn chạy mô hình ngôn ngữ lớn (LLM) ngay trên laptop cá nhân mà không cần đầu tư card đồ họa đắt tiền? Ollama là giải pháp hoàn hảo…

Xem thêm
Sơ đồ đồ thị LangGraph với các node và edge điều khiển luồng Agent

LangGraph: Xây dựng AI Agent stateful với graph-based workflow

LangGraph là gì? LangGraph là framework của LangChain cho phép xây dựng AI Agent có trạng thái (stateful) dựa trên đồ thị (graph). Khác với Chain đơn giản thực thi…

Xem thêm

AI Observability: Giám sát, debug và tối ưu hệ thống AI production

Hệ thống AI đưa vào production khác biệt hoàn toàn so với thử nghiệm trong lab. Trong lab, bạn đo lường accuracy, loss, perplexity trên tập test cố định. Trong…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất