Fine-tuning, RAG hay Prompt? Cách Tùy Biến LLM 2026

Posted on: 6/14/2026 1:18:03 AM

Prototype vừa chạy được, sếp ghé tai: "Mình fine-tune luôn cái model cho nó chuẩn nhỉ?". Đây là phản xạ phổ biến nhất — và cũng tốn kém nhất — trong các đội làm sản phẩm AI. Phần lớn vấn đề mà người ta định "fine-tune để giải quyết" thực ra được xử lý gọn hơn, rẻ hơn và an toàn hơn nhiều bằng prompt hoặc RAG. Fine-tuning là một con dao sắc, nhưng không phải vết cắt nào cũng cần đến nó.

Bài viết này dựng lại một khung quyết định rõ ràng cho năm 2026: chiếc thang Prompt → RAG → Fine-tune → Distill. Chúng ta sẽ tách bạch bản chất của từng cách, chỉ ra đâu là ranh giới thật sự để biết khi nào bước lên nấc thang tiếp theo, và vì sao "hybrid" — kết hợp truy xuất với fine-tune — mới là chuẩn mực của các hệ thống production hiện nay.

90%nhu cầu fine-tune trong 2026 chỉ cần đến LoRA, không cần full fine-tune
20–24×chi phí của nhồi long-context so với RAG/fine-tune ở quy mô lớn
65Btham số có thể fine-tune trên 1 GPU 48GB nhờ QLoRA 4-bit
75–80%bộ nhớ tiết kiệm khi dùng QLoRA so với LoRA 16-bit

Ba câu hỏi, ba con đường

Khi một mô hình ngôn ngữ chưa làm đúng ý bạn, gần như luôn rơi vào một trong ba nhóm nguyên nhân — và mỗi nhóm có một cách chữa khác nhau:

  • Mô hình chưa hiểu bạn muốn gì → đây là vấn đề chỉ dẫn. Chữa bằng prompting: diễn đạt lại, thêm ví dụ, ràng buộc định dạng.
  • Mô hình thiếu thông tin để trả lời → đây là vấn đề kiến thức. Chữa bằng RAG: nạp đúng tài liệu vào ngữ cảnh tại thời điểm chạy.
  • Mô hình hiểu và đủ thông tin, nhưng vẫn hành xử sai kiểu → đây là vấn đề hành vi: sai giọng điệu, sai định dạng cố hữu, hay quá chậm/quá đắt ở quy mô lớn. Đây mới là lúc fine-tuning tỏa sáng.

Sai lầm kinh điển là dùng nhầm thuốc: cố nhồi kiến thức vào trọng số bằng fine-tune (việc của RAG), hoặc cố ép hành vi nhất quán chỉ bằng prompt dài dằng dặc (việc của fine-tune). Phân loại đúng nguyên nhân trước khi chọn công cụ là một nửa của lời giải.

Bản chất khác nhau ở đâu?

Cả ba đều "tùy biến" mô hình, nhưng tác động lên những lớp hoàn toàn khác nhau của hệ thống:

Tiêu chíPromptingRAGFine-tuning
Thay đổi cái gìChỉ dẫn đầu vàoKiến thức nạp lúc chạyTrọng số mô hình (hành vi)
Cập nhật kiến thứcTức thìTức thì — chỉ đổi nguồnPhải huấn luyện lại
Trích dẫn nguồnKhôngCó — truy vết đượcKhông
Chi phí khởi tạoGần như 0Thấp – trung bìnhTrung bình – cao
Độ trễ khi chạyThấpCộng thêm bước truy xuấtThấp nhất (gọn ngữ cảnh)
Cần dữ liệu gán nhãnKhôngKhôngCó — và phải chất lượng
Hợp nhất khiLuôn thử đầu tiênKiến thức động, cần dẫn nguồnHành vi/định dạng/giọng điệu, độ trễ

Một phép so sánh dễ nhớ

Prompting là ra đề bài rõ ràng hơn cho nhân viên. RAG là đưa cho họ đúng cuốn cẩm nang để tra cứu khi làm. Fine-tuning là cho họ đi học một khóa đào tạo để thay đổi thói quen làm việc. Bạn không gửi người đi học nghề chỉ để họ biết số điện thoại mới của khách hàng — đó là việc của cẩm nang.

Chiếc thang quyết định

Quy tắc vận hành tốt nhất năm 2026 là leo thang theo thứ tự chi phí và độ phức tạp tăng dần. Chỉ bước lên nấc tiếp theo khi nấc hiện tại đã chạm trần — và bạn đo được điều đó, chứ không phải đoán.

flowchart TD
    A["Vấn đề cần giải quyết"] --> B{"Prompt tốt hơn
đã đủ chưa?"} B -->|"Đủ"| P["✅ Dừng ở Prompting
Rẻ nhất, nhanh nhất"] B -->|"Chưa"| C{"Thiếu kiến thức
hoặc dữ liệu mới?"} C -->|"Đúng"| R["RAG · Truy xuất tri thức"] C -->|"Không"| D{"Cần hành vi nhất quán,
định dạng chặt,
độ trễ/chi phí thấp?"} R --> D D -->|"Đúng"| F["Fine-tuning
LoRA / QLoRA"] D -->|"Chưa rõ"| RF["Kết hợp RAG + Fine-tune"] F --> DS{"Volume rất lớn,
chạy thật liên tục?"} RF --> DS DS -->|"Đúng"| DI["Distill → mô hình nhỏ
Rẻ & nhanh khi serve"] DS -->|"Không"| OP["Vận hành & đo lường liên tục"] classDef stop fill:#4CAF50,stroke:#fff,color:#fff; classDef act fill:#e94560,stroke:#fff,color:#fff; classDef cond fill:#f8f9fa,stroke:#e94560,color:#2c3e50; classDef dist fill:#2c3e50,stroke:#fff,color:#fff; class P,OP stop; class R,F,RF act; class B,C,D,DS cond; class DI dist;
Hình 1: Thang quyết định Prompt → RAG → Fine-tune → Distill. Leo từng nấc, đo lường trước khi lên cao hơn.

Nấc 1 — Prompting: nơi 70% bài toán kết thúc

Trước khi nghĩ tới GPU và tập dữ liệu, hãy vắt kiệt prompting. Mô hình frontier 2026 (Claude Opus 4.x, các dòng GPT-5.x, Gemini 3) đủ mạnh để xử lý phần lớn tác vụ chỉ với chỉ dẫn tốt. Bốn đòn bẩy đáng thử trước:

  • Few-shot examples: 3–5 ví dụ đầu vào/đầu ra chuẩn thường dạy được "khuôn" tốt hơn cả một đoạn mô tả dài.
  • Structured output: ràng buộc JSON Schema/grammar để ép định dạng — thứ mà nhiều người tưởng phải fine-tune mới làm được.
  • Phân rã & chỉ dẫn rõ vai trò: tách yêu cầu phức tạp thành các bước, nêu rõ tiêu chí thành công.
  • Context engineering: đưa đúng thông tin vào ngữ cảnh, đúng lượng, đúng thời điểm.

Nguyên tắc

Nếu bạn chưa thử nghiêm túc few-shot và structured output mà đã muốn fine-tune, gần như chắc chắn bạn đang đốt tiền. Prompting có chi phí khởi tạo gần bằng 0 và vòng lặp thử nghiệm tính bằng phút, không phải bằng ngày.

Nấc 2 — RAG: khi vấn đề là kiến thức

Khi mô hình trả lời sai vì không biết — dữ liệu nội bộ, tài liệu mới, thông tin thay đổi từng giờ — thì fine-tune là sai thuốc. Nhồi kiến thức vào trọng số vừa đắt, vừa "đóng băng" tại thời điểm train, lại không truy vết được nguồn. RAG (Retrieval-Augmented Generation) giải quyết tận gốc: nạp đúng đoạn tài liệu vào ngữ cảnh ngay lúc suy luận.

Chọn RAG khi: kiến thức lớn hoặc động; cần trích dẫn/nguồn gốc để tuân thủ, kiểm toán; quản trị dữ liệu đòi hỏi tách rời nguồn khỏi mô hình; hoặc bạn chưa có dữ liệu gán nhãn và cần ra mắt nhanh. Một huyền thoại cần dập tắt: cửa sổ ngữ cảnh 1M token không khai tử RAG. Nhồi cả kho tài liệu vào mỗi lượt gọi đắt hơn 20–24 lần so với truy xuất có chọn lọc ở quy mô lớn, và "context rot" khiến mô hình loãng tín hiệu khi ngữ cảnh phình to.

Nấc 3 — Fine-tuning: khi vấn đề là hành vi

Fine-tuning thật sự xuất sắc ở những thứ prompt và RAG chật vật: hành vi nhất quán (giọng thương hiệu, phong cách trả lời cố định), định dạng phi tiêu chuẩn mà prompt không ép nổi ổn định, độ trễ (gói toàn bộ "luật chơi" vào trọng số, ngữ cảnh gọn lại), và chi phí ở quy mô lớn (một mô hình nhỏ đã fine-tune có thể rẻ hơn nhiều lần so với gọi API frontier mỗi request).

LoRA & QLoRA — vì sao fine-tune đã rẻ đi

Thời "full fine-tune" cập nhật toàn bộ hàng tỷ tham số đã qua. Năm 2026, với 90% nhu cầu, lựa chọn đúng là LoRA (Low-Rank Adaptation): đóng băng trọng số gốc, chỉ chèn vào vài ma trận thấp hạng nhỏ xíu để học phần "delta" của hành vi. Số tham số phải huấn luyện rớt xuống còn một vài phần trăm.

flowchart LR
    X(["Đầu vào x"]) --> W["Trọng số gốc W
❄️ ĐÓNG BĂNG"] X --> A["Ma trận A
(r × d) · nhỏ"] A --> Bm["Ma trận B
(d × r) · nhỏ"] W --> S((" + ")) Bm --> S S --> Y(["h = Wx + B·A·x"]) classDef frozen fill:#2c3e50,stroke:#fff,color:#fff; classDef train fill:#e94560,stroke:#fff,color:#fff; classDef io fill:#f8f9fa,stroke:#e94560,color:#2c3e50; class W frozen; class A,Bm train; class X,Y,S io;
Hình 2: LoRA chỉ huấn luyện hai ma trận thấp hạng A và B (màu hồng), giữ nguyên trọng số gốc W. Khi serve, có thể gộp adapter vào W hoặc nạp/đổi adapter nóng.

QLoRA đẩy hiệu quả đi xa hơn: nạp mô hình gốc ở dạng lượng tử hóa 4-bit rồi mới gắn adapter LoRA lên trên. Kết quả: tiết kiệm 75–80% bộ nhớ so với LoRA 16-bit, đủ để fine-tune một mô hình 65 tỷ tham số trên đúng một GPU 48GB, mà chất lượng nhiều trường hợp ngang ngửa full fine-tune. Đây chính là lý do fine-tuning từ "đặc quyền của big tech" trở thành thứ một đội nhỏ cũng làm được.

SFT hay RFT?

Có hai trường phái huấn luyện cần phân biệt:

Phương phápCách họcMạnh ởLưu ý
SFT (Supervised Fine-Tuning)Bắt chước cặp đầu vào/đầu ra mẫuĐịnh dạng, giọng điệu, phong cáchĐơn giản, rẻ, đủ cho phần lớn nhu cầu
RFT (Reinforcement Fine-Tuning)Thưởng cho kết quả kiểm chứng được là đúngSuy luận, toán, code — nơi đúng/sai rạch ròiPhức tạp hơn; chỉ đáng khi tính đúng đắn đo được

Đừng mặc định RFT "xịn hơn". Với đa số tác vụ định dạng và phong cách, SFT vẫn đơn giản, rẻ và đủ tốt. RFT chỉ tỏa sáng khi bạn có một hàm thưởng kiểm chứng được (test pass, đáp án đúng) — gắn liền với xu hướng RLVR cho tác vụ agentic.

Một ví dụ cấu hình LoRA tối giản với thư viện PEFT — tinh thần là rất ít tham số phải học:

from peft import LoraConfig, get_peft_model

config = LoraConfig(
    r=16,                                   # hạng adapter: cao hơn = học được nhiều hơn
    lora_alpha=32,                          # hệ số scale
    target_modules=["q_proj", "v_proj"],    # chỉ chèn vào lớp attention
    lora_dropout=0.05,
    task_type="CAUSAL_LM",
)
model = get_peft_model(base_model, config)
model.print_trainable_parameters()
# -> trainable params: ~0.2% tổng số tham số

Sự thật 2026: Hybrid mới là chuẩn

Câu hỏi "fine-tune hay RAG" thực ra là một câu hỏi sai. Hệ thống production tốt năm 2026 gần như luôn dùng cả hai, mỗi thứ một việc:

Công thức ROI cao nhất

Một adapter LoRA/QLoRA mỏng trên nền một base model mạnh để định hình hành vi, kết hợp với RAG để cấp kiến thức — chứ không phải thay thế nhau. Retrieval lo phần sự thật và cập nhật; fine-tune lo phần giọng điệu, định dạng và quyết định.

Và một sự thật về chi phí mà nhiều đội bỏ qua: tiền không nằm ở compute để train. Chi phí thật của fine-tuning là đánh giá (eval), làm sạch & tuyển chọn dữ liệu, và vòng đời sở hữu mô hình — phải retrain khi base model nâng cấp, phải canh chừng drift, phải đo regression. Một LoRA train trong 2 giờ nhưng kéo theo cái đuôi vận hành dài hàng tháng.

Lộ trình triển khai thực tế

Một dự án AI khỏe mạnh nên đi theo trình tự này, dừng lại ngay khi đạt chất lượng mục tiêu:

Bước 1 · Prompt
Xây bộ eval trước. Vắt kiệt few-shot, structured output, context engineering. Đo baseline. Phần lớn dự án nên dừng tại đây.
Bước 2 · RAG
Nếu lỗi đến từ thiếu kiến thức hoặc dữ liệu động → thêm truy xuất. Đo lại trên cùng bộ eval. Đây thường là nấc cuối cho ứng dụng hỏi-đáp tài liệu.
Bước 3 · Fine-tune (LoRA)
Chỉ khi prompt + RAG vẫn không ép được hành vi/định dạng nhất quán, hoặc độ trễ/chi phí buộc phải gói luật vào trọng số. Bắt đầu bằng LoRA/QLoRA trên base mạnh, vẫn giữ RAG.
Bước 4 · Distill
Khi volume thật sự lớn và bạn cần rẻ + nhanh khi serve: chưng cất tri thức từ mô hình lớn xuống một mô hình nhỏ chuyên biệt. Đây là tối ưu vận hành, không phải điểm khởi đầu.

Sai lầm phổ biến

Bốn cái bẫy hay gặp

  • Fine-tune để nhồi kiến thức. Đó là việc của RAG. Trọng số là nơi tồi để lưu sự thật hay thay đổi và không truy vết được nguồn.
  • Bỏ qua eval. Không có bộ đánh giá khách quan, bạn không biết fine-tune giúp ích hay làm hỏng (catastrophic forgetting) — chỉ "cảm thấy" tốt hơn.
  • Nhảy thẳng tới fine-tune. Bỏ qua hai nấc rẻ tiền phía dưới là sai lầm tốn kém nhất, cả về tiền lẫn thời gian.
  • Fine-tune ngay trên model frontier khi một mô hình nhỏ là đủ. Ở quy mô lớn, một SLM đã fine-tune thường vừa rẻ vừa nhanh hơn nhiều.

Kết luận

"Fine-tune hay không" không phải câu hỏi đúng. Câu hỏi đúng là: vấn đề của tôi nằm ở chỉ dẫn, ở kiến thức, hay ở hành vi? Trả lời được điều đó, bạn sẽ tự biết nên dừng ở nấc nào trên chiếc thang Prompt → RAG → Fine-tune → Distill.

Quy tắc vàng để mang về

  • Luôn bắt đầu từ nấc rẻ nhất và đo lường trước khi leo cao hơn.
  • RAG cho kiến thức, fine-tune cho hành vi — và hệ thống tốt thường dùng cả hai.
  • Với 90% trường hợp, LoRA/QLoRA trên base model mạnh là đủ; để dành full fine-tune cho ngoại lệ.
  • Chi phí thật của fine-tuning là eval + dữ liệu + vòng đời, không phải compute. Hãy tính cả cái đuôi đó trước khi bắt đầu.

Bắt đầu hôm nay rất đơn giản: dựng một bộ eval nhỏ cho bài toán của bạn, ép prompting tới giới hạn, rồi chỉ leo lên nấc tiếp theo khi con số — chứ không phải cảm giác — bảo bạn rằng đã đến lúc.


Nguồn tham khảo: