วิธีสร้าง RAG Chatbot ด้วย LangChain + Ollama

ในบทความนี้ คุณจะได้เรียนรู้วิธีสร้าง RAG (Retrieval-Augmented Generation) chatbot ด้วย LangChain และ Ollama พร้อมแสดงขั้นตอนเต็มในการ เพิ่มเอกสาร เข้าไปในเอเจนต์ของคุณแบบไดนามิก!

ไปทีละขั้นตอนกันเลยครับ


RAG Chatbot คืออะไร?

RAG ย่อมาจาก Retrieval-Augmented Generation หมายถึงการที่ chatbot จะไม่เพียงตอบคำถามจากความรู้ภายใน แต่จะ ค้นหาข้อมูลที่เกี่ยวข้องจากภายนอก แล้วจึง สร้างคำตอบที่ชาญฉลาดและแม่นยำ

ข้อดีของแนวทางนี้คือ:

  • ให้คำตอบที่ แม่นยำ มากขึ้น
  • อัปเดตความรู้ ได้ตลอดเวลา
  • ตอบคำถามเฉพาะทางได้ดียิ่งขึ้น (domain-specific)

เครื่องมือที่ใช้

  • LangChain: เฟรมเวิร์กสำหรับเชื่อมต่อ LLM, retrieval, tools, agents
  • Ollama: โปรแกรมรันโมเดล LLM บนเครื่อง เช่น Mistral, Llama3
  • FAISS: เครื่องมือ vector search ในเครื่อง สำหรับดึงข้อมูลอย่างรวดเร็ว

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

ติดตั้งไลบรารีที่จำเป็น:

pip install langchain ollama faiss-cpu

ตรวจสอบให้แน่ใจว่าคุณติดตั้ง Ollama และเปิดใช้งานเรียบร้อยแล้ว:

  • https://ollama.com/
  • ดาวน์โหลดโมเดล เช่น mistral, llama3, phi3 เป็นต้น

ขั้นตอนที่ 2: ตัวอย่างโค้ดสร้าง RAG Chatbot

from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.llms import Ollama
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.text_splitter import CharacterTextSplitter
from langchain.docstore.document import Document

# 1. เตรียมเอกสาร
my_docs = [
    Document(page_content="Python เป็นภาษาโปรแกรมที่สร้างโดย Guido van Rossum."),
    Document(page_content="LangChain ช่วยสร้างแอปที่ขับเคลื่อนด้วย language model."),
    Document(page_content="เมืองหลวงของประเทศไทยคือกรุงเทพมหานคร."),
]

# 2. แบ่งเอกสาร
splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
split_docs = splitter.split_documents(my_docs)

# 3. สร้าง Embedding
embedder = OllamaEmbeddings(model="nomic-embed-text")

# 4. สร้าง Vector Store (FAISS)
vectorstore = FAISS.from_documents(split_docs, embedder)

# 5. สร้าง Retriever
retriever = vectorstore.as_retriever()

# 6. โหลด LLM (Ollama)
llm = Ollama(model="mistral")

# 7. สร้าง RetrievalQA Chain
rag_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=retriever,
    return_source_documents=True
)

# 8. ถามคำถาม
query = "ใครเป็นผู้สร้างภาษา Python?"
result = rag_chain({"query": query})

print("คำตอบ:", result["result"])
print("เอกสารอ้างอิง:", result["source_documents"])

ขั้นตอนที่ 3: การเพิ่มเอกสารใหม่เข้า Agent

คุณสามารถเพิ่มเอกสารใหม่ได้ทันที โดยไม่ต้องรีสตาร์ทระบบ

Workflow ภาพรวมด้วย Mermaid.js:

graph TD
    A["ผู้ใช้อัปโหลดเอกสารใหม่"] --> B["แบ่งเอกสารเป็นชิ้น"]
    B --> C["สร้าง Embedding"]
    C --> D["เพิ่มลง Vectorstore"]
    D --> E["Retriever อัปเดตอัตโนมัติ"]
    E --> F["Chatbot ใช้ความรู้ใหม่ได้ทันที"]

ตัวอย่างโค้ด Python เพิ่มเอกสาร:

# สมมุติว่ามีเอกสารใหม่
new_doc = Document(page_content="Django เป็นเฟรมเวิร์กเว็บยอดนิยมของภาษา Python.")

# 1. แบ่งเอกสาร
new_splits = splitter.split_documents([new_doc])

# 2. สร้าง Embedding
new_vectors = embedder.embed_documents([doc.page_content for doc in new_splits])

# 3. เพิ่มเข้า FAISS
vectorstore.add_documents(new_splits)

# Retriever พร้อมใช้ความรู้ใหม่ทันที!

สรุป

การสร้าง RAG chatbot ด้วย LangChain + Ollama มีความทรงพลังและยืดหยุ่นสูง คุณสามารถ:

  • ควบคุมโมเดลได้เอง (ไม่ต้องพึ่ง API ภายนอก)
  • อัปเดตข้อมูลใหม่ได้แบบสดๆ
  • สร้าง chatbot เฉพาะทางได้เต็มที่

ในระดับ production คุณสามารถเชื่อมต่อกับ:

  • โหลดข้อมูลจากไฟล์ PDF
  • ดึงข้อมูลจากเว็บไซต์
  • ค้นหาจากฐานข้อมูล

อนาคตของ AI คือ โอเพ่นซอร์ส เป็นส่วนตัว และปรับแต่งได้

ติดตาม Part 2 ต่อไป ที่เราจะสอน ทำให้ตอบแบบสตรีมทีละคำ และ เก็บประวัติการสนทนา! 🚀

Related Posts

Articles

Our Products


Related Posts

Articles

Our Products


Get in Touch with us

Speak to Us or Whatsapp(+66) 83001 0222

Chat with Us on LINEiiitum1984

Our HeadquartersChanthaburi, Thailand