Symbolic Index for LLM Knowledge — بنية بحث عصبية-رمزية.

يبحث بأعداد صحيحة 64 بت. لا حاجة لقاعدة بيانات متجهية، ولا رسم بياني ANN، ولا نموذج تضمين.

مستودع GitHub

القضية الجوهرية

لم يكن البحث مشكلة صعبة — بل كان عرضًا لبيانات بلا بنية. عند إسناد بنية 64 بت لحظة التسجيل، يختفي العرض.

results = index[(index & mask) == pattern]

بحث في 100 مليون كيان من ويكي بيانات بذاكرة 1.3 غيغابايت في أقل من ثانية. Python (NumPy) وحدها تتفوق على قواعد بيانات C++/Rust المتجهية المحسّنة — انتصار للبنية المعمارية.

لماذا ليس تضمين المتجهات؟

تضمين المتجهات يطمس البنية.

"صلاح الدين الأيوبي قائد عسكري في العصور الوسطى"
 → الإنسان يدرك فورًا: عربي، قائد عسكري، القرن الثاني عشر

نموذج التضمين:
 [0.234, -0.891, 0.445, ..., 0.112] (384 بُعد float)
 → البنية تلاشت. لا يمكن قراءة ما إذا كان شخصًا أم موقعًا.

لاستعادة البنية المطموسة:
 رسم بياني ANN (مثل HNSW وIVF-PQ)، مشفّر متقاطع، مُعيد ترتيب، مرشّح بيانات وصفية...

SILK يحفظ البنية.

SIDX: [Human / military / west_asia / medieval]
 → البنية حية في البتات. يمكن قراءتها.
 → لا حاجة للاستعادة. لأنها لم تُطمس أصلًا.

الجوهر هو عكس الترتيب.

التقليدي: اكتب أولًا → ثم هيكِل لاحقًا (فهرسة)
SILK: هيكِل عند الكتابة → البحث مجاني

تخطيط بتات SIDX

يتبع SIDX مواصفات Entity Node في قواعد GEUL.

[prefix 7 | mode 3 | entity_type 6 | attrs 48]
 MSB(63)                                  LSB(0)
الحقلالبتاتالحجمالوصف
prefix63-577رأس بروتوكول GEUL (ثابت 0001001، يُتجاهل عند البحث)
mode56-543نمط التكميم/العدد (كيان مسجل=0، معرّف، عام، وجودي، إلخ — 8 أنماط)
entity_type53-48664 نوعًا أعلى (Human=0 ~ Election=62, غير مصنف=63)
attrs47-048ترميز سمات حسب النوع (محدد بالكتاب المرجعي)

نطاق البحث: entity_type 6 بت + attrs 48 بت = 54 بت. QID لا يُضمَّن في SIDX ويُخزَّن في مصفوفة منفصلة.

attrs 48 بت — مخطط حسب النوع

Human(0):       subclass 5 | occupation 6 | country 8 | era 4 | decade 4 | gender 2 | notability 3 | ...
Star(12):       constellation 7 | spectral_type 4 | luminosity 3 | magnitude 4 | ra_zone 4 | dec_zone 4 | ...
Settlement(28): country 8 | admin_level 4 | admin_code 8 | lat_zone 4 | lon_zone 4 | population 4 | ...
Organization(44): country 8 | org_type 4 | legal_form 6 | industry 8 | era 4 | size 4 | ...
Film(51):       country 8 | year 7 | genre 6 | language 8 | color 2 | duration 4 | ...

حاليًا تم تحديد تخطيط سمات 5 أنواع. الباقي يُرمَّز بـ entity_type فقط.

البنية المعمارية

في SILK خطان للمعالجة: الترميز (عند الكتابة) والبحث (عند الاستعلام). كلاهما بنفس المبدأ: الرمزي يُمسك البنية، وLLM يعالج المعنى.

خط الترميز (عند الكتابة)
┌──────────────┐   ┌──────────────┐   ┌──────────────┐
│  وسم LLM     │──►│  تحقق VALID  │──►│ ترميز الكتاب │
│  مستند → JSON│   │ قيم صالحة    │   │ JSON → SIDX  │
│  (تصنيف دلالي)│   │ فحص التماسك  │   │ (تجميع البتات)│
│              │   │ هلوسة → رفض  │   │              │
└──────────────┘   └──────────────┘   └──────────────┘
   LLM يُوسم       الكود يتحقق      ترميز بالكتاب المرجعي
خط البحث (عند الاستعلام)
┌──────────────┐   ┌──────────────┐   ┌──────────────┐
│  تفسير الاستعلام│──►│ مرشّح بت AND │──►│  حكم LLM     │
│  بحث الكتاب  │   │  NumPy SIMD  │   │ المرشحون فقط │
│  + مساعدة LLM│   │100M → عشرات │   │ عشرات → إجابة│
└──────────────┘   └──────────────┘   └──────────────┘
   استخلاص المعنى    ترشيح واسع       حكم دقيق

الاستراتيجية الجوهرية: ترشيح واسع ببت AND على SIDX بلا فقدان، ثم LLM يحكم على المرشحين القلائل فقط.

كل طرف يؤدي ما يتقنه:
 الإنسان: تصميم البنية (الكتاب المرجعي)
 LLM:  التصنيف الدلالي (الوسم) + الحكم الدلالي (البحث)
 الكود: التحقق القاعدي (VALID) + تجميع البتات
 CPU:  المقارنة الجماعية (NumPy SIMD)

الترميز: وسم LLM ← تحقق VALID

يقرأ LLM المستند ويُوسمه بصيغة JSON. يُجري VALID فحصًا آليًا وفق الكتاب المرجعي. القيم غير الموجودة في الكتاب، وانتهاكات التماسك بين الأنواع، وانتهاكات القيود لا يمكنها فيزيائيًا الدخول إلى الفهرس.

وسم LLM:  {"type": "Human", "occupation": "military", "country": "egypt"}
VALID:    occupation="military" ∈ الكتاب? ✓  country="egypt" ∈ الكتاب? ✓
          Human يحتوي حقل constellation? ✗ رفض
الترميز:   "military"→6 بت، "egypt"→8 بت من الكتاب → تجميع البتات → SIDX uint64

قد يهلوس LLM. لكن VALID يقوم بدور الحارس فاحتمال تلويث الفهرس يساوي صفرًا. فقط JSON الذي يجتاز VALID يُرمَّز إلى عدد صحيح SIDX 64 بت وفق الكتاب المرجعي.

البحث: ترشيح واسع، LLM يُضيّق

1. استخلاص معنى الاستعلام   بحث الكتاب 80% / مساعدة LLM 20%
2. تجميع قناع البتات        حتمي — خوارزمية
3. بت AND عبر NumPy         حتمي — مسح شامل لـ 100M في 20ms
4. حكم LLM النهائي          المرشحون القلائل فقط — حكم دلالي دقيق

80% من البحث استعلامات هيكلية

"صلاح الدين"      → Q484523 exact match. بت AND. انتهى.
"أخبار سامسونج"   → org/company + doc_meta/news. بت AND. انتهى.
"قمة بايدن-شي"    → Q6279 ∩ Q15031 ∩ meeting. تقاطع. انتهى.
استعلامات هيكلية (80%): بت AND في SILK تكفي. لا حاجة لـ LLM.
استعلامات دلالية (15%): SILK يُقلّص المرشحين → LLM يحكم في 5-10 حالات.
استعلامات توليدية  (5%): SILK يُحدّد المستند → LLM يُولّد.

Multi-SIDX

يحمل المستند/الحدث الواحد عدة SIDX.

مقال إخباري: "اجتماع قادة سامسونج وNVIDIA وهيونداي":

SIDX[0]: [Human / business / east_asia ]  لي جاي يونغ
SIDX[1]: [Org   / company / east_asia ]  سامسونج
SIDX[2]: [Human / business / n_america]  جنسن هوانغ
SIDX[3]: [Org   / company / n_america]  NVIDIA
SIDX[4]: [Human / business / east_asia ]  تشونغ إي سون
SIDX[5]: [Org   / company / east_asia ]  هيونداي
SIDX[6]: [Event / meeting / east_asia ]  الاجتماع

كلها SIDX بنفس 64 بت. نفس الفهرس. نفس بت AND للبحث. حقل entity_type يُميّز الكيانات (Human, Org) عن الأحداث (Event).

هيكل الفهرس

sidx_array = np.array([...], dtype=np.uint64)  # 108.8M × 8B = 870MB
qid_array  = np.array([...], dtype=np.uint32)  # 108.8M × 4B = 435MB
# إجمالي ~1.3GB ذاكرة
بناء الفهرس:
 Elasticsearch: تقطيع → تحليل → فهرس معكوس → دمج شرائح
 Pinecone:      تضمين → رسم بياني HNSW → تجميع عنقودي
 SILK:          sort

لا هياكل بيانات. مصفوفة مرتبة واحدة.

مقارنة مع قواعد البيانات المتجهية

SILKقاعدة بيانات متجهية
حجم الفهرس (تريليون سجل)12TB1.5PB (125 ضعف)
بناء الفهرسsortHNSW لأيام
البدء الباردفتح الملف فورًابناء الرسم البياني لساعات
المسح المجزأممكن (النتائج متطابقة)مستحيل (انقطاع الرسم البياني)
شروط مركبةتقاطع (دقيق)ضغط في متجه واحد (تقريبي)
النتائجدقيقة (عمليات مجموعات)تقريبية (ترتيب تشابه)
المراجعةJSON (صندوق أبيض)مستحيلة (صندوق أسود)
بت AND لا تعتمد على الترتيب، بلا حالة، قابلة للجمع.
قاعدة متجهية: الرسم البياني كاملًا يجب أن يكون في الذاكرة. التجزئة = تدمير.
SILK:    اقطع من أي مكان ويعمل. التجزئة = بطء فقط. النتائج متطابقة.

خط المراجعة

تضمين المتجهات صندوق أسود لا يمكن مراجعته. SIDX بصيغة JSON يمكن مراجعته.

المرحلة 1 — وسم LLM صغير    Llama 8B / GPT-4o-mini. دقة 85-90%.
المرحلة 2 — فحص VALID الآلي  قيم صالحة، تماسك، قيود. التكلفة $0.
المرحلة 3 — مراجعة LLM كبير  فقط confidence=low. دقة 99%+.

VALID هو الحارس: الهلوسات خارج القيم الصالحة للكتاب لا يمكنها فيزيائيًا دخول الفهرس.

الرخصة

MIT — مستودع GitHub