02-347-7730  |  Saeree ERP - ระบบ ERP ครบวงจรสำหรับธุรกิจไทย ติดต่อเรา

Ollama + RAG

Ollama RAG สร้าง AI ตอบจากเอกสารองค์กร LangChain ChromaDB
  • 3
  • เมษายน

Ollama Series EP.4 — จาก EP.3 ที่เราเรียนรู้วิธีเลือก Model และสร้าง Modelfile ตอนนี้เราจะก้าวไปอีกขั้น — สร้าง AI ที่ ตอบคำถามจากเอกสารขององค์กรได้จริง ไม่ใช่แค่ตอบจากความรู้ทั่วไป แต่ตอบจากคู่มือบริษัท ระเบียบองค์กร รายงานการเงิน หรือเอกสารที่คุณป้อนให้ ทั้งหมดนี้ทำได้ด้วยเทคนิคที่เรียกว่า RAG (Retrieval-Augmented Generation) และที่สำคัญ — ข้อมูลทุกอย่างอยู่ในเครื่องของคุณ ไม่ส่งออกนอกองค์กร

สรุปสั้น — RAG คืออะไร ทำไมต้องใช้?

  • RAG = Retrieval-Augmented Generation — เทคนิคที่ให้ AI "ค้นหา" ข้อมูลจากเอกสารก่อนตอบ
  • AI ปกติตอบจาก "ความรู้ทั่วไป" ที่ถูก Train มา — ไม่รู้เรื่องเฉพาะขององค์กรคุณ
  • RAG ทำให้ AI ตอบจาก เอกสารจริงขององค์กร ได้ — คู่มือ ระเบียบ รายงาน สัญญา ฯลฯ
  • ใช้ร่วมกับ Ollama = ข้อมูลไม่ออกนอกเครื่อง
  • เครื่องมือหลัก: Ollama + LangChain (หรือ LlamaIndex) + ChromaDB
  • บทความนี้มี Code ตัวอย่างครบ ทำตามได้ทันที

RAG คืออะไร? — ทำไม AI ธรรมดาตอบจากเอกสารไม่ได้

ลองนึกภาพว่าคุณถาม ChatGPT ว่า "ระเบียบการลาของบริษัทเรา พนักงานทดลองงานลาได้กี่วัน?" — ChatGPT ตอบไม่ได้ เพราะมันไม่เคยเห็นระเบียบบริษัทคุณ มันรู้แค่ข้อมูลทั่วไปที่ถูก Train มา

RAG (Retrieval-Augmented Generation) แก้ปัญหานี้โดยเพิ่มขั้นตอน "ค้นหา" ก่อนที่ AI จะตอบ:

ขั้นตอน AI ธรรมดา AI + RAG
1. รับคำถาม รับคำถาม รับคำถาม
2. ค้นหาข้อมูล ❌ ไม่ค้นหา ตอบจากความจำ ✅ ค้นหาเอกสารที่เกี่ยวข้อง
3. สร้างคำตอบ ตอบจาก Training Data (อาจมั่วได้) ตอบจากเอกสารจริง + อ้างอิงแหล่งที่มา
ความแม่นยำ ต่ำ (สำหรับข้อมูลเฉพาะองค์กร) สูง (ตอบจากเอกสารจริง)
Hallucination สูง — อาจแต่งข้อมูลขึ้นมา ต่ำ — มีเอกสารอ้างอิง

เทคนิค RAG ถูกเสนอครั้งแรกโดย Patrick Lewis และทีมจาก Facebook AI Research (FAIR) ในปี 2020 ผ่าน Paper ชื่อ "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks" (arXiv:2005.11401) ปัจจุบัน RAG เป็นเทคนิคมาตรฐานที่แทบทุกบริษัท AI ใช้ — ทั้ง ChatGPT, Claude, Gemini ล้วนใช้ RAG ในรูปแบบต่างๆ เมื่อทำ Knowledge Retrieval

RAG ทำงานอย่างไร? — 5 ขั้นตอน

เมื่อเข้าใจหลักการแล้ว มาดูว่า RAG ทำงานจริงๆ อย่างไรในเชิงเทคนิค:

ขั้นตอน ทำอะไร เครื่องมือ
1. Load โหลดเอกสาร (PDF, Word, TXT, CSV, HTML) LangChain Document Loaders
2. Split แบ่งเอกสารเป็น Chunks ย่อยๆ (500-1,000 ตัวอักษร) RecursiveCharacterTextSplitter
3. Embed แปลงข้อความเป็น Vector (ตัวเลข) เพื่อให้ค้นหาตาม "ความหมาย" ได้ Ollama Embeddings (nomic-embed-text)
4. Store เก็บ Vectors ไว้ใน Vector Database ChromaDB / FAISS / Qdrant
5. Retrieve + Generate เมื่อมีคำถาม → ค้นหา Chunks ที่เกี่ยวข้อง → ส่งให้ LLM สร้างคำตอบ Ollama LLM (qwen2.5 / llama3.1)

Embedding คืออะไร? — หัวใจของ RAG

Embedding คือการแปลงข้อความเป็น "พิกัดในมิติสูง" (Vector) เพื่อให้คอมพิวเตอร์เข้าใจ "ความหมาย" ของข้อความได้ ตัวอย่างเช่น ข้อความ "ลาป่วย" กับ "ขอหยุดเพราะไม่สบาย" จะถูกแปลงเป็น Vector ที่อยู่ใกล้กัน แม้จะใช้คำต่างกัน

Ollama มี Embedding Model ในตัว ที่นิยมใช้คือ nomic-embed-text — ขนาดเล็ก (274 MB) แต่คุณภาพดี รองรับ 8,192 Tokens ต่อ Chunk และที่สำคัญ ทำงาน Local ทั้งหมด ไม่ส่งข้อมูลออกนอก

# ดาวน์โหลด Embedding Model
ollama pull nomic-embed-text

# ทดสอบ Embedding
curl http://localhost:11434/api/embeddings -d '{
  "model": "nomic-embed-text",
  "prompt": "ระเบียบการลาของบริษัท"
}'
# จะได้ Array ตัวเลข 768 มิติ เช่น [0.123, -0.456, 0.789, ...]

Vector Database คืออะไร?

Vector Database คือฐานข้อมูลที่ออกแบบมาเพื่อเก็บและค้นหา Vectors — แทนที่จะค้นหาด้วย keyword เหมือน PostgreSQL ปกติ มันค้นหาด้วย "ความคล้ายคลึงทางความหมาย" (Semantic Similarity) ตัวที่นิยมใช้กับ Ollama:

Vector DB ประเภท จุดเด่น เหมาะกับ
ChromaDB Open-source, ฝังในแอปได้ ติดตั้งง่ายที่สุด pip install chromadb เริ่มต้น, Prototype, องค์กรขนาดเล็ก
FAISS Library จาก Meta เร็วมาก รองรับข้อมูลหลายล้าน Vectors ข้อมูลเยอะ ต้องการความเร็ว
Qdrant Open-source, Docker มี REST API, Filter ซับซ้อนได้ Production, องค์กรขนาดกลาง-ใหญ่
pgvector Extension ของ PostgreSQL ใช้ร่วมกับ PostgreSQL ที่มีอยู่แล้วได้ องค์กรที่ใช้ PostgreSQL อยู่แล้ว

ลงมือทำ — สร้าง RAG ด้วย Ollama + LangChain + ChromaDB

มาลงมือสร้าง RAG Pipeline จริงๆ กัน — ตัวอย่างนี้จะป้อนเอกสาร PDF ให้ AI แล้วถามคำถามจากเอกสารนั้น:

ขั้นตอนที่ 1: ติดตั้ง Dependencies

# ติดตั้ง Python packages
pip install langchain langchain-community langchain-ollama
pip install chromadb
pip install pypdf

# ดาวน์โหลด Models ใน Ollama
ollama pull qwen2.5
ollama pull nomic-embed-text

ขั้นตอนที่ 2: เขียน RAG Pipeline

# file: rag_demo.py
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_ollama import OllamaEmbeddings, ChatOllama
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate

# 1. Load - โหลดเอกสาร PDF
loader = PyPDFLoader("company-policy.pdf")
documents = loader.load()
print(f"โหลดเอกสาร {len(documents)} หน้า")

# 2. Split - แบ่งเป็น Chunks
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,      # ขนาดแต่ละ Chunk (ตัวอักษร)
    chunk_overlap=200,    # ซ้อนทับกัน 200 ตัวอักษร (ไม่ให้ขาดบริบท)
    separators=["\n\n", "\n", ".", " "]
)
chunks = text_splitter.split_documents(documents)
print(f"แบ่งเป็น {len(chunks)} Chunks")

# 3. Embed + Store - แปลงเป็น Vector แล้วเก็บใน ChromaDB
embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="./chroma_db"  # เก็บลง Disk
)
print("สร้าง Vector Database เสร็จ")

# 4. สร้าง RAG Chain
llm = ChatOllama(model="qwen2.5", temperature=0.2)

prompt_template = PromptTemplate(
    template="""จากข้อมูลต่อไปนี้ ให้ตอบคำถามเป็นภาษาไทย:

ข้อมูล:
{context}

คำถาม: {question}

คำตอบ (ตอบจากข้อมูลที่ให้เท่านั้น ถ้าไม่มีข้อมูลให้บอกว่าไม่พบ):""",
    input_variables=["context", "question"]
)

qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(
        search_kwargs={"k": 4}  # ดึง 4 Chunks ที่เกี่ยวข้องที่สุด
    ),
    chain_type_kwargs={"prompt": prompt_template},
    return_source_documents=True
)

# 5. ถามคำถาม!
result = qa_chain.invoke({
    "query": "พนักงานทดลองงานลาป่วยได้กี่วัน?"
})

print("\n=== คำตอบ ===")
print(result["result"])
print("\n=== แหล่งที่มา ===")
for doc in result["source_documents"]:
    print(f"- หน้า {doc.metadata.get('page', '?')}: {doc.page_content[:100]}...")

ขั้นตอนที่ 3: รัน

python rag_demo.py

# ผลลัพธ์ตัวอย่าง:
# โหลดเอกสาร 45 หน้า
# แบ่งเป็น 128 Chunks
# สร้าง Vector Database เสร็จ
#
# === คำตอบ ===
# ตามระเบียบบริษัท หมวดที่ 3 ข้อ 3.2
# พนักงานทดลองงานมีสิทธิลาป่วยได้ไม่เกิน 15 วันทำการต่อปี
# โดยต้องแจ้งหัวหน้างานภายในวันที่ลา
# หากลาป่วยติดต่อกัน 3 วันขึ้นไป ต้องมีใบรับรองแพทย์
#
# === แหล่งที่มา ===
# - หน้า 12: หมวดที่ 3 การลา 3.2 การลาป่วย พนักงานทดลองงาน...

ข้อมูลอยู่ที่ไหน?

  • เอกสารต้นฉบับ → อยู่ในเครื่องคุณ
  • Embedding (Vector) → เก็บใน ChromaDB บนเครื่องคุณ (โฟลเดอร์ ./chroma_db)
  • LLM (qwen2.5) → รันบน Ollama ในเครื่องคุณ
  • ไม่มีอะไรออกนอกเครื่อง ทั้ง Process — เหมาะกับข้อมูลลับระดับ ความเสี่ยงองค์กร

รองรับเอกสารหลายรูปแบบ

LangChain มี Document Loader สำหรับไฟล์หลายประเภท — ไม่จำกัดแค่ PDF:

ประเภทไฟล์ Loader ต้องติดตั้ง
PDF PyPDFLoader pip install pypdf
Word (.docx) Docx2txtLoader pip install docx2txt
Excel (.xlsx) UnstructuredExcelLoader pip install unstructured openpyxl
CSV CSVLoader มาพร้อม LangChain
Text (.txt) TextLoader มาพร้อม LangChain
HTML BSHTMLLoader pip install beautifulsoup4
โฟลเดอร์ทั้งหมด DirectoryLoader มาพร้อม LangChain

ทางลัด — ใช้ Open WebUI ทำ RAG โดยไม่ต้องเขียนโค้ด

สำหรับคนที่ไม่อยากเขียน Python — Open WebUI มีฟีเจอร์ RAG ในตัว แค่ลากไฟล์แนบเข้าไปในแชท:

  1. ติดตั้ง Open WebUI ตามที่สอนใน EP.2
  2. เปิด Chat ใหม่ เลือก Model (เช่น qwen2.5)
  3. กดไอคอน 📎 (แนบไฟล์) แล้วเลือกไฟล์ PDF, TXT, หรือ DOCX
  4. Open WebUI จะประมวลผลเอกสารเป็น Chunks + Embedding อัตโนมัติ
  5. ถามคำถาม — AI จะตอบจากเอกสารที่แนบ พร้อมอ้างอิงแหล่งที่มา

วิธีนี้เหมาะมากสำหรับ ผู้ใช้ทั่วไปที่ไม่ใช่ Developer — เช่น ฝ่ายบัญชีที่ต้องการถาม AI เกี่ยวกับ มาตรฐาน TFRS หรือ ฝ่ายบุคคลที่ต้องการถามเรื่องระเบียบองค์กร

RAG สำหรับงาน ERP — Use Cases จริง

สำหรับองค์กรที่ใช้ระบบ ERP อยู่แล้ว RAG เปิดโอกาสมากมาย:

Use Case เอกสารที่ป้อน คำถามตัวอย่าง
ถามระเบียบบริษัท ระเบียบบริษัท, คู่มือพนักงาน "สิทธิลาคลอดมีกี่วัน?", "ค่าล่วงเวลาคำนวณอย่างไร?"
ช่วยงาน บัญชี มาตรฐาน TFRS, ผังบัญชี "สินทรัพย์ถาวรต้องบันทึกอย่างไรตาม TFRS?", "ผังบัญชีหมวด 5 มีอะไรบ้าง?"
สรุปรายงาน รายงานการเงิน, งบประมาณ "สรุปรายจ่ายที่เกินงบในไตรมาสนี้", "แนวโน้ม ต้นทุนการผลิต เป็นอย่างไร?"
คู่มือใช้งาน ERP คู่มือ ERP, SOP "วิธีสร้าง ใบสั่งซื้อ ในระบบ?", "ขั้นตอนการปิดงบเดือน?"
ตรวจสอบสัญญา สัญญาจ้าง, สัญญาซื้อขาย "เงื่อนไขการยกเลิกสัญญาคืออะไร?", "ค่าปรับส่งงานล่าช้าเท่าไหร่?"
รักษา องค์ความรู้ บันทึกการประชุม, Best Practices "เราเคยแก้ปัญหา stock ไม่ตรงอย่างไร?", "ผลสรุปการประชุมเรื่อง ISO ครั้งล่าสุด?"

เทคนิคสำคัญ — ทำ RAG ให้แม่นยำ

  1. Chunk Size ที่เหมาะสม: ใช้ 500-1,000 ตัวอักษร — เล็กเกินไป AI จะขาดบริบท ใหญ่เกินไป AI จะเจอ noise เยอะ ตั้ง overlap 100-200 ตัวอักษร เพื่อไม่ให้ข้อมูลขาดตรงรอยต่อ
  2. เลือก k (จำนวน Chunks ที่ดึง) ให้พอดี: เริ่มที่ k=3-5 — น้อยเกินอาจพลาดข้อมูลสำคัญ มากเกินจะส่ง noise เข้าไปให้ AI สับสน
  3. ใช้ Prompt ที่ดี: บอก AI ชัดเจนว่า "ตอบจากข้อมูลที่ให้เท่านั้น ถ้าไม่มีข้อมูลให้บอกว่าไม่พบ" — ลด Hallucination ได้มาก
  4. ทำความสะอาดเอกสารก่อน: ลบ Header/Footer ซ้ำๆ ลบหน้าว่าง ลบ Watermark — ข้อมูลสะอาดให้ผลลัพธ์ดีกว่า
  5. ทดสอบด้วยคำถามที่รู้คำตอบ: เริ่มจากถามคำถามที่คุณรู้คำตอบอยู่แล้ว เพื่อตรวจสอบว่า RAG ดึงข้อมูลถูกต้องหรือไม่

ข้อจำกัดของ RAG ที่ต้องรู้:

  • ไม่ใช่ Fine-tuning: RAG ไม่ได้ "สอน" AI ใหม่ — แค่ให้ข้อมูลเพิ่มเติมตอนตอบ ถ้าเอกสารไม่ดี คำตอบก็ไม่ดี
  • ขึ้นอยู่กับคุณภาพเอกสาร: เอกสาร Scan ที่ OCR ไม่ดี ตาราง Excel ที่ Format ซับซ้อน อาจให้ผลไม่ดี
  • Context Window มีจำกัด: แม้ดึง Chunks มาได้ แต่ LLM มี Context Window จำกัด (4K-128K Tokens) ส่งข้อมูลมากเกินจะ error
  • ภาษาไทยอาจต้องเลือก Model ดีๆ: Embedding ภาษาไทยบาง Model ยังไม่ดีนัก — ใช้ nomic-embed-text หรือ mxbai-embed-large จะดีกว่า

Saeree ERP + RAG:

Saeree ERP กำลังพัฒนา AI Assistant ที่ใช้เทคนิค RAG เพื่อให้ผู้ใช้ถาม-ตอบข้อมูลในระบบ ERP ได้ด้วยภาษาธรรมชาติ — เช่น "ยอดขายเดือนที่แล้วเท่าไหร่?" หรือ "ใบสั่งซื้อที่ยังไม่อนุมัติมีกี่รายการ?" สนใจ ปรึกษาทีมงานฟรี

Ollama Series — อ่านต่อ

"RAG คือเทคนิคที่เปลี่ยน AI จาก 'รู้ทุกอย่างแต่ไม่รู้เรื่องของคุณ' เป็น 'ผู้เชี่ยวชาญในเอกสารขององค์กรคุณ' — และด้วย Ollama ทุกอย่างอยู่ภายในรั้วของคุณเอง"

- ทีมงาน Saeree ERP

แหล่งอ้างอิง

สนใจระบบ ERP สำหรับองค์กรของคุณ?

ปรึกษาผู้เชี่ยวชาญจาก Grand Linux Solution ฟรี ไม่มีค่าใช้จ่าย

ขอ Demo ฟรี

โทร 02-347-7730 | sale@grandlinux.com

Saeree ERP Author

เกี่ยวกับผู้เขียน

ไพฑูรย์ บุตรี

ผู้เชี่ยวชาญด้านระบบเน็ตเวิร์คและระบบความปลอดภัยเซิร์ฟเวอร์ บริษัท แกรนด์ลีนุกซ์ โซลูชั่น จำกัด