การศึกษา AI เบื้องต้น: OpenAI, RAG และ Vector Search
ในยุคของ Generative AI การพัฒนาซอฟต์แวร์ได้ก้าวข้ามจากการเขียนตรรกะแบบ Hard-coded มาเป็นการผสานพลังของ Large Language Models (LLMs) เช่น OpenAI GPT เข้ากับข้อมูลเฉพาะทางขององค์กร โดยหนึ่งในสถาปัตยกรรมที่สำคัญและเป็นมาตรฐานที่สุดในปัจจุบันคือ Retrieval-Augmented Generation (RAG) ร่วมกับ Vector Search
1. Large Language Models (LLMs) และ OpenAI API
LLM เช่น โมเดลตระกูล GPT ของ OpenAI หรือ Azure OpenAI Service ได้รับการฝึกฝนจากข้อมูลสาธารณะมหาศาล ทำให้มีความสามารถในการทำความเข้าใจภาษาธรรมชาติ (NLP), สรุปความ, แปลภาษา, และสร้างโค้ด
อย่างไรก็ตาม LLMs ทั่วไปมีข้อจำกัดหลัก 2 ประการ:
- Knowledge Cutoff: โมเดลไม่ทราบข้อมูลที่เป็นปัจจุบันหลังจากวันที่เทรนเสร็จสิ้น
- Private Data: โมเดลไม่รู้จักข้อมูลเฉพาะของธุรกิจหรือเอกสารภายในองค์กร
- Hallucination (ภาพหลอน): โมเดลอาจสร้างคำตอบที่ดูน่าเชื่อถือแต่เป็นข้อมูลเท็จขึ้นมาเอง
2. สถาปัตยกรรม RAG (Retrieval-Augmented Generation)
RAG คือเทคนิคที่แก้ปัญหาข้อจำกัดของ LLM โดยการ "ค้นหาข้อมูลที่เกี่ยวข้องจากภายนอก แล้วส่งไปเป็นบริบท (Context) ร่วมกับคำถาม" ให้ LLM ใช้ประกอบการประมวลผลคำตอบ
ขั้นตอนการทำงานของ RAG:
- Chunking: นำเอกสารต้นฉบับ (PDF, Markdown, Web Page, Database) มาหั่นออกเป็นท่อนย่อยๆ (เช่น 500-1,000 Tokens) พร้อม overlap เล็กน้อยเพื่อคงความหมาย
- Vector Embedding: นำ Chunk แต่ละชิ้นไปผ่านโมเดล Embedding (เช่น
text-embedding-3-smallหรือtext-embedding-ada-002) เพื่อแปลงข้อความให้อยู่ในรูปเวกเตอร์ตัวเลขหลายมิติ (Vector of Floats) - Indexing & Storage: จัดเก็บข้อความและเวกเตอร์ลงในฐานข้อมูล Vector Database
- Similarity Search: เมื่อผู้ใช้ส่งคำถามเข้ามา ระบบจะแปลงคำถามเป็นเวกเตอร์ แล้วคำนวณหาความคล้ายคลึงเชิงความหมาย (Semantic Similarity เช่น Cosine Similarity) เพื่อดึง Chunk ที่ตรงที่สุดออกมา
- Generation: รวบรวมคำถามและ Context ส่งเข้า LLM ด้วย System Prompt เช่น "จงตอบคำถามโดยใช้เฉพาะข้อมูลในบริบทที่ระบุไว้เท่านั้น"
3. Vector Database และ MongoDB Atlas Vector Search
ในอดีต การทำ Vector Search อาจต้องใช้ฐานข้อมูลเฉพาะทาง (เช่น Pinecone, Milvus, Qdrant) แต่ในปัจจุบัน ฐานข้อมูลระดับโลกอย่าง MongoDB Atlas ได้เพิ่มฟีเจอร์ Vector Search แบบเนทีฟ ทำให้ทีมสามารถจัดเก็บทั้งข้อมูลเอกสารปกติ (JSON Documents) และ Vector Embeddings ไว้ในที่เดียวกันได้
การทำงานของ MongoDB Atlas Vector Search:
- จัดเก็บฟิลด์ Vector ร่วมกับข้อมูลเดิมใน Collection:json
{ "_id": "doc_101", "title": "คู่มือการเบิกสวัสดิการ", "content": "พนักงานสามารถยื่นเบิกค่ารักษาพยาบาลได้ไม่เกิน...", "content_vector": [0.0125, -0.0432, 0.0891, ...], "category": "hr" } - สร้าง Index แบบ
vectorSearchบน Atlas - ใช้ Aggregation Pipeline
$vectorSearchเพื่อค้นหาข้อมูลได้อย่างรวดเร็ว:javascriptdb.documents.aggregate([ { $vectorSearch: { index: "vector_index", path: "content_vector", queryVector: userQueryVector, numCandidates: 100, limit: 5 } } ]);
4. การประสานงานด้วย Semantic Kernel (C# / .NET)
สำหรับนักพัฒนาฝั่ง .NET / C# บริษัท Microsoft ได้พัฒนาโอเพนซอร์สเฟรมเวิร์กชื่อ Semantic Kernel เพื่อช่วยผสานการทำงานระหว่างโค้ดภาษา C# เข้ากับ AI Services ได้อย่างง่ายดาย:
- Chat Completion Service: จัดการสนทนากับ Azure OpenAI / OpenAI
- Text Embedding Generation Service: แปลงข้อความเป็น Embedding Vector อัตโนมัติ
- Memory & Vector Store Connectors: รองรับการเชื่อมต่อกับ MongoDB, Azure AI Search, Qdrant, และ SQLite
📚 แหล่งเรียนรู้ ตัวอย่างโค้ด และบทความแนะนำ
ชุมชนนักพัฒนาไทยได้รวบรวมตัวอย่างและบทความเชิงลึกสำหรับศึกษาและลงมือทำ:
1. โค้ดตัวอย่างบน GitHub
- 🔗 GitHub: T-T-Software-Solution/dotnetConf2024.ttss.version
ตัวอย่างการประยุกต์ใช้ Semantic Kernel C# และ Vector Search จากงาน .NET Conf Thailand