ما وراء الـ Embedding: هندسة بحث موجه (Vector Search) عالي الأداء على الجهاز باستخدام Expo و SQLite VSS
اكتشف كيفية بناء معمارية بحث دلالي (Semantic Search) جاهزة للإنتاج وتعطي الأولوية للخصوصية مباشرة على عتاد الجوال. أشارككم رحلتي التقنية في دمج SQLite VSS مع Expo لتجاوز مشكلات التأخير (Latency) وتكاليف قواعد بيانات الـ Vector السحابية.

ما وراء الـ Embedding: هندسة بحث موجه (Vector Search) عالي الأداء على الجهاز باستخدام Expo و SQLite VSS
خلال العام الماضي، كان قطاع التقنية مهووساً بـ RAG (Retrieval-Augmented Generation). ولكن بينما كنت أعمل على توسيع ميزات الذكاء الاصطناعي (AI) في تطبيقات الجوال، اصطدمت بحائط سد: التأخير (Latency) وتكلفة الاتصال بمخزن Vector سحابي (مثل Pinecone أو Weaviate) لكل تفاعل من قبل المستخدم كان يدمر تجربة المستخدم (UX).
أردت أن تكون تطبيقاتي سريعة، وتعمل بدون إنترنت (Offline)، وتضمن الخصوصية أولاً. لم يكن الحل في نسخة سحابية أكبر، بل كان بجلب قاعدة بيانات الـ Vector إلى الـ Edge. وتحديداً، إلى هاتف المستخدم باستخدام Expo و SQLite VSS.
في هذه المقالة، سأصحبكم في جولة حول الاختراقات الهندسية التي حققتها لتشغيل بحث دلالي (Semantic Search) عالي الأداء محلياً على iOS و Android.
المعمارية: لماذا SQLite VSS؟
بينما توجد مكتبات مثل HNSWlib للغة C++، فإن دمجها في بيئة React Native غالباً ما يبدو وكأنك تحارب نظام البناء (Build System). لقد غيرت SQLite VSS قواعد اللعبة بالنسبة لي. إنها إضافة (Extension) تجلب Faiss (Facebook AI Similarity Search) إلى SQLite.
بما أن expo-sqlite هي المعيار الذهبي للتخزين المحلي في Expo، فإن إضافة VSS تسمح لنا بالاحتفاظ ببياناتنا المترابطة (Relational Data) والـ Vector Embeddings في نفس قاعدة البيانات المتوافقة مع ACID. لا مزيد من مشكلات المزامنة بين حالتك المحلية وفهرس Vector منفصل.
الخطوة 1: الجسر الأصيل (Native Bridge)
لا يمكنك ببساطة عمل npm install لـ SQLite VSS وتوقع أنها ستعمل في بيئة Expo المدارة (Managed Workflow). تحتاج إلى ترجمة (Compile) الإضافة لمعماريات ARM64. يعتمد نهجي على استخدام Expo Config Plugins لحقن الملف الثنائي (Native Binary) والتأكد من أن إصدار SQLite يدعم آلية تحميل الإضافات.
الخطوة 2: تصميم المخطط (Schema) من أجل الأداء
في أجهزة الجوال، تعد الـ RAM هي المورد الأغلى لديك. تخزين الـ Vectors ذات الـ 1536 بعداً (مثل text-embedding-3-small من OpenAI) في عمود BLOB قياسي هو أمر بطيء. توفر SQLite VSS واجهة جدول افتراضي (Virtual Table) متخصصة.
إليكم كيف قمت بهيكلة الفهرس لتطبيق تدوين ملاحظات:
الخطوة 3: تنفيذ البحث
يحدث السحر مع دالة vss_search. من خلال خبرتي، مفتاح السرعة هو تقليل نطاق البحث. عبر استخدام استعلام فرعي (Subquery) للتصفية بناءً على البيانات الوصفية (Metadata) الخاصة بالمستخدم قبل الوصول إلى فهرس الـ Vector، قمت بتقليل تأخير البحث (Latency) بنسبة 40% تقريباً على أجهزة Android المتوسطة.
اختراقات ونقاط الألم
1. ضريبة التسلسل (Serialization Tax)
تمرير المصفوفات الكبيرة من الـ JS thread إلى الـ Native SQLite thread عبر الـ Bridge هو أمر مكلف. وجدت أن استخدام Float32Array وتحويلها إلى Base64 string (أو binary buffer مباشر إذا كان مشغل SQLite يدعم ذلك) هو أسرع بكثير من JSON.stringify للمجموعات الكبيرة.
2. الـ Quantization هو صديقك
إذا لم تكن بحاجة لدقة 99.9%، فكر في الـ Product Quantization (PQ). تقليل دقة الـ Vectors المخزنة من 32-bit floats إلى 8-bit integers يمكن أن يقلص حجم قاعدة البيانات بـ 4 أضعاف مع تأثير ضئيل على صلة نتائج البحث.
3. الفهرسة الخلفية (Background Indexing)
توليد الـ Embeddings يستهلك المعالج (CPU) بكثافة. أقوم دائماً بتغليف عملية توليد الـ Embedding والإدخال في SQLite ضمن وظيفة BackgroundFetch أو Expo TaskManager. هذا يمنع واجهة المستخدم (UI thread) من البطء أثناء إعادة بناء الفهرس المحلي.
النتائج
من خلال نقل بحث الـ Vector إلى الجهاز، حققت:
- التأخير (Latency): نتائج بحث في أقل من 50ms (انخفاضاً من 300ms-800ms عبر الـ API).
- التكلفة: 0 دولار كرسوم استضافة لقواعد بيانات الـ Vector.
- الخصوصية: بيانات المستخدم لا تغادر الجهاز أبداً لأغراض الاسترجاع.
الخاتمة
بناء تطبيقات جوال مدعومة بالذكاء الاصطناعي (AI) لا يعني بالضرورة الاستعانة بمصادر سحابية خارجية لذكاء تطبيقك. باستخدام Expo و SQLite VSS، يمكننا بناء أدوات بحث دلالي متطورة وفائقة السرعة تحترم خصوصية المستخدم وتعمل في أي مكان.
إذا كنت لا تزال تعتمد على واجهات البرمجية (Cloud APIs) لعمليات البحث عن التشابه البسيطة، فقد حان الوقت لنقل هذا المنطق إلى الـ Edge. مستخدموك (وفاتورة السحاب الخاصة بك) سيشكرونك.