AI

[AI Blog #61] Kỹ Năng Prompt Engineering Thực Chiến & Xây Dựng Ứng Dụng GenAI Đầu Tiên Với Python API: Từ Zero-Shot, Few-Shot Đến Khung RCRC

0 views
[AI Blog #61] Kỹ Năng Prompt Engineering Thực Chiến & Xây Dựng Ứng Dụng GenAI Đầu Tiên Với Python API: Từ Zero-Shot, Few-Shot Đến Khung RCRC

1. Bối cảnh thực tế (Context & Problem Statement)

Trong những năm gần đây, Trí tuệ Nhân tạo tạo sinh (Generative AI - tiêu biểu là ChatGPT, Claude, Gemini) đã trở thành một công cụ làm việc không thể thiếu.

Tuy nhiên, hầu hết mọi người mới bắt đầu đều sử dụng LLMs theo kiểu "trò chuyện vu vơ":

  • Ra lệnh chung chung: "Hãy viết cho tôi báo cáo kinh doanh" hoặc "Phân tích đoạn text này".
  • Hậu quả: Mô hình trả lời lan man, dài dòng, trả về các thông tin sai lệch hoặc không thể tích hợp được vào phần mềm vì output lẫn lộn giữa lời chào hỏi và dữ liệu.

Đối với một người làm Dữ liệu (Data Analyst, Data Engineer hay Data Scientist), Prompt không chỉ là một câu chat, mà Prompt chính là một Giao diện Lập trình (Programming Interface bằng ngôn ngữ tự nhiên):

  • Biết cách ra lệnh chính xác để AI tự động trích xuất thông tin từ hóa đơn, phân loại cảm xúc khách hàng, chuyển đổi văn bản thành mã SQL chuẩn chỉnh.
  • Biết cách kết nối LLM vào code Python để tự động hóa việc xử lý hàng nghìn dòng dữ liệu mỗi ngày.

2. Các Khái Niệm & Cơ Chế Cốt Lõi

2.1. Bức Tranh Toàn Cảnh: AI vs. ML vs. Deep Learning vs. Generative AI

Rất nhiều người nhầm lẫn các khái niệm này. Thực chất chúng là các vòng tròn đồng tâm lồng vào nhau:

+-------------------------------------------------------------+
| 1. ARTIFICIAL INTELLIGENCE - AI (Trí tuệ Nhân tạo - Rộng nhất) |
|    Mọi chương trình máy tính có khả năng mô phỏng hành vi   |
|    thông minh của con người (bao gồm cả các luật IF-ELSE).  |
|    +-------------------------------------------------------+ |
|    | 2. MACHINE LEARNING - ML (Học máy)                   | |
|    |    Máy tính tự học quy luật từ dữ liệu thay vì được  | |
|    |    lập trình cứng (Linear Regression, Random Forest).| |
|    |    +-------------------------------------------------+ | |
|    |    | 3. DEEP LEARNING - DL (Học sâu)                 | | |
|    |    |    Mô phỏng mạng nơ-ron sinh học nhiều tầng     | | |
|    |    |    (Mạng MLP, CNN, Transformer).                | | |
|    |    |    +-------------------------------------------+ | | |
|    |    |    | 4. GENERATIVE AI - GenAI (AI Tạo sinh)   | | | |
|    |    |    |    Nhánh học sâu chuyên TẠO RA dữ liệu mới| | | |
|    |    |    |    (Văn bản - ChatGPT, Ảnh - Midjourney). | | | |
|    |    |    +-------------------------------------------+ | | |
|    |    +-------------------------------------------------+ | |
|    +-------------------------------------------------------+ |
+-------------------------------------------------------------+

2.2. Bản Chất Cách LLM Hoạt Động: Đoán Từ Tiếp Theo (Next-Token Prediction)

Bên dưới lớp vỏ bọc thông minh, một Mô hình Ngôn ngữ Lớn (LLM) không hề có ý thức hay suy nghĩ như con người. Bản chất toán học của nó là một Cỗ máy xác suất thống kê đoán từ tiếp theo:

  • Khi bạn nhập: "Hà Nội là thủ đô của..."
  • Mô hình tính toán phân phối xác suất trên toàn bộ từ điển:
    • "Việt Nam": Xác suất 98.5%98.5\%
    • "nước": Xác suất 1.0%1.0\%
    • "chúng ta": Xác suất 0.3%0.3\%
  • Mô hình sẽ chọn từ "Việt Nam" làm từ tiếp theo và lặp lại quá trình này liên tục.

Ý Nghĩa Thực Tế Của Tham Số Temperature:

  • Temperature = 0.0 (Nghiêm túc, Tất định): Mô hình luôn luôn chọn từ có xác suất cao nhất (100%100\%).
    →\rightarrow Cực kỳ phù hợp cho các tác vụ cần sự chính xác tuyệt đối: Trích xuất dữ liệu, Viết mã SQL, Phân loại nhị phân, Tính toán logic.
  • Temperature = 0.7 - 1.0 (Sáng tạo, Bay bổng): Mô hình cho phép chọn ngẫu nhiên các từ có xác suất thấp hơn một chút.
    →\rightarrow Phù hợp cho việc viết lách sáng tạo, nghĩ ý tưởng marketing, viết truyện.

2.3. Các Cấp Độ Prompt Engineering Căn Bản

1. Zero-Shot Prompting (Không ví dụ mẫu):

Chỉ đưa ra chỉ dẫn và yêu cầu mô hình tự xử lý dựa trên tri thức đã học:

Prompt: "Hãy phân loại cảm xúc của câu sau thành Tích cực hoặc Tiêu cực: 'Giao hàng hơi chậm nhưng đóng gói rất cẩn thận'."

2. Few-Shot Prompting (Kèm theo 2–3 ví dụ mẫu):

Cung cấp cho mô hình một vài cặp mẫu (Đầu vào -> Đầu ra) để mô hình học theo văn phong và định dạng:

Prompt:
"Phân loại đánh giá của khách hàng:

  • 'Sản phẩm dùng rất tốt' -> Tích cực
  • 'Hàng bị vỡ khi nhận' -> Tiêu cực
  • 'Dùng bình thường, giá hơi cao' -> Trung tính
  • 'Áo mặc vừa vặn, vải mát' -> "
    (Mô hình sẽ tự động điền ngay: Tích cực).

2.4. Khung Kỹ Thuật Viết Prompt RCRC Chuẩn Doanh Nghiệp

Để biến một câu prompt nghiệp dư thành một câu lệnh chuẩn xác, hãy áp dụng công thức RCRC:

[R - ROLE (Giao vai)]:      "Bạn là một Senior Data Analyst chuyên về ngành Bán lẻ."
[C - CONTEXT (Bối cảnh)]:   "Tôi đang chuẩn bị báo cáo doanh thu tuần cho Giám đốc điều hành."
[R - REQUEST (Yêu cầu)]:    "Hãy phân tích bảng số liệu sau và chỉ ra 3 mặt hàng có doanh số giảm mạnh nhất."
[C - CONSTRAINT (Ràng buộc)]:"Trình bày ngắn gọn dưới dạng bảng Markdown. Tuyệt đối không chào hỏi rườm rà.
                             Chỉ đưa ra các kết luận có số liệu dẫn chứng cụ thể."

2.5. Ép Mô Hình Trả Về Định Dạng JSON Chuẩn (Structured Output)

Khi tích hợp AI vào đường ống dữ liệu (Data Pipeline), bạn không thể để LLM trả về một đoạn văn bản tự do vì code Python sẽ không thể parse được. Bạn cần ép AI trả về chuỗi JSON hợp lệ 100%:

  • Luôn cung cấp cấu trúc mẫu (JSON Schema) trong câu Prompt.
  • Ràng buộc nghiêm ngặt: "Chỉ trả về duy nhất khối mã JSON. Không viết bất kỳ từ nào ngoài dấu ngoặc nhọn {}."

3. Các Bảng Markdown So Sánh Chi Tiết

📊 Bảng 1: So Sánh Bốn Khái Niệm Cốt Lõi Trong Hệ Sinh Thái AI

Khái niệmĐịnh nghĩa dễ hiểuPhương thức hoạt động chínhVí dụ ứng dụng thực tế
Artificial Intelligence (AI)Máy móc mô phỏng trí thông minh con ngườiLuật logic, cây quyết định, toán họcHệ thống chuyên gia, NPC trong game
Machine Learning (ML)Máy tính tự học từ dữ liệuTìm hàm toán học Y=f(X)Y = f(X) qua dữ liệu mẫuDự đoán giá nhà, Phát hiện gian lận tín dụng
Deep Learning (DL)Mạng nơ-ron nhiều tầng phức tạpHọc biểu diễn đặc trưng tự động qua các lớpNhận diện khuôn mặt, Nhận diện giọng nói
Generative AI (GenAI)Nhánh học sâu chuyên tạo ra nội dung mớiMô hình xác suất sinh chuỗi (Transformer / Diffusion)ChatGPT (Viết văn), Midjourney (Vẽ tranh)

📊 Bảng 2: So Sánh Các Kỹ Thuật Prompt Engineering Căn Bản

Kỹ thuật PromptCơ chế hoạt độngĐộ tin cậy đầu raKhi nào nên sử dụng?
Zero-ShotChỉ đưa câu lệnh trực tiếpTrung bìnhTác vụ đơn giản, phổ biến (Dịch thuật, Tóm tắt văn bản ngắn)
Few-ShotĐưa thêm 2−32 - 3 ví dụ mẫu minh họaRất caoKhi cần định dạng đầu ra chuẩn, tác vụ phân loại khó
Chain-of-Thought (CoT)Yêu cầu: "Hãy suy nghĩ từng bước một"Rất cao cho logicBài toán giải toán, logic nhiều bước, phân tích nguyên nhân lỗi
Khung RCRCĐịnh hình đủ Role, Context, Request, ConstraintỔn định nhất trong công việcViết prompt chuyên nghiệp cho các quy trình nghiệp vụ hàng ngày

📊 Bảng 3: Bảng Tra Cứu Cài Đặt Tham Số LLM Phù Hợp Cho Từng Tác Vụ

Tác vụ thực tếCài đặt TemperatureCài đặt Top-PLý do kỹ thuật
Trích xuất dữ liệu JSON, Viết SQL0.0 (Tối thiểu)1.0Cần tính chính xác tuyệt đối, không được tự ý sáng tạo cú pháp
Phân loại cảm xúc, Gán nhãn dữ liệu0.0 - 0.21.0Đảm bảo tính nhất quán giữa các lần chạy
Tóm tắt báo cáo, Viết email công việc0.5 - 0.70.9Cần câu văn mượt mà, tự nhiên nhưng vẫn bám sát nội dung gốc
Brainstorm ý tưởng, Viết kịch bản video0.8 - 1.00.95Khuyến khích mô hình khám phá các từ ngữ độc đáo, mới lạ

4. Thực Hành Thực Chiến: Script Python Kết Nối LLM API Đầu Tiên (Walkthrough)

📌 Bài toán thực tế:

Tự động đọc danh sách đánh giá của khách hàng về một ứng dụng mua sắm, phân loại cảm xúc (Tích cực, Tiêu cực, Trung tính) và trích xuất vấn đề cốt lõi dưới dạng JSON chuẩn để lưu thẳng vào cơ sở dữ liệu:

import os
import json
# Sử dụng thư viện chuẩn của OpenAI hoặc các mô hình tương thích (DeepSeek, Groq, vLLM):
from openai import OpenAI

# 1. Khởi tạo Client kết nối API (đặt API key trong biến môi trường để bảo mật):
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY", "your-api-key-here"))

def analyze_customer_feedback(feedback_text: str) -> dict:
    """Hàm gửi phản hồi của khách hàng lên LLM và nhận về kết quả JSON đã làm sạch."""
    
    # Thiết lập System Prompt định hình vai trò và ràng buộc định dạng:
    system_prompt = """
    Bạn là một trợ lý AI chuyên phân tích phản hồi khách hàng trong ngành E-commerce.
    Nhiệm vụ của bạn là đọc phản hồi và xuất ra kết quả dưới dạng duy nhất một chuỗi JSON hợp lệ.
    Cấu trúc JSON bắt buộc phải có 3 trường:
    {
      "sentiment": "Tích cực" | "Tiêu cực" | "Trung tính",
      "main_topic": "Chủ đề chính (ví dụ: Giao hàng, Giá cả, Chất lượng sản phẩm, Dịch vụ CSKH)",
      "urgency_level": "Thấp" | "Trung bình" | "Cao"
    }
    TUYỆT ĐỐI KHÔNG viết lời chào hỏi, không thêm ký tự markdown ```json ở đầu hay cuối.
    Chỉ trả về đúng nội dung trong dấu ngoặc nhọn.
    """

    # Gửi request lên LLM với Temperature = 0.0 để đảm bảo kết quả ổn định:
    response = client.chat.completions.create(
        model="gpt-4o-mini", # Sử dụng mô hình nhỏ, rẻ và siêu nhanh
        temperature=0.0,
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": f"Phản hồi của khách hàng: '{feedback_text}'"}
        ]
    )
    
    raw_output = response.choices[0].message.content.strip()
    
    # Parse chuỗi JSON thành Python Dictionary để lưu vào Database:
    try:
        parsed_data = json.loads(raw_output)
        return parsed_data
    except json.JSONDecodeError:
        return {"error": "Không thể parse JSON", "raw": raw_output}

# 2. Chạy thử nghiệm trên các đánh giá thực tế:
feedbacks = [
    "Áo giao rất nhanh, vải mặc mát mẻ, shipper thân thiện 5 sao!",
    "App bị lỗi thanh toán liên tục, trừ tiền tài khoản nhưng đơn hàng báo hủy, làm ăn quá thất vọng!",
    "Đồng hồ tạm ổn, pin dùng được 2 ngày, mức giá này thì chấp nhận được."
]

for fb in feedbacks:
    result = analyze_customer_feedback(fb)
    print(f"\nPhản hồi: '{fb}'")
    print(f"-> Kết quả AI phân tích: {result}")

5. Góc Ôn Luyện Phỏng Vấn (Interview Corner)

❓ Câu hỏi 1: Phân biệt sự khác nhau giữa AI, Machine Learning, Deep Learning và Generative AI bằng một ví dụ thực tế đời thường.

  • Gợi ý trả lời ngắn gọn, chuẩn xác:
    • AI (Trí tuệ Nhân tạo - Khái niệm bao trùm): Bất kỳ công nghệ nào giúp máy móc có hành vi giống con người.
      • Ví dụ: Một hệ thống máy bán vé tự động tính toán giá tiền dựa trên bảng quy tắc IF - ELSE cố định.
    • Machine Learning (Học máy - Tập con của AI): Thay vì lập trình luật cứng, máy tính tự học các quy luật từ dữ liệu quá khứ.
      • Ví dụ: Mô hình dựa trên lịch sử mua sắm của 100,000100,000 khách hàng để dự đoán ai có nguy cơ hủy đơn hàng.
    • Deep Learning (Học sâu - Tập con của ML): Sử dụng các mạng nơ-ron nhân tạo nhiều tầng để tự động học các đặc trưng phức tạp từ dữ liệu phi cấu trúc (ảnh, giọng nói) mà con người không cần trích xuất thủ công.
      • Ví dụ: Hệ thống nhận diện khuôn mặt tài xế qua camera điện thoại để mở khóa app.
    • Generative AI (AI Tạo sinh - Nhánh tiên tiến của Deep Learning): Không chỉ phân loại hay dự đoán, nó trực tiếp sáng tạo ra nội dung hoàn toàn mới.
      • Ví dụ: Thay vì chỉ phân loại bức ảnh là "Đẹp" hay "Xấu", GenAI tự vẽ ra một bức tranh mới từ câu mô tả văn bản.

❓ Câu hỏi 2: Tham số Temperature trong các mô hình ngôn ngữ lớn (LLM) là gì? Trong một dự án Data Pipeline tự động chuyển đổi văn bản sang câu lệnh SQL, bạn sẽ thiết lập Temperature bằng bao nhiêu và tại sao?

  • Gợi ý trả lời:
    • Bản chất của Temperature:
      • Là tham số toán học điều chỉnh độ "phẳng" của hàm xác suất Softmax trước khi lấy mẫu từ tiếp theo: P(wi)=exp⁡(zi/T)∑jexp⁡(zj/T)P(w_i) = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}
      • Khi TT cao: Các từ có xác suất thấp được tăng cơ hội được chọn →\rightarrow Tăng tính đa dạng và sáng tạo.
      • Khi TT thấp: Sự chênh lệch giữa từ có xác suất cao nhất và các từ còn lại được phóng đại lên →\rightarrow Tăng tính ổn định và lặp lại.
    • Thiết lập cho bài toán Text-to-SQL trong Data Pipeline:
      • Bắt buộc thiết lập Temperature = 0.0 (hoặc mức thấp nhất có thể).
      • Lý do kỹ thuật: Cú pháp SQL đòi hỏi tính chuẩn xác tuyệt đối 100%100\% về logic (tên bảng, tên cột, dấu phẩy, mệnh đề JOIN). Bất kỳ sự "sáng tạo ngẫu hứng" nào của mô hình ở nhiệt độ cao đều sẽ dẫn đến lỗi sai cú pháp (Syntax Error) hoặc ảo giác ra tên cột không tồn tại, làm sập toàn bộ đường ống nạp dữ liệu.

❓ Câu hỏi 3: Few-Shot Prompting là gì? Làm thế nào để hướng dẫn một mô hình LLM luôn trả về kết quả ở định dạng JSON hợp lệ để đưa vào code xử lý mà không bị dính các câu chào hỏi rườm rà?

  • Gợi ý trả lời:
    • Định nghĩa Few-Shot:
      • Là kỹ thuật đưa thêm 1−31 - 3 ví dụ mẫu trực tiếp vào ngữ cảnh Prompt để mô hình "học theo quán tính" cấu trúc đầu vào và đầu ra mong muốn trước khi xử lý câu hỏi chính.
    • 3 Bước để đảm bảo LLM trả về JSON sạch 100%100\%:
      1. Sử dụng System Prompt nghiêm ngặt: Giao vai trò và đặt ràng buộc cấm triệt để: "Chỉ trả về duy nhất chuỗi JSON hợp lệ. Bắt đầu bằng { và kết thúc bằng }. Không thêm bất kỳ lời giải thích hay ký tự markdown nào."
      2. Đưa cấu trúc JSON mẫu vào Few-Shot: Cung cấp ví dụ mẫu rõ ràng về các cặp Key-Value mong muốn trong prompt.
      3. Bật tính năng response_format: {"type": "json_object"} trên API (nếu dùng OpenAI): Kích hoạt cơ chế kiểm soát ngữ pháp ở tầng sinh từ (Grammar-guided decoding) của nhà cung cấp, đảm bảo mô hình chỉ sinh các token thỏa mãn cú pháp JSON hợp lệ.

6. Tóm Tắt Ghi Nhớ Nhanh (Key Takeaways)

  1. AI ⊃\supset Machine Learning ⊃\supset Deep Learning ⊃\supset Generative AI.
  2. LLM hoạt động dựa trên cơ chế Đoán từ tiếp theo (Next-token prediction) theo phân phối xác suất.
  3. Luôn đặt Temperature = 0.0 cho các tác vụ cần tính chính xác (SQL, JSON, Trích xuất thông tin).
  4. Áp dụng Khung RCRC (Role - Context - Request - Constraint) để viết câu lệnh chuyên nghiệp, rõ ràng.
  5. Few-Shot Prompting (đưa thêm ví dụ mẫu) là cách nhanh nhất và hiệu quả nhất để định hình văn phong và chuẩn hóa định dạng dữ liệu đầu ra cho AI.
0Claps