สร้างระบบค้นหาภายในองค์กรด้วย PHP + Vector Search + Ollama
เมื่อปี 2026 ผมทำงานให้กับบริษัทผลิตชิ้นส่วนยานยนต์ขนาดกลาง ชื่อ “Precision Motors” บริษัทเรามีฐานข้อมูลเอกสารขนาดใหญ่มาก ตั้งแต่คู่มือการใช้งานผลิตภัณฑ์, รายงานทางเทคนิค, เอกสารการประชุม และแม้กระทั่งอีเมลเก่าๆ ทีมการตลาดต้องการเครื่องมือที่ช่วยให้พนักงานสามารถค้นหาข้อมูลที่เกี่ยวข้องได้อย่างรวดเร็ว แต่ระบบค้นหาเดิมของเรา (ใช้ ElasticSearch) ทำงานช้ามาก และไม่สามารถจับความหมายของคำถามได้ดีนัก ทำให้การค้นหาข้อมูลเป็นเรื่องเสียเวลาและทำให้การตัดสินใจล่าช้า ผมและทีมต้องหาทางออกอย่างเร่งด่วน
บทความนี้จะแนะนำวิธีการสร้างระบบค้นหาภายในองค์กรด้วย PHP, Vector Search และ Ollama ซึ่งเป็นเครื่องมือที่ช่วยให้เราสามารถรันโมเดลภาษาขนาดใหญ่ได้โดยไม่ต้องพึ่งพา API ของ OpenAI หรือ Google ซึ่งช่วยลดค่าใช้จ่ายและเพิ่มความปลอดภัยของข้อมูลได้ นอกจากนี้ เรายังสามารถปรับแต่งโมเดลให้เข้ากับข้อมูลเฉพาะของบริษัทเราได้อีกด้วย
Prerequisites
ก่อนเริ่มทำ เราต้องมีสิ่งต่อไปนี้:
- PHP 8.1 หรือสูงกว่า
- Composer
- Ollama (ติดตั้งตามคำแนะนำของ Ollama: https://ollama.com/docs/install)
- Vector Database (เราจะใช้ ChromaDB ในตัวอย่างนี้)
- PHP Vector Database Extension (ติดตั้งผ่าน Composer)
การตั้งค่า ChromaDB
ChromaDB เป็น Vector Database ที่ใช้งานง่ายและรวดเร็ว เราสามารถติดตั้งผ่าน Composer ได้ดังนี้:
composer require chroma-db/chroma
หลังจากติดตั้งแล้ว เราสามารถสร้าง connection กับ ChromaDB ได้ดังนี้:
ตอนนี้ ChromaDB ของเราพร้อมใช้งานแล้ว เราสามารถ import ข้อมูลของเราเข้าไปได้
การ Index ข้อมูลด้วย Ollama
ขั้นตอนแรกคือการแปลงเอกสารของเราให้เป็น vector embeddings โดยใช้ Ollama เราจะใช้โมเดล “mistralai/Mistral-7B-v0.1” ซึ่งเป็นโมเดลขนาดเล็กแต่มีประสิทธิภาพสูง เราสามารถรัน Ollama ได้อย่างง่ายดายด้วย PHP ตามคำแนะนำในบทความ Run Ollama AI Locally with PHP - No OpenAI Needed!
db["my_index"]->insert(
['text' => $document, 'embedding' => $embedding]
);
?>
Output ที่ได้คือ vector embedding ของเอกสารเรา ซึ่งจะถูก save ลงใน ChromaDB ในตัวอย่างนี้ เราใช้ `curl_exec` เพื่อส่ง request ไปยัง Ollama instance แต่เราสามารถใช้ library อื่นๆ ที่มีประสิทธิภาพมากกว่าได้
จริงๆ ผมไม่ค่อยชอบวิธีนี้เพราะการใช้ `curl_exec` นั้นค่อนข้างยุ่งยาก แต่ก็เป็นวิธีที่ง่ายที่สุดในการเริ่มต้นใช้งาน Ollama ด้วย PHP นอกจากนี้ เรายังสามารถใช้ Ollama ผ่านทาง command line และเรียกใช้งานผ่าน PHP script ได้
การค้นหาด้วย Vector Search
เมื่อข้อมูลของเราถูก index แล้ว เราสามารถค้นหาเอกสารที่เกี่ยวข้องกับคำถามของเราได้ด้วย Vector Search
db["my_index"]->similaritySearch($queryEmbedding, 5);
// 4. แสดงผลลัพธ์
echo "ผลการค้นหา:
";
foreach ($results as $result) {
echo "" . $result['text'] . "
";
}
?>
Output ที่ได้คือรายการเอกสารที่คล้ายกับคำถามของเรามากที่สุด เราสามารถปรับเปลี่ยนจำนวนผลลัพธ์ที่ต้องการได้โดยเปลี่ยนค่าใน `similaritySearch()` method
สิ่งที่ควรระวัง / ข้อผิดพลาดที่เจอบ่อย
จากการทำงานจริง ผมพบปัญหาเหล่านี้บ่อยครั้ง:
- Port Conflict: Ollama และ ChromaDB อาจใช้ port เดียวกัน ทำให้เกิด conflict ได้ เราควรตรวจสอบ port ที่ใช้และเปลี่ยน port ของ ChromaDB หรือ Ollama ให้แตกต่างกัน
- Embedding Size: โมเดลภาษาขนาดใหญ่มักจะสร้าง vector embeddings ที่มีขนาดใหญ่ ขนาดของ vector embeddings อาจส่งผลต่อประสิทธิภาพของการค้นหา เราควรเลือกโมเดลที่เหมาะสมกับขนาดของข้อมูลของเรา
- ChromaDB Version: การใช้ ChromaDB เวอร์ชั่นเก่าอาจมีปัญหาเกี่ยวกับประสิทธิภาพและ compatibility ควรใช้ ChromaDB เวอร์ชั่นล่าสุดเสมอ
- Data Preprocessing: การทำ data preprocessing ที่ไม่ถูกต้อง (เช่น การใช้ whitespace ที่ไม่ถูกต้อง) อาจทำให้ vector embeddings ไม่ถูกต้องและส่งผลต่อประสิทธิภาพของการค้นหา
คำถาม
คำถาม: ระบบนี้เหมาะกับองค์กรขนาดไหน?
คำตอบ: ระบบนี้เหมาะสำหรับองค์กรขนาดกลางถึงใหญ่ที่มีข้อมูลจำนวนมาก และต้องการเครื่องมือที่รวดเร็วและแม่นยำในการค้นหาข้อมูล
คำถาม: ผมสามารถใช้ Vector Database อื่นได้ไหม?
คำตอบ: แน่นอน คุณสามารถใช้ Vector Database อื่นได้ เช่น Pinecone หรือ Weaviate แต่คุณจะต้องปรับเปลี่ยน code เพื่อให้เข้ากับ Vector Database ที่คุณเลือก
คำถาม: ผมจะปรับแต่งโมเดลภาษาที่ใช้ในการสร้าง vector embeddings ได้อย่างไร?
คำตอบ: คุณสามารถปรับแต่งโมเดลภาษาได้โดยการฝึกโมเดลด้วยข้อมูลเฉพาะของบริษัทของคุณ หรือใช้โมเดลภาษาอื่นๆ ที่มีประสิทธิภาพสูงกว่า
Keyword: PHP, Vector Search, Ollama, ChromaDB, Vector Database, AI, Local AI, Semantic Search
สรุปแล้ว การสร้างระบบค้นหาภายในองค์กรด้วย PHP, Vector Search และ Ollama เป็นวิธีที่คุ้มค่าและยืดหยุ่น โดยเฉพาะอย่างยิ่งเมื่อเราต้องการลดค่าใช้จ่ายและเพิ่มความปลอดภัยของข้อมูล ผมแนะนำให้ลองทำตามขั้นตอนเหล่านี้เพื่อสร้างระบบค้นหาภายในองค์กรของคุณเอง
ในอนาคต ผมจะศึกษาเพิ่มเติมเกี่ยวกับการใช้ Vector Databases อื่นๆ และการปรับแต่งโมเดลภาษาเพื่อเพิ่มประสิทธิภาพของระบบค้นหาของเรา นอกจากนี้ ผมจะพัฒนา tools ที่ช่วยให้การสร้างและจัดการระบบค้นหาภายในองค์กรเป็นเรื่องง่ายยิ่งขึ้น