วิธีสร้าง 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 ต่อไป ที่เราจะสอน ทำให้ตอบแบบสตรีมทีละคำ และ เก็บประวัติการสนทนา! 🚀
Get in Touch with us
Related Posts
- โปรแกรมบัญชีที่สำนักงานคุณใช้ ถูกสร้างมาเพื่อลูกค้า ไม่ใช่เพื่อสำนักงาน
- เลือกฮาร์ดแวร์สำหรับรัน Local LLM ในปี 2026: คู่มือกำหนดสเปคแบบใช้งานจริง
- ทำไมทีมการเงินของคุณใช้เวลา 40% ของสัปดาห์ ไปกับงานที่ AI ทำแทนได้แล้ว
- สร้าง Security Operations Center (SOC) ใช้งานจริง ด้วย Open Source ทั้งระบบ
- FarmScript: ภาษาโปรแกรมที่ออกแบบมาเพื่อชาวสวนทุเรียนจันทบุรี
- ทำไมโปรเจกต์ Smart Farming ถึงล้มเหลวก่อนจะออกจากขั้น Pilot
- โปรเจกต์ ERP: ทำไมถึงบานปลาย ล่าช้า และไม่เป็นไปตามที่คาด
- ออกแบบซอฟต์แวร์ Drone Swarm ที่ทนทานต่อความล้มเหลว: Mesh Network แบบไม่มีศูนย์กลางพร้อมระบบสื่อสารปลอดภัย
- กฎ Broadcasting ของ NumPy: ทำไม `(3,)` กับ `(3,1)` ถึงทำงานต่างกัน — และเมื่อไหร่ที่มันให้คำตอบผิดโดยไม่แจ้งเตือน
- โครงสร้างพื้นฐานสำคัญภายใต้การโจมตี: บทเรียน OT Security จากสงครามยูเครน สู่องค์กรไทย
- System Prompt Engineering ใน LM Studio สำหรับการเขียนโค้ด: อธิบาย `temperature`, `context_length` และ `stop` tokens
- LlamaIndex + pgvector: RAG ระดับ Production สำหรับเอกสารธุรกิจไทยและญี่ปุ่น
- simpliShop: แพลตฟอร์มอีคอมเมิร์ซไทย รองรับสินค้าทำตามสั่งและหลายภาษาในระบบเดียว
- ทำไม ERP ถึงล้มเหลว (และจะทำให้โครงการของคุณสำเร็จได้อย่างไร)
- Idempotency ใน Payment API คืออะไร?
- Agentic AI ใน SOC Workflows: เกินกว่า Playbook สู่การป้องกันอัตโนมัติ (คู่มือ 2026)
- สร้าง SOC ตั้งแต่ศูนย์: บันทึกจากสนามจริงด้วย Wazuh + IRIS-web
- ซอฟต์แวร์โรงงานรีไซเคิล: ระบบจัดการครบวงจรสำหรับธุรกิจรีไซเคิลไทย
- คืนทุนจากซอฟต์แวร์พลังงาน: ลดต้นทุนค่าไฟได้ 15–40% จริงหรือ?
- วิธีสร้าง SOC แบบ Lightweight ด้วย Wazuh + Open Source













