Fine-Tuning
RAG
AI
Machine Learning
สอน AI ขั้นสูง
LLM

Fine-Tuning และ RAG: เทคนิคขั้นสูงในการสอน AI ให้เชี่ยวชาญเฉพาะด้าน

เรียนรู้เทคนิคขั้นสูง Fine-Tuning และ RAG (Retrieval-Augmented Generation) เพื่อสอน AI ให้เชี่ยวชาญเฉพาะด้านและตอบคำถามได้แม่นยำยิ่งขึ้น

AI Unlocked Team
24/01/2568
Fine-Tuning และ RAG: เทคนิคขั้นสูงในการสอน AI ให้เชี่ยวชาญเฉพาะด้าน

Fine-Tuning และ RAG: เทคนิคขั้นสูงในการสอน AI ให้เชี่ยวชาญเฉพาะด้าน

เมื่อคุณต้องการให้ AI เข้าใจธุรกิจหรือข้อมูลเฉพาะของคุณอย่างลึกซึ้ง การใช้ Prompt ทั่วไปอาจไม่เพียงพอ บทความนี้จะพาคุณไปรู้จักกับเทคนิคขั้นสูง 2 วิธี: Fine-Tuning และ RAG (Retrieval-Augmented Generation) พร้อมแนวทางการเลือกใช้ที่เหมาะสมกับความต้องการของคุณ

ทำไมต้องใช้เทคนิคขั้นสูง?

ข้อจำกัดของ Prompt ทั่วไป

แม้ว่า Prompt Engineering จะมีประสิทธิภาพ แต่ก็มีข้อจำกัด:

  • ความจุ Context: AI มีขีดจำกัดในการรับข้อมูลต่อครั้ง
  • ความแม่นยำ: อาจไม่เข้าใจบริบทเฉพาะทางที่ซับซ้อน
  • ความสม่ำเสมอ: ผลลัพธ์อาจแปรปรวนแม้ใช้ Prompt เดียวกัน
  • ความรู้ล้าสมัย: ข้อมูลถูกตัดขาด ณ เวลาที่ Train

เมื่อไหร่ต้องใช้เทคนิคขั้นสูง?

คุณควรพิจารณาใช้เทคนิคขั้นสูงเมื่อ:

✅ มีข้อมูลเฉพาะทางจำนวนมากที่ AI ไม่รู้จัก ✅ ต้องการความแม่นยำสูงในเรื่องเฉพาะ ✅ ต้องการให้ AI ตอบตามสไตล์หรือรูปแบบเฉพาะ ✅ ข้อมูลมีการอัปเดตบ่อยครั้ง ✅ มีงบประมาณและทรัพยากรเพียงพอ

Fine-Tuning คืออะไร?

Fine-Tuning คือการ "สอน" AI model ที่มีอยู่แล้วด้วยข้อมูลของคุณเอง ทำให้ AI เรียนรู้และจดจำข้อมูลเฉพาะทางของคุณอย่างถาวร

การทำงานของ Fine-Tuning

Base Model (GPT-4, Claude, etc.)
         ↓
+ ข้อมูลฝึกฝึกสอน (Training Data) ของคุณ
         ↓
= Custom Model ที่เข้าใจข้อมูลของคุณโดยเฉพาะ

ตัวอย่างการใช้งาน Fine-Tuning

1. Customer Service Bot

ปัญหา: AI ทั่วไปไม่รู้จักสินค้าและนโยบายของบริษัทคุณ

วิธีแก้: Fine-tune ด้วย:

  • ประวัติการสนทนาลูกค้า (Chat History)
  • คำถามที่พบบ่อย (FAQ)
  • Product Knowledge Base
  • Company Policies

ผลลัพธ์: AI ที่ตอบคำถามลูกค้าได้แม่นยำและสอดคล้องกับนโยบายบริษัท

ปัญหา: AI ต้องเข้าใจคำศัพท์กฎหมายและบริบททางกฎหมาย

วิธีแก้: Fine-tune ด้วย:

  • เอกสารกฎหมาย
  • คำพิพากษา
  • สัญญา
  • ข้อกฎหมาย

ผลลัพธ์: AI ที่วิเคราะห์เอกสารทางกฎหมายได้แม่นยำ

3. Medical Diagnosis Assistant

ปัญหา: ต้องการ AI ที่เข้าใจศัพท์ทางการแพทย์และอาการต่างๆ

วิธีแก้: Fine-tune ด้วย:

  • Medical Journals
  • Case Studies
  • Symptom Databases
  • Treatment Guidelines

ผลลัพธ์: AI ผู้ช่วยแพทย์ที่ให้คำแนะนำได้แม่นยำขึ้น

ขั้นตอนการ Fine-Tuning

1. เตรียมข้อมูล (Data Preparation)

รูปแบบข้อมูล:

[
  {
    "messages": [
      {"role": "system", "content": "คุณเป็นผู้เชี่ยวชาญด้านกฎหมายแรงงาน"},
      {"role": "user", "content": "ถ้าบริษัทไล่ออกโดยไม่มีเหตุผล ต้องทำอย่างไร?"},
      {"role": "assistant", "content": "ตามกฎหมายแรงงาน..."}
    ]
  },
  {
    "messages": [
      {"role": "system", "content": "คุณเป็นผู้เชี่ยวชาญด้านกฎหมายแรงงาน"},
      {"role": "user", "content": "ค่าทดแทนการเลิกจ้างคำนวณอย่างไร?"},
      {"role": "assistant", "content": "การคำนวณค่าทดแทน..."}
    ]
  }
]

คุณภาพข้อมูล:

  • ✅ มีความหลากหลาย (Diversity)
  • ✅ ถูกต้องและเชื่อถือได้ (Accuracy)
  • ✅ จำนวนเพียงพอ (ขั้นต่ำ 50-100 ตัวอย่าง, แนะนำ 500+)
  • ✅ สะอาดไม่มี Noise หรือข้อมูลผิด

2. เลือก Base Model

ตัวเลือกยอดนิยม:

  • GPT-3.5-turbo: ราคาถูก เหมาะสำหรับงานทั่วไป
  • GPT-4: ทรงพลังกว่า แต่ราคาแพงกว่า
  • Open Source Models: LLaMA 2, Mistral, Falcon (ควบคุมได้เต็มที่)

3. Training Process

# ตัวอย่างการ Fine-tune ด้วย OpenAI API
import openai

# 1. Upload training file
training_file = openai.File.create(
  file=open("training_data.jsonl", "rb"),
  purpose='fine-tune'
)

# 2. Create fine-tuning job
fine_tune = openai.FineTuning.create(
  training_file=training_file.id,
  model="gpt-3.5-turbo",
  hyperparameters={
    "n_epochs": 3
  }
)

# 3. Wait for completion
# 4. Use the fine-tuned model
response = openai.ChatCompletion.create(
  model="ft:gpt-3.5-turbo:your-org:custom-model:id",
  messages=[...]
)

4. Evaluation & Testing

ทดสอบ Model ด้วย:

  • Test Set: ชุดข้อมูลที่ไม่เคยใช้ใน Training
  • Human Evaluation: ให้คนตรวจสอบคุณภาพคำตอบ
  • Metrics: Accuracy, F1-Score, BLEU Score

ข้อดีและข้อเสียของ Fine-Tuning

✅ ข้อดี

  1. ความแม่นยำสูง: Model เรียนรู้ข้อมูลของคุณอย่างลึกซึ้ง
  2. ตอบสนองเร็ว: ไม่ต้องส่ง Context ยาวๆ ทุกครั้ง
  3. ประหยัดในระยะยาว: ใช้ token น้อยลงเมื่อใช้งานจริง
  4. Consistency: ผลลัพธ์สม่ำเสมอกว่า

❌ ข้อเสีย

  1. ต้นทุนสูง: ค่า Training สูง โดยเฉพาะ GPT-4
  2. ใช้เวลานาน: อาจใช้เวลาหลายชั่วโมงถึงหลายวัน
  3. ต้องการข้อมูลจำนวนมาก: ยิ่งมีข้อมูลคุณภาพดีมาก ยิ่งดี
  4. Update ยาก: ต้อง Re-train ใหม่ทุกครั้งที่มีข้อมูลเพิ่ม
  5. Technical Complexity: ต้องมีความรู้ด้าน ML

เมื่อไหร่ควรใช้ Fine-Tuning?

ควรใช้เมื่อ:

  • ข้อมูลไม่เปลี่ยนแปลงบ่อย
  • ต้องการความสม่ำเสมอสูง
  • มีงบประมาณเพียงพอ
  • ต้องการ Performance สูงสุด
  • มีข้อมูล Training คุณภาพดีจำนวนมาก

ไม่ควรใช้เมื่อ:

  • ข้อมูลมีการอัปเดตบ่อย (ทุกวัน/สัปดาห์)
  • งบประมาณจำกัด
  • ต้องการความยืดหยุ่นในการเปลี่ยนแปลงข้อมูล

RAG (Retrieval-Augmented Generation) คืออะไร?

RAG คือเทคนิคที่ให้ AI "ค้นหา" ข้อมูลที่เกี่ยวข้องจากฐานข้อมูลของคุณก่อน แล้วจึงใช้ข้อมูลนั้นในการสร้างคำตอบ

การทำงานของ RAG

คำถามของผู้ใช้
        ↓
1. ค้นหาข้อมูลที่เกี่ยวข้องจากฐานข้อมูล (Vector Database)
        ↓
2. ดึงข้อมูลที่เกี่ยวข้องมา (Top 3-5 ผลลัพธ์)
        ↓
3. ส่งข้อมูล + คำถามไปให้ AI
        ↓
4. AI สร้างคำตอบจากข้อมูลที่ได้รับ
        ↓
คำตอบที่แม่นยำและมีที่มา

สถาปัตยกรรม RAG

┌──────────────┐
│ User Query   │
└──────┬───────┘
       │
       ▼
┌─────────────────────┐
│ Embedding Model     │ (แปลงคำถามเป็น Vector)
└──────┬──────────────┘
       │
       ▼
┌─────────────────────┐
│ Vector Database     │ (ค้นหาข้อมูลที่ใกล้เคียง)
│ (Pinecone, Weaviate)│
└──────┬──────────────┘
       │
       ▼
┌─────────────────────┐
│ Retrieve Top-K      │ (ดึงข้อมูล 3-5 อันดับแรก)
└──────┬──────────────┘
       │
       ▼
┌─────────────────────┐
│ LLM (GPT-4, Claude) │ (สร้างคำตอบจากข้อมูล)
└──────┬──────────────┘
       │
       ▼
┌─────────────────────┐
│ Generated Answer    │
│ + Source Citations  │
└─────────────────────┘

ตัวอย่างการใช้งาน RAG

Use Case: ระบบค้นหาเอกสารภายในบริษัท

ข้อมูล:

  • คู่มือพนักงาน
  • นโยบายบริษัท
  • ขั้นตอนการทำงาน (SOP)
  • FAQ ภายในองค์กร

ตัวอย่าง:

User: "วันลาพักร้อนที่เหลือของฉันคือกี่วัน?"

RAG System:
1. ค้นหาข้อมูล → พบ "นโยบายวันลา" และ "ข้อมูลพนักงาน"
2. ดึงข้อมูล → "พนักงานมีสิทธิ์ลา 10 วัน/ปี..."
3. AI ตอบ → "ตามนโยบายบริษัท พนักงานมีสิทธิ์ลาพักร้อน 10 วัน/ปี
              คุณใช้ไปแล้ว 4 วัน คงเหลือ 6 วัน (อ้างอิงจากนโยบายวันลา หน้า 5)"

2. E-commerce Product Assistant

Use Case: ตอบคำถามเกี่ยวกับสินค้า

User: "มีกระเป๋าหนังสีดำราคาไม่เกิน 2000 บาทไหม?"

RAG System:
1. ค้นหา → Product Database
2. พบสินค้าที่ตรงเงื่อนไข → 3 รายการ
3. AI สร้างคำตอบ → "มีครับ! เรามีกระเป๋าหนังสีดำในราคาไม่เกิน 2000 บาท 3 รุ่น:
   1. กระเป๋าหนัง Classic - 1,590 บาท
   2. กระเป๋าหนัง Urban Style - 1,890 บาท
   3. กระเป๋าหนัง Business Pro - 1,990 บาท"

3. Documentation Assistant

Use Case: ช่วยเหลือ Developer ค้นหาข้อมูลใน Documentation

User: "วิธีการ setup authentication ใน Next.js 14 App Router ทำอย่างไร?"

RAG System:
1. ค้นหา → Docs Database
2. พบบทความที่เกี่ยวข้อง → "Authentication Setup", "App Router Guide"
3. AI ตอบ → "การ setup authentication ใน Next.js 14 App Router มีขั้นตอนดังนี้:

   1. ติดตั้ง next-auth...
   2. สร้าง api/auth/[...nextauth]/route.ts...
   [Code Examples]

   อ้างอิงจาก: Authentication Guide (v14.0)"

ขั้นตอนการสร้าง RAG System

1. เตรียมข้อมูล

# แปลงเอกสารเป็นชิ้นเล็กๆ (Chunks)
from langchain.text_splitter import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,      # ขนาดแต่ละ chunk
    chunk_overlap=200,    # overlap เพื่อความต่อเนื่อง
)

documents = text_splitter.split_documents(raw_docs)

2. สร้าง Embeddings

# แปลงข้อความเป็น Vector
from langchain.embeddings import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
vectors = embeddings.embed_documents([doc.page_content for doc in documents])

3. เก็บใน Vector Database

# เก็บ vectors ใน Pinecone
from langchain.vectorstores import Pinecone
import pinecone

pinecone.init(api_key="your-api-key", environment="us-east-1-aws")

vectorstore = Pinecone.from_documents(
    documents,
    embeddings,
    index_name="company-knowledge-base"
)

4. Query & Generate

# ค้นหาและสร้างคำตอบ
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(model_name="gpt-4", temperature=0)

qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
    return_source_documents=True
)

result = qa_chain({"query": "วันลาพักร้อนที่เหลือของฉันคือกี่วัน?"})
print(result["result"])
print(result["source_documents"])  # แสดงแหล่งที่มา

เครื่องมือสำหรับสร้าง RAG

Vector Databases

  1. Pinecone - Managed, ใช้งานง่าย, แต่เสียเงิน
  2. Weaviate - Open source, feature-rich
  3. Chroma - Open source, เบา, เหมาะสำหรับ prototype
  4. Qdrant - Performance สูง, Rust-based
  5. Milvus - สำหรับ Large-scale applications

Frameworks

  1. LangChain - Framework สำหรับสร้าง LLM apps (Python/JS)
  2. LlamaIndex - เน้นการจัดการและ query ข้อมูล
  3. Haystack - Production-ready RAG framework
  4. Semantic Kernel - Microsoft's framework

Advanced RAG Techniques

รวม Semantic Search และ Keyword Search

# ใช้ทั้ง Vector Search และ BM25
from langchain.retrievers import EnsembleRetriever
from langchain.retrievers import BM25Retriever

bm25_retriever = BM25Retriever.from_documents(documents)
vector_retriever = vectorstore.as_retriever()

ensemble_retriever = EnsembleRetriever(
    retrievers=[bm25_retriever, vector_retriever],
    weights=[0.5, 0.5]
)

2. Re-ranking

จัดลำดับผลลัพธ์ใหม่เพื่อความแม่นยำ

from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CohereRerank

compressor = CohereRerank(model="rerank-english-v2.0")

compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=vector_retriever
)

3. Multi-Query RAG

สร้างหลาย Query จาก Query เดียว

# สร้างคำถามหลายรูปแบบจากคำถามเดิม
from langchain.retrievers.multi_query import MultiQueryRetriever

retriever = MultiQueryRetriever.from_llm(
    retriever=vectorstore.as_retriever(),
    llm=llm
)

# จาก "วิธี setup auth?" → สร้างเป็น:
# - "How to configure authentication?"
# - "Steps for auth implementation"
# - "Authentication setup guide"

4. Parent Document Retriever

เก็บ chunks เล็ก แต่ส่ง document ใหญ่ให้ AI

from langchain.retrievers import ParentDocumentRetriever
from langchain.storage import InMemoryStore

store = InMemoryStore()
retriever = ParentDocumentRetriever(
    vectorstore=vectorstore,
    docstore=store,
    child_splitter=small_splitter,
    parent_splitter=large_splitter,
)

ข้อดีและข้อเสียของ RAG

✅ ข้อดี

  1. Update ง่าย: เพิ่มข้อมูลใหม่ได้ทันที ไม่ต้อง Re-train
  2. Traceable: สามารถอ้างอิงแหล่งที่มาได้
  3. Cost-Effective: ถูกกว่า Fine-tuning สำหรับข้อมูลที่อัปเดตบ่อย
  4. Flexible: เปลี่ยนแปลงข้อมูลได้ง่าย
  5. No Training Required: ไม่ต้อง Train model

❌ ข้อเสีย

  1. Latency: ช้ากว่าเพราะต้องค้นหาก่อน
  2. Quality Dependent: ขึ้นอยู่กับคุณภาพของ Retrieval
  3. Token Usage: ใช้ token มากกว่าเพราะต้องส่ง Context
  4. Complexity: ต้องจัดการ Vector DB และ Infrastructure

เมื่อไหร่ควรใช้ RAG?

ควรใช้เมื่อ:

  • ข้อมูลมีการอัปเดตบ่อย
  • ต้องการอ้างอิงแหล่งที่มา
  • มีข้อมูลจำนวนมาก (1000+ documents)
  • ต้องการความยืดหยุ่นในการเพิ่ม/ลบข้อมูล
  • ต้องการ Transparency (รู้ว่าคำตอบมาจากไหน)

ไม่ควรใช้เมื่อ:

  • ข้อมูลน้อยมาก (< 50 documents) → ใช้ Prompt ธรรมดาพอ
  • ต้องการ Real-time response สูงมาก
  • ไม่ต้องการจัดการ Infrastructure

Fine-Tuning vs RAG: เลือกอันไหนดี?

เปรียบเทียบโดยตรง

หัวข้อFine-TuningRAG
ความแม่นยำสูงมาก (ถ้า train ดี)สูง (ขึ้นกับ retrieval)
ต้นทุนเริ่มต้นสูงต่ำ-ปานกลาง
ต้นทุนใช้งานต่ำ (token น้อย)สูง (ส่ง context ทุกครั้ง)
Update ข้อมูลยาก (ต้อง re-train)ง่าย (เพิ่มทันที)
เวลาตอบสนองเร็วปานกลาง-ช้า
Transparencyไม่มีมี (อ้างอิงแหล่งที่มา)
Technical Complexityสูงปานกลาง
Data Requirementมาก (500+ examples)น้อย (10+ documents)

Decision Tree: ควรใช้อันไหน?

เริ่มต้น
   │
   ├─ ข้อมูลอัปเดตบ่อย (ทุกวัน/สัปดาห์)?
   │   │
   │   ├─ ใช่ → RAG ✅
   │   │
   │   └─ ไม่ →
   │       │
   │       ├─ มีงบประมาณจำกัด?
   │       │   │
   │       │   ├─ ใช่ → RAG ✅
   │       │   │
   │       │   └─ ไม่ →
   │       │       │
   │       │       ├─ ต้องการ transparency?
   │       │       │   │
   │       │       │   ├─ ใช่ → RAG ✅
   │       │       │   │
   │       │       │   └─ ไม่ → Fine-Tuning ✅

กรณีศึกษา: เลือกเทคนิคที่เหมาะสม

Case 1: Customer Support Chatbot

สถานการณ์: บริษัท E-commerce ต้องการ chatbot ตอบคำถามลูกค้า

ข้อมูล:

  • Product Catalog (1000+ สินค้า, อัปเดตทุกวัน)
  • FAQ (50 คำถาม, เพิ่มเติมบ่อย)
  • Policies (10 หน้า, แก้ไขทุกเดือน)

คำตอบ: RAG

  • ข้อมูลอัปเดตบ่อย
  • ต้องการอ้างอิงแหล่งที่มา
  • ต้องการความยืดหยุ่น

สถานการณ์: บริษัททนายความต้องการ AI ช่วยร่างสัญญา

ข้อมูล:

  • Template สัญญา (มาตรฐาน, ไม่เปลี่ยนแปลงบ่อย)
  • Legal Clauses (500+ ข้อ)
  • Company Style Guide

คำตอบ: Fine-Tuning

  • ข้อมูลคงที่
  • ต้องการความสม่ำเสมอสูง
  • ต้องการรูปแบบการเขียนเฉพาะ

Case 3: Medical Diagnosis Support

สถานการณ์: โรงพยาบาลต้องการ AI ช่วยแพทย์วินิจฉัยโรค

ข้อมูล:

  • Medical Journals (อัปเดตบ่อย)
  • Hospital Case Studies (เพิ่มทุกวัน)
  • Treatment Guidelines (อัปเดตทุกปี)

คำตอบ: RAG + Fine-Tuning ✅ (Hybrid)

  • RAG: สำหรับ Medical Journals และ Case Studies ที่อัปเดตบ่อย
  • Fine-Tuning: สำหรับ Medical Terminology และ Diagnosis Reasoning

Hybrid Approach: รวมทั้ง 2 เทคนิค

บางครั้งคุณอาจต้องการใช้ทั้ง 2 เทคนิครวมกัน:

Fine-Tuned Model (เรียนรู้ Domain Knowledge)
        +
RAG (ดึงข้อมูลล่าสุด)
        =
Best of Both Worlds

ตัวอย่าง Hybrid System

# 1. Fine-tune model สำหรับ domain knowledge
fine_tuned_llm = ChatOpenAI(model="ft:gpt-3.5-turbo:org:medical:id")

# 2. ใช้ RAG เพื่อดึงข้อมูลล่าสุด
qa_chain = RetrievalQA.from_chain_type(
    llm=fine_tuned_llm,  # ใช้ Fine-tuned model
    retriever=vectorstore.as_retriever()
)

# ได้ AI ที่:
# - เข้าใจ Medical Terms ดี (จาก Fine-tuning)
# - รู้จักข้อมูลล่าสุด (จาก RAG)

สรุป: เส้นทางการเลือกเทคนิค

Quick Decision Guide

ใช้ Prompt Engineering ถ้า:

  • งานง่าย ข้อมูลน้อย
  • ไม่ต้องการความแม่นยำสูงมาก
  • Budget จำกัด

ใช้ RAG ถ้า:

  • ข้อมูลอัปเดตบ่อย
  • ต้องการอ้างอิงแหล่งที่มา
  • มีข้อมูลจำนวนมาก

ใช้ Fine-Tuning ถ้า:

  • ข้อมูลคงที่
  • ต้องการความสม่ำเสมอสูงสุด
  • มีงบประมาณเพียงพอ
  • มีข้อมูล Training คุณภาพดี

ใช้ Hybrid (RAG + Fine-Tuning) ถ้า:

  • ต้องการทั้ง Domain Expertise และข้อมูลล่าสุด
  • มี Budget และ Technical Resources
  • Application มีความสำคัญสูง (เช่น Medical, Legal)

ขั้นตอนการเริ่มต้น

  1. เริ่มจาก Prompt Engineering

    • ทดสอบว่าได้ผลพอหรือไม่
  2. ลอง RAG

    • ถ้า Prompt ไม่เพียงพอและมีข้อมูลจำนวนมาก
  3. พิจารณา Fine-Tuning

    • ถ้า RAG ยังไม่เพียงพอหรือต้องการ performance สูงสุด
  4. Hybrid Approach

    • เมื่อต้องการทั้ง 2 อย่าง

พร้อมสร้าง AI ที่เชี่ยวชาญเฉพาะด้านแล้วหรือยัง?

สมัครเรียนคอร์สขั้นสูง Fine-Tuning และ RAG ของเราได้ที่ AI Unlocked หรือปรึกษาทีมงานเพื่อออกแบบ AI Solution ที่เหมาะกับธุรกิจของคุณ!


เขียนโดย

AI Unlocked Team