สร้างระบบค้นหาภายใน: PHP, Vector Search & Ollama 2026

สร้างระบบค้นหาภายในองค์กรด้วย PHP + Vector Search + Ollama

เมื่อปี 2026 ผมทำงานให้กับบริษัทผลิตชิ้นส่วนยานยนต์ขนาดกลาง ชื่อ “Precision Motors” บริษัทเรามีฐานข้อมูลเอกสารขนาดใหญ่มาก ตั้งแต่คู่มือการใช้งานผลิตภัณฑ์, รายงานทางเทคนิค, เอกสารการประชุม และแม้กระทั่งอีเมลเก่าๆ ทีมการตลาดต้องการเครื่องมือที่ช่วยให้พนักงานสามารถค้นหาข้อมูลที่เกี่ยวข้องได้อย่างรวดเร็ว แต่ระบบค้นหาเดิมของเรา (ใช้ ElasticSearch) ทำงานช้ามาก และไม่สามารถจับความหมายของคำถามได้ดีนัก ทำให้การค้นหาข้อมูลเป็นเรื่องเสียเวลาและทำให้การตัดสินใจล่าช้า ผมและทีมต้องหาทางออกอย่างเร่งด่วน

บทความนี้จะแนะนำวิธีการสร้างระบบค้นหาภายในองค์กรด้วย PHP, Vector Search และ Ollama ซึ่งเป็นเครื่องมือที่ช่วยให้เราสามารถรันโมเดลภาษาขนาดใหญ่ได้โดยไม่ต้องพึ่งพา API ของ OpenAI หรือ Google ซึ่งช่วยลดค่าใช้จ่ายและเพิ่มความปลอดภัยของข้อมูลได้ นอกจากนี้ เรายังสามารถปรับแต่งโมเดลให้เข้ากับข้อมูลเฉพาะของบริษัทเราได้อีกด้วย

Prerequisites

men and women sitting and standing by the table looking happy while staring at laptop
Photo by Windows on Unsplash

ก่อนเริ่มทำ เราต้องมีสิ่งต่อไปนี้:

  • 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

woman in black blazer sitting at the table
Photo by LinkedIn Sales Solutions on Unsplash

ขั้นตอนแรกคือการแปลงเอกสารของเราให้เป็น 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 ได้

เมื่อข้อมูลของเราถูก 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 ที่ช่วยให้การสร้างและจัดการระบบค้นหาภายในองค์กรเป็นเรื่องง่ายยิ่งขึ้น

Boonyadol Morruchai (Senior Full-stack Developer)

ผมเป็น IT Professional ที่มีประสบการณ์ในสายงานมากว่า 20 ปี เชี่ยวชาญการออกแบบระบบ Enterprise และ Automation Tools ปัจจุบันมุ่งเน้นการประยุกต์ใช้ AI (Gemini/OpenAI) เพื่อเพิ่มประสิทธิภาพในการเขียน Code และการจัดการข้อมูลขนาดใหญ่ บล็อกนี้สร้างขึ้นเพื่อแชร์ "ประสบการณ์หน้างาน" ปัญหาจริงที่เจอ และวิธีแก้ปัญหาฉบับ Senior Dev ครับ

แสดงความคิดเห็น

ใหม่กว่า เก่ากว่า