في المشهد سريع التطور للذكاء الاصطناعي، أصبحت القدرة على إجراء البحث الدلالي ومطابقة التشابه مطلباً حاسماً للتطبيقات الحديثة. بينما اكتسبت قواعد البيانات المتجهة المخصصة مثل Pinecone أو Milvus زخماً، هناك بديل مقنع يتجاهله العديد من المطورين: توسيع نطاق أكثر قواعد البيانات العلائقية مفتوحة المصدر تقدماً بإضافة قدرات متجهة عبر pgvector.
يستكشف هذا المنشور كيفية الاستفادة من pgvector لتحويل مثيل PostgreSQL الخاص بك إلى مخزن متجهي قوي، مما يمكّنك من بناء خطوط أنابيب التوليد المعزز بالاسترجاع (RAG)، ومحركات التوصية، وميزات البحث الدلالي دون الحاجة إلى إدارة بنية تحتية منفصلة.
ما هو pgvector؟
pgvector هو امتداد مفتوح المصدر لـ PostgreSQL يدعم تخزين والبحث عن التضمينات المتجهة (vector embeddings). يتيح لك تخزين متجهات بأي أبعاد وإجراء عمليات بحث عن التشابه باستخدام ثلاثة مقاييس مسافة مميزة:
- مسافة L2: المسافة الإقليدية بين متجهين.
- الجداء الداخلي: الجداء القياسي (dot product) لمتجهين.
- مسافة جيب التمام: تشابه جيب التمام بين متجهين، وهو ما يُفضل غالباً للتضمينات الطبيعية (normalized) مثل تلك القادمة من OpenAI أو Sentence Transformers.
من خلال التكامل المباشر مع PostgreSQL، يتيح لك pgvector دمج البيانات العلائقية التقليدية (ملفات تعريف المستخدمين، البيانات الوصفية) مع البيانات المتجهة عالية الأبعاد في استعلام واحد. يلغي هذا الحاجة إلى مزامنة البيانات المعقدة بين قاعدة بيانات علائقية ومحرك بحث متجهي.
إعداد pgvector
يعد تثبيت الامتداد أمراً مباشراً إذا كنت تستخدم إصداراً حديثاً من PostgreSQL (عادةً الإصدار 12 فأعلى). يمكنك تثبيته عبر مدير الحزم الخاص بك أو تجميعه من المصدر. بمجرد التثبيت، يكون تمكينه في قاعدة البيانات أمراً يتطلب أمراً واحداً:
-- تمكين الامتداد في قاعدة البيانات الخاصة بك
CREATE EXTENSION vector;
بعد تمكين الامتداد، يمكنك تعريف الأعمدة باستخدام نوع البيانات vector، مع تحديد أبعاد التضمينات الخاصة بك. على سبيل المثال، إذا كنت تستخدم نموذج text-embedding-ada-002 الخاص بـ OpenAI، فستكون للمتجهات لديك 1536 بُعداً.
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
embedding VECTOR(1536),
category VARCHAR(50)
);
إجراء عمليات بحث عن التشابه
تكمن القوة الحقيقية لـ pgvector في قدرته على فهرسة هذه المسافات عالية الأبعاد والبحث فيها بكفاءة. بشكل افتراضي، يستخدم PostgreSQL المسح المتسلسل، ولكن لمجموعات البيانات الكبيرة، يجب عليك استخدام الفهارس HNSW (العالم الصغير القابل للتنقل الهرمي) أو IVFFlat.
لمعظم حالات الاستخدام، يوفر HNSW أفضل توازن بين السرعة والدقة. إليك كيفية إنشاء فهرس:
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);
بعد الفهرسة، يمكنك إجراء بحث عن التشابه. يعثر الاستعلام التالي على المستندات الخمسة الأكثر تشابهاً مع متجه استعلام معين:
SELECT id, content, 1 - (embedding <> '[0.1, 0.2, ...]'::vector) AS similarity
FROM documents
ORDER BY embedding <> '[0.1, 0.2, ...]'::vector
LIMIT 5;
لاحظ استخدام المشغل <> لمسافة جيب التمام. يتيح هذا لـ PostgreSQL ترتيب النتائج حسب درجة التشابه مباشرة، مما يجعل التكامل مع أطر عمل ORM أو استعلامات SQL الخام أمراً سهلاً للغاية.
اعتبارات عملية وحدود
بينما يعد pgvector أداة قوية، فهو ليس حلاً سحرياً. إنه الأنسب لأحمال العمل حيث تكون بياناتك المتجهة مرتبطة بالفعل ارتباطاً وثيقاً بالبيانات العلائقية المهيكلة. إذا كنت تتعامل مع مليارات المتجهات التي تتطلب توسعاً أفقياً هائلاً أو تسريعاً متخصصاً للأجهزة، فقد تظل قاعدة البيانات المتجهة المخصصة هي الخيار الأفضل.
ومع ذلك، فإن الغالبية العظمى من التطبيقات—خاصة تلك التي تعمل بالفعل على PostgreSQL—لا تحتاج إلى عبء صيانة قاعدة بيانات منفصلة. يتيح لك pgvector الحفاظ على بنية بسيطة ومتسقة ومتوافقة مع خصائص ACID.
الخاتمة
يمثل pgvector قفزة كبيرة نحو تنوع قواعد البيانات. من خلال جلب قدرات البحث المتجهي إلى PostgreSQL، فإنه يمكّن المطورين من بناء ميزات متقدمة مدعومة بالذكاء الاصطناعي دون تعقيدات التخزين متعدد اللغات (polyglot persistence). سواء كنت تبني نظام توصيات بسيطاً أو تطبيق RAG معقداً، فإن pgvector يوفر حلاً قوياً وناضجاً وفعالاً يستحق مكاناً في مجموعة أدوات التطوير الخاصة بك.
ابدأ بالتجربة مع مجموعات بيانات صغيرة لفهم مقايضات الفهرسة، ثم قم بالتوسع تدريجياً مع نمو تطبيقك. مستقبل تطبيقات الذكاء الاصطناعي هو علائقي، وpgvector يقود هذه الموجة.