🧠 ตอนนี้เรากำลังทำอะไร?
หลังจากตอนก่อนหน้านี้ เราได้:
- โหลดเอกสาร เช่น
data.txtที่มีข้อมูลขององค์กร - แบ่งข้อความ ในเอกสารออกเป็นชิ้นเล็กๆ (เรียกว่า
chunks)
ในตอนนี้ เราจะ:
🔁 แปลงข้อความแต่ละ chunk เป็นตัวเลข (Vector)
🧠 เพื่อให้ AI เข้าใจข้อมูล
💾 แล้วนำไปเก็บไว้ใน Vector Store เพื่อใช้ค้นหาและตอบคำถามภายหลัง
💡 แล้ว Vector คืออะไร?
ให้นึกง่ายๆ ว่า:
- ข้อความ = สิ่งที่มนุษย์เข้าใจ
- Vector = ตัวเลขหลายๆ ตัวที่ AI เข้าใจ
เช่น
ข้อความ: "กล้องถ่ายรูป" → ถูกแปลงเป็นตัวเลขแบบนี้:[0.384, -0.277, 0.008, ..., 0.695]
AI ไม่เข้าใจคำว่า “กล้อง” แต่เข้าใจว่ามันคือชุดตัวเลขที่มีความหมาย
🔧 ขั้นตอนการทำ Embedding & Vector Store
✅ 1. แปลงข้อความเป็นเวกเตอร์ (Embeddings)
Library ที่ใช้:
from langchain.embeddings import OpenAIEmbeddings
สร้างตัวแปลง:
embedding = OpenAIEmbeddings()
💡 ใช้บริการของ OpenAI ซึ่งต้องมี
API Key
(สามารถโหลดจาก.envได้โดยใช้load_dotenv())
เมื่อเราแปลงข้อความแล้ว ผลลัพธ์ที่ได้จะเป็น “ชุดตัวเลข” หรือ “เวกเตอร์”
ลองส่งคำว่า "กล้อง" เข้าไป ก็จะได้เวกเตอร์ยาวๆ กลับมา
✅ 2. สร้าง Vector Store สำหรับเก็บเวกเตอร์
Library ที่ใช้:
from langchain.vectorstores import FAISS
FAISS เป็นเครื่องมือจาก Facebook สำหรับจัดเก็บและค้นหาเวกเตอร์อย่างรวดเร็ว
ติดตั้งแบบใช้ CPU (แนะนำสำหรับผู้เรียนทั่วไป):
pip install faiss-cpu
ถ้าใช้ GPU (กรณีมีการ์ดจอ NVIDIA):
pip install faiss-gpu
✅ 3. แปลง chunks ทั้งหมดเป็นเวกเตอร์ และเก็บลง Vector Store
สมมุติว่าเราแบ่งข้อความไว้ในตัวแปร chunks
vectorstore = FAISS.from_documents(
documents=chunks,
embedding=embedding
)
📦
chunksคือข้อมูลที่เราต้องการให้ AI เข้าใจ
🧠embeddingคือสิ่งที่แปลงข้อความเป็นตัวเลข
💾vectorstoreคือคลังเก็บเวกเตอร์
✅ 4. ดึงข้อมูลจาก Vector Store (Retrieval)
หากผู้ใช้มีคำถาม เช่น
“ปีที่ก่อตั้งของบริษัท ABC คือเมื่อไร?”
เราต้องการดึงเวกเตอร์จากคำถามนี้ แล้วไปเปรียบเทียบกับสิ่งที่เคยเก็บไว้
retriever = vectorstore.as_retriever()
ต่อไป เราก็จะใช้ retriever ใน Chain เพื่อให้ AI ค้นหาข้อมูลที่ใกล้เคียง แล้วตอบกลับได้อย่างแม่นยำ
🧭 Workflow สรุปอีกครั้ง
| ขั้นตอน | คำอธิบาย |
|---|---|
| 1. โหลดเอกสาร | เช่น data.txt |
| 2. แบ่งข้อความ | แบ่งเป็น chunks ยาว 100 ตัวอักษร |
| 3. สร้าง Embedding | ใช้ OpenAIEmbeddings แปลงเป็นเวกเตอร์ |
| 4. เก็บเวกเตอร์ | ใช้ FAISS เก็บไว้ใน vectorstore |
| 5. ดึงข้อมูล | ใช้ retriever ค้นหาเวกเตอร์ที่ใกล้กับคำถามที่ได้รับ |
🧪 ทดลอง: แปลงคำว่า “กล้อง” เป็นเวกเตอร์
result = embedding.embed_query("กล้อง")
print(result)
ผลลัพธ์คือเวกเตอร์ยาวๆ เช่น:
[0.384, -0.277, 0.008, ..., 0.695]
🔄 ประโยชน์ของการมี Vector Store
- ช่วยให้ AI “จดจำ” และ “อ้างอิง” ข้อมูลภายในองค์กรได้
- รองรับการค้นหาข้อมูลตามคำถาม (Question → Search → Answer)
- ไม่ต้องเทรนโมเดลใหม่ เพียงแค่เพิ่มเอกสารและสร้างเวกเตอร์

Leave a Reply