ai-tools

RAG (Retrieval Augmented Generation): AI ที่ตอบจากข้อมูลจริง

25 ตุลาคม 25683 นาที255 ครั้ง

เรียนรู้ RAG เทคนิคที่ทำให้ AI ตอบคำถามจากข้อมูลของคุณเองได้แม่นยำ

RAG คืออะไร?

RAG (Retrieval Augmented Generation) คือเทคนิคที่รวม:

  • Retrieval: ค้นหาข้อมูลที่เกี่ยวข้อง
  • Generation: ใช้ LLM สร้างคำตอบ

แทนที่จะให้ LLM ตอบจากความรู้ที่ train มา RAG จะค้นหาข้อมูลจริงมาให้ LLM ก่อน แล้วค่อยสร้างคำตอบ

🤔 ทำไมต้องใช้ RAG?

ปัญหาของ LLM แบบธรรมดา:

  • Hallucination: แต่งคำตอบ ไม่รู้ก็บอกว่ารู้
  • Outdated Knowledge: ข้อมูลเก่า ไม่ทันสมัย
  • No Private Data: ไม่รู้ข้อมูลภายในบริษัท
  • No Source: ไม่รู้ว่าตอบมาจากไหน

RAG แก้ปัญหาได้:

  • ✅ ตอบจากข้อมูลจริง ไม่แต่ง
  • ✅ ข้อมูลเป็น real-time
  • ✅ ใช้ข้อมูลส่วนตัวได้
  • ✅ มี source อ้างอิงได้

🏗️ RAG ทำงานอย่างไร?

1. Indexing Phase (ครั้งแรก)

Documents → Chunking → Embedding → Vector Store

Example:
"รายงานประจำปี 2023.pdf" →
Split เป็นชิ้นเล็กๆ →
แปลงเป็น vectors →
เก็บใน vector database

2. Retrieval Phase (เมื่อมีคำถาม)

Query → Embedding → Search Vector Store → Top K Results

Example:
"ยอดขายปี 2023 เท่าไหร่?" →
แปลงคำถามเป็น vector →
หาข้อมูลที่เกี่ยวข้อง →
ได้ 3-5 ชิ้นที่ match

3. Generation Phase

Query + Retrieved Docs → LLM → Answer

Example:
Prompt: "ตอบคำถามจากข้อมูลนี้:
[ข้อมูลที่ค้นหามา]

คำถาม: ยอดขายปี 2023 เท่าไหร่?"

LLM: "ยอดขายปี 2023 คือ 50 ล้านบาท ตามที่ระบุในรายงานประจำปี"

🔧 Components ของ RAG

1. Document Loaders

โหลดข้อมูลจากหลายแหล่ง:

  • PDF, Word, Excel
  • Websites, APIs
  • Databases
  • Google Docs, Notion

2. Text Splitters

แบ่งเอกสารเป็นชิ้นเล็กๆ:

from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)

chunks = splitter.split_documents(documents)

3. Embeddings

แปลงข้อความเป็นตัวเลข (vectors):

from langchain.embeddings import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
vector = embeddings.embed_query("ยอดขายปี 2023")

4. Vector Stores

เก็บและค้นหา vectors:

  • Pinecone: Managed, scalable
  • Chroma: Open-source, local
  • FAISS: Fast, Facebook
  • Weaviate: Full-featured

5. Retrievers

ค้นหาข้อมูลที่เกี่ยวข้อง:

retriever = vectorstore.as_retriever(
    search_type="similarity",
    search_kwargs={"k": 3}
)

docs = retriever.get_relevant_documents("ยอดขายปี 2023")

📝 ตัวอย่างโค้ด

Basic RAG Pipeline:

from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# 1. Load documents
loader = PyPDFLoader("annual_report.pdf")
documents = loader.load()

# 2. Split into chunks
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
chunks = text_splitter.split_documents(documents)

# 3. Create embeddings
embeddings = OpenAIEmbeddings()

# 4. Create vector store
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings
)

# 5. Create QA chain
qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    chain_type="stuff",
    retriever=vectorstore.as_retriever()
)

# 6. Ask questions
answer = qa.run("ยอดขายปี 2023 เท่าไหร่?")

🎯 RAG Use Cases

1. Customer Support

ตอบคำถามจาก knowledge base:

  • คู่มือใช้งาน
  • FAQ
  • Documentation

2. Internal Knowledge Management

ค้นหาข้อมูลในองค์กร:

  • Policy documents
  • Meeting notes
  • Project docs

3. Research Assistant

วิเคราะห์เอกสาร research:

  • Academic papers
  • Market reports
  • Legal documents

4. Code Assistant

ค้นหาและอธิบาย code:

  • Code documentation
  • API references
  • Best practices

⚡ Advanced RAG Techniques

1. Hybrid Search

รวม semantic search + keyword search:

# Semantic: ความหมายคล้ายกัน
# Keyword: คำตรงกัน
# → ได้ผลลัพธ์ดีกว่า

2. Re-ranking

จัดอันดับผลลัพธ์ใหม่:

ค้นหาได้ 10 documents →
Re-rank ด้วย cross-encoder →
เลือก 3 อันดับแรก →
ส่งให้ LLM

3. Query Expansion

ขยาย query ให้หลากหลาย:

Original: "ยอดขาย 2023"

Expanded:
- "ยอดขายปี 2023"
- "รายได้ปี 2023"
- "รายรับปี พ.ศ. 2566"

4. Self-Query

LLM แยก filter จาก query:

Query: "บทความเรื่อง AI ที่เขียนหลังปี 2023"

LLM แยกเป็น:
- Search: "AI articles"
- Filter: year > 2023

🚀 Optimization Tips

1. Chunk Size

  • เล็กเกินไป: ขาด context
  • ใหญ่เกินไป: มี noise มาก
  • แนะนำ: 500-1000 characters

2. Overlap

  • ทำให้ chunks เชื่อมต่อกัน
  • ไม่ตัดข้อมูลกลางประโยค
  • แนะนำ: 10-20% ของ chunk size

3. Number of Retrieved Docs

  • น้อยเกินไป: ขาดข้อมูล
  • มากเกินไป: LLM งง, ช้า, แพง
  • แนะนำ: 3-5 documents

4. Embedding Model

  • OpenAI: ดี แต่แพง
  • Sentence Transformers: ฟรี รันเองได้
  • Cohere: multilingual ดี

⚠️ Challenges & Limitations

1. Cost

  • Embedding API costs
  • Vector database costs
  • LLM API costs

2. Latency

  • Retrieval takes time
  • More context = slower LLM

3. Quality

  • ขึ้นกับคุณภาพข้อมูล
  • Retrieval ผิด → คำตอบผิด
  • ต้อง monitor และปรับปรุง

🛠️ Tools & Frameworks

LangChain

from langchain.chains import RetrievalQA
# Easy to use, many integrations

LlamaIndex

from llama_index import VectorStoreIndex
# Specialized for RAG

Haystack

from haystack.pipelines import Pipeline
# Production-ready

📊 Evaluation

Metrics:

  • Retrieval Quality: ค้นหาถูกไหม?
  • Answer Relevance: ตอบตรงคำถามไหม?
  • Faithfulness: ตอบตามข้อมูลไหม ไม่แต่ง?
  • Latency: เร็วแค่ไหน?

สรุป

RAG เป็นเทคนิคสำคัญที่ทำให้ LLM:

  • ✅ ตอบจากข้อมูลจริง
  • ✅ ไม่แต่งคำตอบ
  • ✅ ใช้ข้อมูลเป็น real-time ได้
  • ✅ มี source อ้างอิง

เหมาะสำหรับ applications ที่ต้องการความแม่นยำและ up-to-date!

Tags

#RAG#LLM#Vector Database#AI#LangChain

แชร์บทความนี้