AI & GenAI

[Tech Blog #03 | AI & GenAI] Giải Mã Bản Chất AI / ML / GenAI & Làm Chủ Kỹ Năng Prompt Engineering Thực Chiến

0 views
[Tech Blog #03 | AI & GenAI] Giải Mã Bản Chất AI / ML / GenAI & Làm Chủ Kỹ Năng Prompt Engineering Thực Chiến

1. Đặt vấn đề: Bức tranh toàn cảnh AI – Búp bê Nga Matryoshka

Trong thời đại bùng nổ của ChatGPT, Claude, Gemini, các thuật ngữ như AI, Machine Learning (ML), Deep Learning (DL), và Generative AI (GenAI) thường bị dùng lẫn lộn. Để làm việc và phỏng vấn tự tin, bạn hãy hình dung chúng như những con búp bê Nga lồng vào nhau:

+-------------------------------------------------------------+
| 1. Artificial Intelligence (AI) - Tầng bao quát nhất        |
|    Mọi cỗ máy có khả năng mô phỏng trí tuệ con người        |
|    +-------------------------------------------------------+|
|    | 2. Machine Learning (ML)                              ||
|    |    Học từ dữ liệu thay vì lập trình quy tắc cứng       ||
|    |    +-------------------------------------------------+||
|    |    | 3. Deep Learning (DL)                           |||
|    |    |    Mạng nơ-ron nhiều tầng, học đặc trưng phức tạp|||
|    |    |    +-------------------------------------------+|||
|    |    |    | 4. Generative AI (LLMs, Diffusion)        ||||
|    |    |    |    Sinh ra nội dung mới (Text, Code, Ảnh)  ||||
|    |    |    +-------------------------------------------+|||
|    |    +-------------------------------------------------+||
|    +-------------------------------------------------------+|
+-------------------------------------------------------------+
  1. AI (Trí tuệ nhân tạo): Bất kỳ hệ thống nào mô phỏng tư duy con người (bao gồm cả hệ thống dựa trên luật tĩnh If-Else phức tạp như máy chơi cờ vua đời đầu).
  2. Machine Learning (Học máy): Thay vì viết tay các quy tắc, ta đưa dữ liệu vào để thuật toán tự tìm ra quy luật (ví dụ: hồi quy tuyến tính, Random Forest).
  3. Deep Learning (Học sâu): Nhánh con của ML sử dụng mạng nơ-ron nhân tạo sâu (Deep Neural Networks), đặc biệt vượt trội với dữ liệu phi cấu trúc như hình ảnh, âm thanh, văn bản.
  4. Generative AI (AI tạo sinh): Đỉnh cao hiện nay của DL, thay vì chỉ phân loại hay dự đoán nhãn (Discriminative AI), GenAI có khả năng sáng tạo ra nội dung hoàn toàn mới (văn bản, mã nguồn, hình ảnh, âm thanh) dựa trên dữ liệu khổng lồ nó đã học.

2. Các kỹ thuật Prompt Engineering thực chiến

Trong công việc của kỹ sư dữ liệu và phân tích dữ liệu, việc tích hợp LLM vào quy trình tự động hóa (Data Pipeline, xử lý văn bản, trích xuất thông tin) đòi hỏi kỹ năng Prompt Engineering chuẩn xác để đầu ra luôn nhất quán và đáng tin cậy.

2.1. Phân định System Prompt vs. User Prompt

  • System Prompt: Thiết lập "vai trò", "phạm vi quyền hạn", "nguyên tắc hành vi" và "nguyên tắc cấm (Guardrails)" cho mô hình. Nó quyết định giọng điệu và ranh giới an toàn.
  • User Prompt: Chứa yêu cầu cụ thể và dữ liệu đầu vào cần xử lý cho từng tác vụ riêng lẻ.

2.2. Zero-shot Prompting (Hỏi không ví dụ)

  • Đưa trực tiếp câu lệnh mà không kèm bất kỳ ví dụ mẫu nào. Phù hợp cho các tác vụ dịch thuật cơ bản, tóm tắt ý chính hoặc giải thích khái niệm tổng quát.

2.3. Few-shot Prompting (Học qua ví dụ mẫu)

  • Cung cấp cho LLM từ 2 đến 5 cặp ví dụ mẫu (Input →\rightarrow Output) trước khi đưa ra câu hỏi thực tế.
  • Tác dụng: Đây là kỹ thuật "vàng" giúp nắn gân LLM tuân thủ tuyệt đối phong cách viết, định dạng đặc biệt hoặc thuật ngữ chuyên ngành hẹp.

2.4. Chain-of-Thought (CoT - Suy nghĩ từng bước)

  • Thêm chỉ dẫn "Hãy suy nghĩ và lập luận từng bước trước khi đưa ra kết luận" (Think step-by-step).
  • Tác dụng: Giảm thiểu đáng kể lỗi tính toán, suy luận logic sai, hoặc kết luận vội vàng trong các bài toán phức tạp.

2.5. Structured Outputs (Ép định dạng JSON / Schema)

  • Buộc LLM trả về định dạng dữ liệu có cấu trúc (như JSON) thay vì văn bản tự do để code Python hoặc cơ sở dữ liệu có thể parse trực tiếp mà không bị crash.

3. Bảng so sánh các kỹ thuật Prompting

Kỹ thuậtCách tiếp cậnĐiểm mạnhNhược điểmTrường hợp ứng dụng tốt nhất
Zero-shotChỉ gửi câu lệnh trực tiếpTiết kiệm token, nhanh, đơn giản.Dễ bị lệch định dạng, kết quả có thể thiếu nhất quán.Tóm tắt văn bản, dịch thuật nhanh, giải thích code.
Few-shotGửi kèm 2-3 cặp (Input - Output) mẫuChuẩn hóa định dạng đầu ra cực kỳ cao, bắt chước giọng điệu chuẩn.Tốn thêm token ngữ cảnh (Context Window).Gán nhãn cảm xúc (Sentiment Analysis), trích xuất thực thể tên riêng (NER).
Chain-of-ThoughtYêu cầu giải trình từng bước suy luậnTăng mạnh độ chính xác cho bài toán logic và toán học.Thời gian phản hồi lâu hơn, output dài hơn.Phân tích báo cáo tài chính, gỡ lỗi logic SQL phức tạp, lập kế hoạch đa bước.
Role-based"Bạn là một Data Architect 10 năm kinh nghiệm..."Tinh chỉnh góc nhìn chuyên môn, ngôn từ chuyên ngành sắc sảo.Không thay đổi được kiến thức nội tại của mô hình.Review code, tư vấn giải pháp kiến trúc, mô phỏng phỏng vấn thử.

4. Thực hành thực chiến: Python script gọi LLM API với Few-shot & Structured Output

Dưới đây là một script Python thực chiến phân tích phản hồi của khách hàng (Customer Feedback) thành cấu trúc JSON chuẩn, sẵn sàng lưu vào database hoặc tạo alert cho bộ phận CSKH:

import json
import os

# Sử dụng thư viện chuẩn của OpenAI hoặc các SDK tương thích (Gemini, OpenRouter, v.v.)
from openai import OpenAI

# Khởi tạo client (Đọc API key từ biến môi trường)
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY", "your-api-key-here"))

# 1. Định nghĩa System Prompt với cấu trúc phân vai và ràng buộc chặt chẽ
system_prompt = """
Bạn là một chuyên gia phân tích dữ liệu trải nghiệm khách hàng (Customer Experience Analyst).
Nhiệm vụ của bạn là đọc phản hồi của người dùng và trích xuất dữ liệu thành định dạng JSON hợp lệ.

Yêu cầu định dạng JSON đầu ra gồm các trường sau:
- sentiment: "POSITIVE" | "NEGATIVE" | "NEUTRAL"
- category: "DELIVERY" | "PRODUCT_QUALITY" | "CUSTOMER_SUPPORT" | "PRICING" | "OTHER"
- urgency: "HIGH" | "MEDIUM" | "LOW"
- summary_vn: Tóm tắt ý kiến khách hàng trong tối đa 1 câu ngắn gọn tiếng Việt.

Chỉ trả về DUY NHẤT một chuỗi JSON hợp lệ, không kèm bất kỳ lời giải thích markdown nào ngoài JSON.
"""

# 2. Xây dựng Few-shot Examples để "nắn gân" LLM
few_shot_messages = [
    # Ví dụ mẫu 1
    {"role": "user", "content": "Shipper thái độ cộc cằn, đồ ăn giao đến nơi thì nguội ngắt và đổ hết nước canh ra ngoài!"},
    {"role": "assistant", "content": json.dumps({
        "sentiment": "NEGATIVE",
        "category": "DELIVERY",
        "urgency": "HIGH",
        "summary_vn": "Khách hàng phàn nàn shipper thái độ tệ và đồ ăn bị hỏng đổ khi giao."
    }, ensure_ascii=False)},
    
    # Ví dụ mẫu 2
    {"role": "user", "content": "Ứng dụng dùng khá mượt, nhưng mong có thêm phương thức thanh toán ví điện tử MoMo."},
    {"role": "assistant", "content": json.dumps({
        "sentiment": "POSITIVE",
        "category": "OTHER",
        "urgency": "LOW",
        "summary_vn": "Khen app mượt mà và đề xuất tích hợp thêm ví thanh toán MoMo."
    }, ensure_ascii=False)}
]

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ề dữ liệu có cấu trúc."""
    
    messages = [{"role": "system", "content": system_prompt}]
    messages.extend(few_shot_messages)
    messages.append({"role": "user", "content": feedback_text})
    
    try:
        # Gọi API với phản hồi định dạng JSON
        response = client.chat.completions.create(
            model="gpt-4o-mini", # hoặc gpt-4o, claude-3-5-haiku, gemini-1.5-flash
            messages=messages,
            temperature=0.1,     # Nhiệt độ thấp (0.0 - 0.2) giúp LLM trả về kết quả ổn định, không sáng tạo tùy tiện
            response_format={"type": "json_object"} # Ép buộc mô hình trả về JSON chuẩn
        )
        
        raw_content = response.choices[0].message.content
        parsed_result = json.loads(raw_content)
        return parsed_result
        
    except json.JSONDecodeError as jde:
        print(f"Lỗi cú pháp JSON: {jde}")
        return {}
    except Exception as e:
        print(f"Lỗi kết nối API: {e}")
        return {}

# 3. Chạy thử nghiệm trên phản hồi thực tế mới
if __name__ == "__main__":
    sample_review = "Hàng đóng gói đẹp, nhưng mình đợi gần 2 tuần mới nhận được đồ, gọi lên tổng đài thì không ai bắt máy!"
    
    result = analyze_customer_feedback(sample_review)
    print("--- KẾT QUẢ PHÂN TÍCH CÓ CẤU TRÚC (STRUCTURED OUTPUT) ---")
    print(json.dumps(result, indent=4, ensure_ascii=False))

5. Câu hỏi phỏng vấn thực tế (Interview Q&A)

Câu 1 (Mức độ: Junior / Entry-level)

Câu hỏi: "Sự khác nhau cơ bản giữa Machine Learning truyền thống (như Logistic Regression, XGBoost) và Generative AI (LLMs) trong bài toán phân loại văn bản là gì?"

Gợi ý trả lời:
"Với Machine Learning truyền thống, chúng ta cần chuẩn bị tập dữ liệu huấn luyện lớn có gán nhãn sẵn (Labeled Data), sau đó tiến hành trích xuất đặc trưng (TF-IDF, Word2Vec) và huấn luyện một mô hình chuyên biệt cho riêng bài toán đó.
Trong khi đó, Generative AI (LLMs) là các mô hình nền tảng (Foundation Models) đã được tiền huấn luyện trên lượng dữ liệu khổng lồ. Chúng ta có thể thực hiện bài toán phân loại ngay lập tức thông qua Zero-shot hoặc Few-shot Prompting mà không cần phải train lại mô hình từ đầu, giúp tiết kiệm thời gian và triển khai tính năng mới (PoC) cực kỳ nhanh chóng."

Câu 2 (Mức độ: Junior / Mid-level)

Câu hỏi: "Hallucination (Ảo giác AI) là gì? Bạn có những biện pháp kỹ thuật nào để giảm thiểu hiện tượng này khi xây dựng ứng dụng với LLM?"

Gợi ý trả lời:
*"Hallucination là hiện tượng LLM sinh ra thông tin nghe có vẻ rất thuyết phục nhưng thực tế hoàn toàn sai sự thật hoặc không có căn cứ.
Để giảm thiểu Hallucination trong thực tế, em thường áp dụng các giải pháp:

  1. Thiết lập Grounding & RAG (Retrieval-Augmented Generation): Cung cấp tài liệu ngữ cảnh chính xác từ Database/Vector DB và ép LLM chỉ được trả lời dựa trên tài liệu cung cấp kèm câu lệnh 'Nếu không tìm thấy thông tin trong tài liệu, hãy nói rõ là không biết'.
  2. Giảm tham số Temperature: Đặt temperature về mức thấp (0.0 – 0.2) để mô hình chọn các từ ngữ có xác suất chắc chắn nhất thay vì suy diễn ngẫu nhiên.
  3. Áp dụng Few-shot & Chain-of-Thought: Cung cấp ví dụ thực tế và yêu cầu mô hình suy luận từng bước kèm trích dẫn nguồn dẫn chứng."*

6. Key Takeaways (Ghi nhớ nhanh)

  1. AI là bao quát, ML là học từ dữ liệu, DL là mạng nơ-ron sâu, GenAI là sinh nội dung mới.
  2. Few-shot Prompting là vũ khí mạnh nhất để ổn định format dữ liệu và nâng cao độ chính xác mà không cần fine-tune mô hình.
  3. Luôn dùng temperature thấp (0.0 - 0.2) khi cần LLM xử lý dữ liệu phân tích, trích xuất thực thể hoặc trả về JSON cho pipeline.
  4. Nguyên tắc "Garbage In, Garbage Out" vẫn áp dụng cho Prompt: Prompt càng mơ hồ, kết quả càng vô dụng. Muốn output tốt, hãy cung cấp rõ: Vai trò (Role), Nhiệm vụ (Task), Bối cảnh (Context), Ví dụ mẫu (Examples), và Ràng buộc định dạng (Constraints).
0Claps