วิธีสร้าง 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
- คิดให้ดีกว่าไปกับโค้ด: ใช้คณิตศาสตร์ทางลัดเพื่อเข้าใจระบบซอฟต์แวร์ขนาดใหญ่
- สร้าง Macrohard แห่งวันนี้: แพลตฟอร์ม AI Agents สำหรับองค์กร
- พัฒนา Vue.js อย่างชาญฉลาดด้วย Aider + การเชื่อมต่อกับ IDE
- เฮ้! มาใช้ AI ผู้ช่วยโค้ดอย่าง Codex CLI กับ Aider กันเถอะ
- การทำงานร่วมกับ AI ในการเขียนโค้ดอย่างถูกวิธี
- วิธีเลือกโมเดล LLM ที่เหมาะสม: Instruct, MLX, 8-bit และ Embedding
- วิธีใช้โมเดล LLM แบบรันในเครื่อง (Local LLM) ในการทำงานประจำวัน
- วิธีใช้โมเดล Embedding ร่วมกับ LLM เพื่อสร้างแอป AI ที่ชาญฉลาดยิ่งขึ้น
- ระบบกล้องอัจฉริยะสำหรับตรวจหาข้อบกพร่องของวัสดุต่อเนื่อง
- สร้างระบบตรวจจับความเสียหายแบบเรียลไทม์ด้วยกล้อง Line-Scan + AI (แนวทางนำไปใช้ได้หลายอุตสาหกรรม)
- วิธีอ่านซอร์สโค้ด: ตัวอย่างจาก Frappe Framework
- Interface-Oriented Design: รากฐานของ Clean Architecture
- เข้าใจระบบต่อต้านโดรน (Anti-Drone System) – สถาปัตยกรรม ฮาร์ดแวร์ และซอฟต์แวร์
- RTOS vs Linux ในระบบโดรน: ออกแบบอย่างไรให้ทันสมัย ปลอดภัย และเขียนด้วย Rust ได้หรือไม่?
- ทำไม Spring ต้องใช้ Annotation เยอะ? เจาะลึกโลก Java และ Python สำหรับนักพัฒนาเว็บ
- จาก Django สู่ Spring Boot: คู่มือเปรียบเทียบฉบับเข้าใจง่ายสำหรับนักพัฒนาเว็บ
- สร้างระบบ Python ขนาดใหญ่แบบยั่งยืนด้วย Clean Architecture (พร้อมตัวอย่างและแผนภาพ)
- ทำไม Test-Driven Development (TDD) ถึงตอบโจทย์ธุรกิจยุคใหม่
- สร้างระบบ Continuous Delivery ให้ Django บน DigitalOcean ด้วย GitHub Actions และ Docker
- สร้างระบบแนะนำสินค้าในอีคอมเมิร์ซด้วย LangChain, Ollama และ Open-source Embedding แบบ Local