Chiến Lược Tối Ưu LLM: Prompt Flow, RAG và Fine-Tuning — Từ Bản Chất Đến Thực Chiến
Agenda
Thời gian đọc ước tính: ~20 phút
Sau bài này, bạn sẽ:
- Nắm vững các kỹ thuật Prompt Engineering cốt lõi: Zero-shot, Few-shot, Chain-of-Thought, ReAct
- Giải thích được sự khác biệt cốt lõi giữa Prompt Flow, RAG và Fine-tuning
- Thiết kế được kiến trúc RAG pipeline cơ bản cho một dự án thực tế
- Phân biệt được khi nào dùng phương pháp nào — và tại sao không phải lúc nào cũng cần Fine-tuning
- Áp dụng được Decision Tree để ra quyết định kỹ thuật trong dự án thực
Yêu cầu đầu vào (Prerequisites):
- Biết LLM (Large Language Model) là gì ở mức khái niệm cơ bản
- Đã từng dùng ChatGPT hoặc API của OpenAI/Gemini ít nhất một lần
Vấn đề & Tại sao cần 3 phương pháp này?
Nỗi đau của doanh nghiệp khi dùng Base LLM
Khi một công ty triển khai ChatGPT hay Gemini vào sản phẩm, họ gặp ngay 3 vấn đề không thể bỏ qua:
- Hallucination (Ảo giác): Model tự tin bịa đặt thông tin — nguy hiểm với bài toán pháp lý, y tế, tài chính.
- Knowledge Cutoff (Kiến thức l ỗi thời): Model mù tịt về sự kiện xảy ra sau ngày training. Hỏi giá cổ phiếu hôm nay? Không biết.
- Lack of Context (Thiếu ngữ cảnh nội bộ): Model không biết quy trình, văn hóa, dữ liệu bảo mật của riêng doanh nghiệp bạn.
Giải pháp — Bộ ba công cụ can thiệp
LLM giống như một Thực tập sinh siêu thông minh nhưng mới ra trường:
- Cần quy trình làm việc rõ ràng từng bước → Prompt Flow
- Cần quyền truy cập vào Wiki/Tài liệu nội bộ để tra cứu → RAG
- Cần "Đào tạo" nghiệp vụ & Văn hóa doanh nghiệp 3 tháng → Fine-Tuning
Phần 1: Kỹ Thuật Prompt Engineering — Tầng Nền Tảng
Định nghĩa kỹ thuật
Prompt Engineering là nghệ thuật thiết kế đầu vào (input) cho LLM — bao gồm cấu trúc câu hỏi, ví dụ minh họa, và hướng dẫn định dạng — nhằm bộc lộ tối đa năng lực tiềm ẩn của mô hình mà không thay đổi bất kỳ trọng số (weight) nào.
LLM không thay đổi — cách hỏi thay đổi chất lượng output hoàn toàn. Đây là lớp can thiệp chi phí thấp nhất, triển khai nhanh nhất, và là điểm khởi đầu bắt buộc trước khi cân nhắc RAG hay Fine-tuning.
Các kỹ thuật cốt lõi
1. Zero-shot Prompting
Hỏi thẳng mà không cung cấp ví dụ mẫu. Phù hợp với tác vụ phổ quát mà LLM đã được huấn luyện đủ dữ liệu từ pre-training.
Prompt: "Phân loại cảm xúc: Positive, Negative, hay Neutral?
Câu: 'Sản phẩm giao đúng hẹn nhưng đóng gói bị móp.'"
Output: Negative
Giới hạn: Với tác vụ đặc thù (output JSON theo schema riêng, phân loại theo tiêu chí nội bộ), LLM dễ tự diễn giải sai yêu cầu do thiếu ngữ cảnh.
2. Few-shot Prompting
Cung cấp 3–5 cặp ví dụ (Input → Output) trước câu hỏi thực. LLM học nhận diện pattern từ ví dụ thay vì từ mô tả trừu tượng.
Prompt:
"Câu 1: 'Giao hàng nhanh, đúng mô tả.' → Positive
Câu 2: 'Hàng bị lỗi, hỗ trợ phản hồi chậm.' → Negative
Câu 3: 'Giao đúng hẹn nhưng đóng gói bị móp.' → ?"
Output: Negative (với độ chính xác cao hơn đáng kể)
Few-shot dùng ví dụ trong context window — hiệu quả tức thì nhưng tốn token mỗi lần gọi API. Fine-tuning "đốt" ví dụ vào trọng số model — chi phí ban đầu cao nhưng prompt về sau ngắn hơn. Đây là trade-off cốt lõi giữa hai kỹ thuật.
3. Chain-of-Thought (CoT) Prompting
Yêu cầu LLM "nghĩ to" từng bước trước khi đưa ra kết luận. Kỹ thuật này khai thác khả năng suy luận (reasoning) tiềm ẩn trong các LLM đủ lớn (≥70B parameters).
// Prompt thông thường — dễ sai
"Roger có 5 quả bóng. Mua thêm 2 hộp, mỗi hộp 3 quả. Tổng là?"
→ Output: "5 quả" ✗
// Prompt CoT — hướng dẫn suy luận từng bước
"Roger có 5 quả bóng. Mua thêm 2 hộp, mỗi hộp 3 quả.
Hãy suy nghĩ từng bước trước khi trả lời. Tổng là?"
→ "2 hộp × 3 = 6 quả mới. 5 + 6 = 11 quả." ✓
CoT được giới thiệu trong paper "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models" (Wei et al., Google Brain, 2022). Kỹ thuật chỉ hiệu quả với model đủ lớn — Small LLM (<7B) không có đủ capacity để "nghĩ to".
4. ReAct (Reason + Act)
ReAct là kỹ thuật kết hợp suy luận (Reasoning) và hành động (Acting) theo vòng lặp: LLM suy nghĩ → gọi tool → quan sát kết quả → suy nghĩ tiếp.
Thought: Tôi cần tỷ giá USD/VND hôm nay để tính.
Action: search("tỷ giá USD VND 05/05/2026")
Observation: 1 USD = 25,450 VND (nguồn: SBV)
Thought: Đã có dữ liệu. Tính toán được rồi.
Action: calculate(1500 * 25450)
Observation: 38,175,000
Answer: 1,500 USD = 38,175,000 VND
ReAct là nền tảng kỹ thuật của AI Agent. Vòng lặp Thought → Action → Observation chính là cơ chế mà Agent dùng để tự điều hướng qua bài toán phức tạp, không cần pipeline cứng.
Lộ trình tiến hóa: Từ Prompt đơn đến Hệ thống
Phân tích Trade-off
| Kỹ thuật | Chi phí Token | Hiệu quả tác vụ phức tạp | Yêu cầu model |
|---|---|---|---|
| Zero-shot | Thấp nhất | Thấp | Bất kỳ |
| Few-shot | Trung bình | Trung bình–Cao | Bất kỳ |
| Chain-of-Thought | Cao (output dài) | Cao | ≥70B params |
| ReAct | Cao nhất | Rất cao (đa bước) | ≥70B params |
Nguyên tắc áp dụng: Luôn thử Zero-shot trước. Nếu output không đạt, leo thang lên Few-shot → CoT → ReAct theo thứ tự tăng dần độ phức tạp và chi phí.
Phần 2: Prompt Flow
Làm rõ thuật ngữ: 3 tầng kiến trúc
"Prompt Flow" trong bài không phải là sản phẩm Microsoft Prompt Flow, mà là khái niệm kỹ thuật chỉ cách xây dựng pipeline LLM theo 3 tầng. Sản phẩm Microsoft Prompt Flow (Azure AI Foundry) là một implementation của khái niệm này.
Tầng 1: Prompt Template — Đơn vị nguyên tử
Trước khi xâu chuỗi, cần hiểu đơn vị cơ bản nhất: Prompt Template. Đây là cấu trúc định nghĩa một lần gọi LLM với đầy đủ: model config, system message, few-shot examples, và biến đầu vào.
File .prompty (chuẩn của Microsoft Azure AI Foundry) là ví dụ điển hình:
# filename: extract_intent.prompty
---
name: Extract Search Intent
description: Phân tích lịch sử hội thoại → trích xuất search query
model:
api: chat
configuration:
azure_deployment: gpt-4o
inputs:
conversation:
type: array # Nhận vào mảng các lượt hội thoại
---
system:
# Nhiệm vụ của bạn
- Đọc conversation history và câu hỏi hiện tại của user.
- Suy luận intent (ý định) của user từ ngữ cảnh hội thoại.
- Trả về search_query dạng JSON để dùng cho bước Retrieval phía sau.
# Few-shot Examples (xem Phần 1 — kỹ thuật Few-shot)
Ví dụ: user hỏi "how much does it cost?" sau khi đã đề cập "trailwalker shoes"
→ {"intent": "giá TrailWalker Shoes", "search_query": "price of TrailWalker Hiking Shoes"}
user:
{{#conversation}}
- {{role}}: {{content}}
{{/conversation}}
Giải phẫu file .prompty:
| Thành phần | Vai trò | Kỹ thuật Prompt tương ứng |
|---|---|---|
model.configuration | Chọn model & deployment | — (Infrastructure) |
inputs | Khai báo biến đầu vào có type | — (Schema) |
system message | Hướng dẫn hành vi + few-shot | Few-shot Prompting (Phần 1) |
{{#conversation}}...{{/conversation}} | Jinja2 template — inject biến động | — (Templating) |
File .prompty trên là 1 node đơn trong Prompt Flow — nó đảm nhiệm đúng 1 việc: trích xuất intent. Output của nó (search_query) sẽ là input của node RAG Retrieval ở tầng tiếp theo.
Tầng 2: Prompt Flow / Chaining — Xâu chuỗi nhiều Template
Prompt Flow (Chaining) là kỹ thuật kết nối nhiều Prompt Template, công cụ (Tools/APIs), và logic lập trình thành một pipeline. Đầu ra của node này là đầu vào của node kia.
Đây chính là kiến trúc của chatbot RAG đầy đủ — 3 node kết nối nhau, mỗi node là 1 Prompt Template hoặc Tool riêng biệt.
Tầng 3: AI Agent — Flow động
Như đã trình bày ở Phần 1, kỹ thuật ReAct (Reason + Act) là nền tảng kỹ thuật của AI Agent. Thay vì bị lập trình viên "ép" theo pipeline cố định (A → B → C), Agent tự suy luận xem bước tiếp theo cần gọi Tool nào — lặp lại vòng Thought → Action → Observation cho đến khi có đủ thông tin để trả lời.
Sự khác biệt cốt lõi:
- Prompt Flow (Static): Luồng cố định, lập trình viên kiểm soát số bước
- AI Agent (Dynamic): LLM tự quyết định số bước và tool sử dụng
Tools phổ biến trong hệ sinh thái 2025:
- LangChain: Bộ công cụ (component toolkit) — retrievers, document loaders, prompt templates
- LangGraph: Orchestration layer có trạng thái (stateful) — hỗ trợ vòng lặp, human-in-the-loop
- Microsoft Prompt Flow: Visual flow editor +
.promptystandard — tích hợp sẵn với Azure AI Foundry
Phân tích Trade-off
| Tầng | Ưu điểm | Nhược điểm |
|---|---|---|
| Prompt Template | Đơn giản, dễ test, dễ version control | Chỉ xử lý được 1 tác vụ đơn |
| Prompt Flow | Giải quyết bài toán phức tạp có cấu trúc rõ ràng | Cứng nhắc — phải biết trước số bước |
| AI Agent | Linh hoạt với bài toán mở | Khó debug, chi phí token cao, khó kiểm soát |
Khi nào áp dụng: Bài toán có SOP (quy trình chuẩn) rõ ràng → dùng Prompt Flow. Bài toán mở, không biết trước số bước → dùng Agent.