مقارنة تقنية لتحدي RAG: مراجعة استرجاعية قابلة للتكرار

مراجعة استرجاعية تقنية قابلة للتكرار لتحدي RAG ضمن AINC'26 — مقارنة بين قواعد المسابقة، وامتثال الكود، ومعايير الاسترجاع بين حلّي (Noobmaster) والحل الفائز.

Author: Mohamed Yaakoubi

Published: 2026-03-29

Category: AI & Data Engineering

Tags: RAG, PostgreSQL, pgvector, بحث دلالي, هندسة البيانات, اختبار أداء, NLP, Python

Reading time: 25 minutes

AINC'26 · تحدي RAG · مراجعة استرجاعية تقنية

مقارنة تقنية لتحدي RAG

مراجعة استرجاعية تقنية قابلة للتكرار لتحدي RAG ضمن AINC'26 — مقارنة بين قواعد المسابقة، وامتثال الكود، ومعايير الاسترجاع بين حلّي (Noobmaster) والحل الفائز.

RAGPostgreSQLpgvectorبحث دلاليهندسة البيانات
مرّر للقراءة
00 —

ما الذي يتناوله هذا المنشور

شاركتُ في تحدي RAG (التوليد المعزز بالاسترجاع) المنظَّم من قِبل ARSII بالشراكة مع Rose Blanche Group. كان التحدي يحتوي على قواعد مكتوبة وواضحة تحدد القيود التقنية بدقة. الحل الفائز لا يستخدم PostgreSQL، في حين أن ملف PDF الخاص بالمسابقة ينص صراحةً على أن استخدامها شرط إلزامي. أثرتُ هذه المسألة مع المنظمين، ولم يصلني أي رد حتى تاريخ نشر هذا المنشور.

يعرض هذا المنشور الأدلة — قواعد المسابقة، والكود البرمجي، ونتائج الاختبارات القابلة للتكرار — حتى يتمكن أي شخص من التحقق من هذه التصريحات بشكل مستقل.

يركز هذا التحليل على المخرجات التقنية — الكود، وملفات الإعداد، ومقاييس الاسترجاع القابلة للقياس — وليس على أي مشارك بعينه.

01 —

قواعد المسابقة

اقترح هذا التحدي Rose Blanche Group (STE AGRO MELANGE TECHNOLOGIE). الجائزة: قسيمة شراء بقيمة 1000 دينار تونسي.

وصف التحدي الرسمي

Développer un module de recherche sémantique permettant d'interroger cette base vectorielle (RAG)
AR: تطوير وحدة بحث دلالي للاستعلام عن هذه القاعدة المتجهية (RAG)

Dans un contexte où une base documentaire contient un grand volume d'informations [...] L'objectif est de développer un module intelligent capable d'assister l'utilisateur en retrouvant automatiquement les fragments les plus pertinents à partir d'une question formulée en langage naturel.
AR: في سياق تحتوي فيه قاعدة وثائق على حجم كبير من المعلومات [...] الهدف هو تطوير وحدة ذكية قادرة على مساعدة المستخدم عبر استرجاع المقاطع الأكثر صلةً تلقائياً من سؤال صاغه بلغة طبيعية.

ملف PDF التقني الرسمي — القيود الحرفية

يُحدد ملف PDF للمسابقة (Développement d'un Module de Recherche Sémantique pour la Formulation en Boulangerie & Pâtisserie) ما يلي حرفياً:

السياق: Ces fiches ont déjà été : Converties en texte, Découpées en fragments (chunks), Transformées en embeddings, Stockées dans une base PostgreSQL
AR: هذه البطاقات جرى بالفعل: تحويلها إلى نص، وتقطيعها إلى مقاطع (chunks)، وتحويلها إلى تضمينات (embeddings)، وتخزينها في قاعدة بيانات PostgreSQL

الموارد المتاحة: Base de données PostgreSQL — Table : embeddings — Structure : id (Primary Key), id_document (int), texte_fragment (text), vecteur (VECTOR(384))
AR: قاعدة بيانات PostgreSQL — الجدول: embeddings — الهيكل: id (المفتاح الأساسي)، id_document (int)، texte_fragment (text)، vecteur (VECTOR(384))

المعاملات المفروضة: Méthode de similarité : Cosine Similarity — Nombre de résultats à retourner : Top K = 3 — Langage recommandé : Python

نموذج التضمين المطلوب: Modèle imposé : all-MiniLM-L6-v2 — Bibliothèque : sentence-transformers — Dimension : 384

مثال على الاستعلام: Améliorant de panification : quelles sont les quantités recommandées d'alpha-amylase, xylanase et d'Acide ascorbique ?
AR: مُحسِّن الخبز: ما الكميات الموصى بها من alpha-amylase وxylanase وحمض الأسكوربيك؟

قيد قاعدة البيانات ليس مجرد اقتراح. ينص ملف PDF على أن البيانات "Stockées dans une base PostgreSQL" (مخزَّنة في قاعدة بيانات PostgreSQL) ويوفر مخطط جدول دقيقاً بأنواع بيانات تشمل vecteur VECTOR(384) — وهو نوع بيانات لا يوجد إلا في PostgreSQL عبر امتداد pgvector. التحدي بأكمله مُؤطَّر حول الاستعلام عن هذه القاعدة المتجهية في PostgreSQL.

ما الذي يختبره هذا التحدي فعلاً

القيود المذكورة أعلاه ليست اعتباطية. إنها تُحدد مسألة هندسية محددة للغاية: بالنظر إلى نموذج تضمين صغير (22 مليون معامل، 384 بُعداً)، وعمق استرجاع ثابت (K=3)، وقاعدة بيانات PostgreSQL محلية — ما مدى قدرتك على المعالجة المسبقة للبيانات وهيكلتها وتحسينها للحصول على أفضل نتائج استرجاع ممكنة؟

هذا تحدٍّ في هندسة البيانات والتحسين، وليس تمريناً في ربط واجهات برمجية (APIs). النموذج الثابت، وK الثابت، واشتراط قاعدة البيانات المحلية — كلها موجودة تحديداً لتوفير تكافؤ الفرص بين المتسابقين وقياس ما يفعله كل مشارك مع البيانات ذاتها: جودة استخراج PDF، واستراتيجية التقطيع، وطريقة هيكلة التضمينات، ومعالجة الاستعلامات.

لو كان التحدي مجرد بناء نظام RAG، لأمكن لأي أحد توصيل LangChain بواجهة برمجية لنموذج لغوي ضخم (LLM) للحصول على إجابات سلسة في دقائق. لكن هذا النهج لا يتطلب أي تحسين، ويتكبد تكاليف API مرتفعة، ويرسل بيانات مؤسسية ربما تكون حساسة إلى موفرين خارجيين، ولا يُثبت أي فهم لآليات الاسترجاع الجوهرية. المسابقة تلغي هذا المختصر عمداً بفرض إعداد محلي ومكتفٍ بذاته.

المهارة الحقيقية التي يتم اختبارها هي: هل يمكنك جعل نموذج بعشرين ومليوني معامل يتجاوز قدرته الظاهرة من خلال المعالجة الذكية للبيانات وهندسة البحث؟

02 —

الحل الفائز لا يستخدم PostgreSQL

كود الفريق الفائز متاح للعموم على: github.com/AyaZantour/RagProject. إليك ما تفعله طبقة التخزين لديهم فعلاً.

vector_store.py — الأسطر 57–68 (دالة الحفظ)

python
def save(self, path: str) -> None:
    os.makedirs(os.path.dirname(path) if os.path.dirname(path) else ".", exist_ok=True)
 
    np.savez_compressed(f"{path}.npz", embeddings=self.embeddings)
    with open(f"{path}.json", "w", encoding="utf-8") as f:
        json.dump(self.metadata, f, ensure_ascii=False, indent=2)
نتيجة

تُخزَّن المتجهات في ملف NumPy بامتداد .npz. البيانات الوصفية مخزنة في ملف JSON. لا يوجد PostgreSQL، لا psycopg2، لا SQL، لا pgvector.

vector_store.py — الأسطر 94–119 (دالة البحث)

python
def search(self, query: str, top_k: int = 3) -> list:
    # Embed the query
    query_embedding = self.model.encode(
        [query],
        convert_to_numpy=True,
        normalize_embeddings=True
    )
 
    # Cosine similarity (dot product since vectors are normalized)
    similarities = np.dot(self.embeddings, query_embedding.T).flatten()
 
    # Get top-k indices
    top_indices = np.argsort(similarities)[::-1][:top_k]

يُنفَّذ البحث عبر الضرب النقطي لـ NumPy على مصفوفات في الذاكرة. لا استعلام قاعدة بيانات. لا ORDER BY بـ SQL. لا عامل <=> في pgvector.

requirements.txt

text
PyPDF2>=3.0.0
sentence-transformers>=2.2.0
numpy>=1.24.0
flask>=3.0.0
groq>=0.4.0
نتيجة

لا psycopg2. لا مشغّل قاعدة بيانات من أي نوع.

مخطط الجدول المطلوب (من ملف PDF للمسابقة)

sql
CREATE TABLE embeddings (
    id             SERIAL PRIMARY KEY,
    id_document    INT,
    texte_fragment TEXT,
    vecteur        VECTOR(384)
);

النوع VECTOR(384) لا يوجد إلا في PostgreSQL عبر امتداد pgvector. لا يذكر ملف PDF صراحةً pgvector، لكن المخطط يستلزمه ضرورةً. على أي حال، هذا جدول PostgreSQL — وليس ملفات NumPy.

03 —

حلّي — الامتثال الكامل

الكود متاح للعموم على: github.com/mohamedyaakoubi/RBG-ARSII-RAG.

docker-compose.yml — PostgreSQL مع pgvector

yaml
services:
  postgres-vector:
    build: .
    container_name: postgres-vector-db
    environment:
      POSTGRES_USER: rag
      POSTGRES_PASSWORD: ragpassword
      POSTGRES_DB: ragdb
    ports:
      - "5432:5432"

Dockerfile — PostgreSQL 16 + pgvector

dockerfile
FROM postgres:16
 
RUN apt-get update && apt-get install -y \
    git build-essential postgresql-server-dev-16
 
RUN git clone https://github.com/pgvector/pgvector.git \
    && cd pgvector && make && make install
 
COPY init.sql /docker-entrypoint-initdb.d/

init.sql

sql
CREATE EXTENSION IF NOT EXISTS vector;

مخطط الجدول المطلوب بالضبط (database/models.py)

python
cursor.execute(f"""
    CREATE TABLE IF NOT EXISTS embeddings (
        id              SERIAL PRIMARY KEY,
        id_document     INT,
        texte_fragment  TEXT,
        vecteur         vector({config.EMBEDDING_DIMENSION})
    )
""")
ممتثل

يطابق هذا مواصفات ملف PDF للمسابقة حرفاً بحرف.

البحث بتشابه جيب التمام عبر pgvector (database/models.py)

python
cursor.execute("""
    SELECT
        id_document,
        texte_fragment,
        1 - (vecteur <=> %s::vector) AS score
    FROM embeddings
    ORDER BY vecteur <=> %s::vector
    LIMIT %s
""", (query_vector.tolist(), query_vector.tolist(), top_k))

العامل <=> هو عامل مسافة جيب التمام في pgvector — متوافق مع نوع العمود VECTOR(384) واشتراط تشابه جيب التمام في التحدي.

04 —

ملخص الامتثال للقيود

القيد (من ملف PDF)حلّيالحل الفائز
قاعدة بيانات PostgreSQL Docker PostgreSQL 16 + pgvector ملفات NumPy .npz + JSON
embeddings(id, id_document, texte_fragment, vecteur VECTOR(384)) المخطط مطابق تماماً لا يوجد جدول SQL
all-MiniLM-L6-v2, 384d
تشابه جيب التمام عامل <=> في pgvector np.dot() على متجهات مُوحَّدة
Top K = 3
Python
إعادة نص المقطع + درجة التشابه (يُضيف أيضاً إجابات مُولَّدة بواسطة LLM خارجي)
لا اعتماد على API خارجي بالكامل دون اتصال يعتمد على Groq API + Llama 3.3 70B
نتيجة رئيسية

الحل الفائز لا يستخدم PostgreSQL، في حين أن ملف PDF للمسابقة ينص على أنها شرط إلزامي. هذه حقيقة ثنائية قابلة للتحقق — يمكن لأي شخص مراجعة الكود.

05 —

جودة الاسترجاع — اختبار أداء قابل للتكرار

تم اختبار كلا الحلين بنفس 16 استعلاماً، ونفس نموذج التضمين (all-MiniLM-L6-v2)، وK=3. الدرجة = تشابه جيب التمام للمقطع الأول المُسترجَع (R1). القيمة الأعلى تعني استرجاعاً أفضل.

طريقة إعادة التشغيل

الحل الفائز:

  • استنسخ github.com/AyaZantour/RagProject
  • pip install -r requirements.txt
  • شغّل python app.py — يُبنى الفهرس تلقائياً عند أول تشغيل
  • أرسل طلب POST إلى /search بصيغة {"query": "سؤالك"} أو استخدم واجهة الويب

حلّي:

  • استنسخ github.com/mohamedyaakoubi/RBG-ARSII-RAG
  • شغّل docker-compose up -d لتشغيل PostgreSQL
  • pip install -r requirements.txt
  • python main.py (يُشغّل الاستيعاب ثم يُشغّل واجهة Streamlit)

نتائج الاختبار

0.7695متوسط درجتي (R1)
0.5480متوسط درجة الفائز
+40.4%أفضليتي
#الاستعلامدرجتيدرجة الفائزΔ
1استعلام مثال المسابقة (alpha-amylase + xylanase + حمض الأسكوربيك)0.93300.5210+0.4120
2جرعة الليباز (بالفرنسية)0.77580.4912+0.2846
3جرعة الزيلاناز (بالفرنسية)0.81780.4980+0.3198
4الغرض من حمض الأسكوربيك (بالفرنسية)0.73950.5949+0.1446
5تأثير الزيلاناز على حجم الخبز (بالفرنسية)0.69170.3494+0.3423
6جرعة Alpha-amylase (بالإنجليزية)0.77860.5689+0.2097
7ظروف التخزين AF1100.68180.4356+0.2462
8جرعة الترانسغلوتاميناز (بالفرنسية)0.82090.4197+0.4012
9مسببات الحساسية0.76490.5399+0.2250
10الرقم الهيدروجيني الأمثل للزيلاناز0.61880.5310+0.0878
11تحسين الملمس بالليباز0.67180.6049+0.0669
12مدة الصلاحية0.81430.6130+0.2013
13نشاط Alpha-amylase (بالفرنسية)0.76080.6067+0.1541
14المصدر الميكروبي للزيلاناز0.79170.7230+0.0687
15دمج الأميلاز + الزيلاناز (بالإنجليزية)0.93300.6472+0.2858
16التغليف0.71750.6232+0.0943
حلّي يتفوق في جميع الاستعلامات الـ16. الفارق الأكبر يظهر في الاستعلامات الفرنسية والاستعلامات متعددة الكيانات.
06 —

مدى مفيدية الإجابات — ما الذي يُعيده كل نظام فعلاً

بعيداً عن درجات التشابه، السؤال الجوهري هو: هل يُجيب المقطع المُسترجَع فعلاً على سؤال المستخدم؟

6.1 استعلام مثال المسابقة

الاستعلام — المثال الحرفي من ملف PDF للمسابقة
AR: يطلب جرعات ثلاثة إنزيمات محددة.
حلّيالحل الفائز
R1Dosage alpha-amylase (BVZyme AF330) boulangerie panification : 2–10 (0.9330)Product Description Enzyme preparation based on Maltogenic Amylase… Improve freshness… (0.5210)
R2Dosage xylanase (BVzyme HCF400) boulangerie panification : 15–35 (0.9185)رأس TDS للزيلاناز (0.5075)
R3Dosage acide ascorbique (vitamine C, E300) boulangerie panification : 50–75 ppm (0.8635)رأس TDS للزيلاناز (0.5054)
هل يشمل alpha-amylase؟ مع نطاق الجرعة يُعيد Maltogenic Amylase (إنزيم مختلف)
هل يشمل الزيلاناز؟ مع نطاق الجرعةجزئياً — رأس المنتج فقط، بدون جرعة
هل يشمل حمض الأسكوربيك؟ مع نطاق الجرعة غائب تماماً
هل تمت الإجابة على الإنزيمات الثلاثة؟
حلّي يُعيد 3 إجابات مباشرة مع نطاقات جرعات دقيقة للإنزيمات الثلاثة المطلوبة. يُعيد الحل الفائز وصف منتج Maltogenic Amylase (إنزيم خاطئ) ورأسَي جدول الزيلاناز بدون بيانات الجرعة.

6.2 الاستعلامات الفرنسية — معالجة اللغة

الاستعلام FR-1
AR: ما جرعة الليباز للخبز؟
حلّيالحل الفائز
R1Dosage lipase (L65pdf) boulangerie panification : 5–50Dosages Recommandés (ppm)… — من ملف PDF حمض الأسكوربيك، وليس الليباز
الإنزيم صحيح؟ الليباز، 3 منتجات مختلفة يُعيد جدول جرعات حمض الأسكوربيك
سُئل الحل الفائز عن الليباز فأعاد وثيقة حمض الأسكوربيك. هذه نتيجة لكون all-MiniLM-L6-v2 مُحسَّناً للغة الإنجليزية — الآلية وتأثيرها على الاستعلامات الفرنسية مفصَّلة في القسم 8.
الاستعلام FR-4
AR: ما تأثير الزيلاناز على حجم الخبز؟ (الدرجات: 0.6917 مقابل 0.3494)
حلّيالحل الفائز
R1BVzyme HCF MAX X (xylanase): Bread Improvement 1–15ppmxyder si dosage excessif (mie collante, défauts) — من قسم الآثار الجانبية لحمض الأسكوربيك
هل يُجيب على السؤال؟ بيانات تحسين الخبز بالزيلاناز تحذيرات جرعة حمض الأسكوربيك الزائدة

6.3 استعلامات المنتجات المحددة

الاستعلام U-1
"What are the storage conditions for BVZyme AF110?"
حلّيالحل الفائز
R1BVZyme AF110 (alpha-amylase) storage conditions and shelf life: minimum durability: 24 months. Store in a cool, dry place (below 20°C).BVZyme A FRESH 202 is an amylolytic enzyme… — منتج خاطئ تماماً
المنتج صحيح؟ AF110 تحديداً يُعيد A FRESH 202
الاستعلام U-7
AR: ما النشاط الإنزيمي لـ alpha-amylase؟
حلّيالحل الفائز
R1BVZyme AF330 (alpha-amylase): Activity 11900 FAU/gEnzyme preparation based on Maltogenic Amylase… — نوع إنزيم خاطئ
R2BVZyme AF220 (alpha-amylase): Activity 11000 FAU/gBVZyme AF110… alpha-amylase (0.5860)
R3BVZyme AF110 (alpha-amylase): Activity 150000 SKB/gBVZyme AF220… alpha-amylase (0.5837)
هل تحتوي على بيانات؟ 3 منتجات بقيم النشاط أوصاف منتجات بدون أرقام نشاط

6.4 ملخص تقييم مدى مفيدية الإجابات

المعيارحلّيالحل الفائز
الإنزيم الصحيح في النتائج16/16 استعلام~11/16 استعلام
بيانات قابلة للاستخدام في R114/16 (جرعات، قيم نشاط، مواصفات تخزين)4/16 (معظمها أوصاف منتجات عامة)
المنتج الصحيح عند السؤال عن منتج محدد (AF110 → AF110) (AF110 → A FRESH 202)
معالجة الاستعلامات الفرنسيةيترجم إلى الإنجليزية، يبحث باللغتينلا معالجة — يُدخل الفرنسية الخام في النموذج المُحسَّن للإنجليزية
الاستعلامات متعددة الكياناتيُفكك إلى استعلامات فرعية، نتيجة واحدة لكل كيانأعلى 3 بالتشابه الكلي (غالباً نفس الكيان متكرر)
ملاحظة منهجية

الأرقام الواردة أعلاه استُخلصت في البداية من سكريبت مطابقة تلقائي يقارن الكلمات المفتاحية في المقاطع المُسترجَعة بمصطلحات الإجابات المتوقعة. أنتجت هذه الطريقة نتائج مضخمة للحل الفائز — مثل احتساب "acid" في "fatty acids" مطابقةً لحمض الأسكوربيك، أو احتساب كلمة "xylanase" مطابقةً حتى حين لا يحتوي المقطع على بيانات جرعات. لحل هذه التناقضات، جرت مراجعة يدوية لكل واحد من 52 زوجاً (استعلام + نتيجة): قُرئت المقاطع الثلاثة المُعادة (R1، R2، R3) كاملةً وحُكم عليها مقارنةً بمحتوى ملف PDF المصدر. تُحدد R1 الحكم الأساسي؛ وتُميز R2/R3 بين جزئي وفشل. التقييم اليدوي الكامل متاح في results/manual_helpfulness_assessment.md.

07 —

مقارنة جودة المقاطع

حلّي — مقاطع محورية الكيانات (استخراج pdfplumber)

text
Dosage alpha-amylase (BVZyme AF330) boulangerie panification : 2-10.
text
BVZyme HCB710 (xylanase): Product: Enzyme preparation based on endo-xylanase.
Source: Bacterial xylanase produced by fermenting a selected unique strain of
Bacillus subtilis. Activity: 583 XylH/g.
text
BVZyme AF110 (alpha-amylase) storage conditions and shelf life: minimum
durability: 24 months. Store in a cool, dry place (below 20°C).
نظيف

كل مقطع مركّز دلالياً على نوع واحد من الأسئلة حول منتج واحد.

الحل الفائز — نافذة منزلقة ذات حجم ثابت (استخراج PyPDF2)

text
Product Description
Enzyme preparation based on Maltogenic Amylase
 
 
 Effective material
 
 
 
 
 Improve freshness, enhance softness, and extend shelf life.
 
 
 Dosage
Aspect: free flowing powder
Color: white -cream
 Physicochemical
Moisture: <15%
text
ustries.TECH NICAL DATA SHEET   BVZyme TG MAX64 « Bakery Enzyme
Product Description     BVZyme  TG MAX64 « is used in bakery as a strong
protein cross-linking(connecting residues of the amino acid L-glutamine
to the amino acid £¿L-lysine)Application
تالف

مسافات بيضاء مفرطة، وعناوين مدمجة، وكلمات مقطوعة، وأخطاء ترميز (£¿، «). تقطع النافذة ذات الـ500 حرف عبر الجداول والأقسام دون مراعاة لهيكل الوثيقة.

08 —

سبب الفجوة التقنية

الأمر لا يتعلق بأن أحد الفريقين "أفضل" — بل يتعلق بالخيارات المعمارية التي صُمم التحدي لاختبارها.

استخراج PDF

حلّيالحل الفائز
المكتبةpdfplumber (يحافظ على التخطيط والجداول)PyPDF2 (استخراج نص عادي)
معالجة الجداوليحوّل الجداول إلى نص منظملا معالجة
إزالة الضوضاءإزالة قائمة على Regex للرؤوس والتذييلات ومعلومات الاتصاللا شيء

استراتيجية التقطيع

حلّيالحل الفائز
النهجمحوري الكيانات: 9 فئات منظمة لكل منتج (الهوية، الجرعة، الوظيفة، التخزين، التغليف، مسببات الحساسية، السلامة، الخصائص الفيزيائية، التنظيم)نافذة منزلقة ذات حجم ثابت: 500 حرف، تداخل 50
إجمالي المقاطع924 مقطعاً منظماً → 1,635 تضميناً (مع الإثراء)176 مقطعاً
جودة المقاطعكل مقطع مركّز دلالياً على موضوع واحدتقطع المقاطع بشكل اعتباطي عبر الأقسام

استراتيجية التضمين

حلّيالحل الفائز
النهجتضمينات مزدوجة: المقطع الأصلي + نسخة مُثراة (11 قاعدة إثراء). 924 مقطعاً → 1,635 تضميناًتضمين واحد لكل مقطع. 176 تضميناً إجمالاً
الإثراءتُلحق كلمات مفتاحية مشتقة من محتوى المقطع بمُدخل التضمين (لا تُخزَّن أو تُعاد أبداً). مثلاً، مقطع الجرعة يحصل على إلحاق "dosage quantity ppm recommended amount" للتضمين فقطلا شيء

هندسة البحث

حلّيالحل الفائز
معالجة اللغة86 قاعدة ترجمة فرنسية→إنجليزية + بحث ثنائي اللغة (استعلامات بالفرنسية والإنجليزية، يدمج أفضل النتائج)لا شيء — فرنسية خام في النموذج المُحسَّن للإنجليزية
تفكيك الاستعلاميكشف الاستعلامات متعددة الكيانات، يقسمها إلى استعلامات فرعية، نتيجة واحدة لكل كيانلا شيء — استعلام واحد، أعلى 3 بالتشابه الكلي
API خارجيةلا شيء — مكتفٍ بذاته تماماًGroq API + Llama 3.3 70B لتوليد الإجابات
نموذج all-MiniLM-L6-v2 مُحسَّن للإنجليزية. الاستعلامات الفرنسية على مقاطع إنجليزية تُنتج درجات تشابه أدنى بشكل ملحوظ (~0.40 مقابل ~0.70 لنفس الاستعلام بالإنجليزية). حلّي يسد هذه الفجوة بترجمة وقت الاستعلام. الحل الفائز يُدخل الفرنسية الخام مباشرةً في النموذج.
09 —

النطاق والنهج

الجانبحلّيالحل الفائز
النهج الجوهريهندسة الاسترجاع الصرف — تعظيم جودة ما يمكن لنموذج التضمين إيجادهمعالجة LLM اللاحقة — استخدام Groq API + Llama 3.3 70B لتوليد إجابات بلغة طبيعية من المقاطع
موضع الذكاءفي استراتيجية التقطيع، وقواعد الإثراء، وترجمة الاستعلامات، والتفكيكفي نموذج Llama 3.3 70B عبر استدعاء API خارجي
عرض الإجابةمقاطع خام مع درجات (كما تحدده المسابقة)إجابة بلغة طبيعية مُولَّدة بواسطة LLM
طبقة LLM لا تُعوّض دقة الاسترجاع المنخفضة. لا يمكن لـ LLM إلا أن يُركّب إجابة من المقاطع التي يتلقاها. حين يُعيد استرجاع الحل الفائز إنزيماً غير مطابق (مثلاً، مقاطع حمض الأسكوربيك لاستعلام الليباز) أو منتجاً غير مطابق (مثلاً، A FRESH 202 لاستعلام AF110)، يُولد LLM إجابة بناءً على هذا المُدخل الخاطئ.

لا يملك LLM وصولاً إلى ملفات PDF الأصلية أو أي مصدر معرفي خارجي — يرى المقاطع الثلاث المُسترجَعة فقط. أخطاء الاسترجاع الموثقة في القسم 6 تنتقل مباشرةً إلى الإجابة النهائية. حين يُعيد الاسترجاع محتوى خاطئاً، تَرث الإجابة المُولَّدة بواسطة LLM تلك الأخطاء بصرف النظر عن مدى سلاسة المخرجات.

10 —

قابلية التوسع — كيف يتعامل كل نظام مع المنتجات الجديدة

قابلية التوسع لم تكن متطلباً معلناً في المسابقة. لكن نظام RAG الذي لا يعمل إلا على البيانات التي بُني عليها ليس نظام RAG — بل هو جدول بحث. النقطة الكاملة من التوليد المعزز بالاسترجاع هي أنه يمكن إضافة وثائق جديدة والاستعلام عنها دون تعديل المسار. يختبر هذا القسم تعميم الاسترجاع: هل النهج الهندسي لكل نظام متين فعلاً أم مُعايَر فقط على الـ35 ملف PDF الأصلية؟

أضفتُ 6 ملفات PDF منتجات جديدة لم تكن في مجموعة البيانات الأصلية: GEbake Amyl، وDomax SF Bingo Plus، وTigris Gold، وO-TENTIC DURUM، وصحيفة مواصفات حمض الأسكوربيك، ووثيقة ترخيص مضافات. شُغِّل 10 استعلامات وقُيِّمت بـمدى مفيدية الإجابة: هل تأتي R1 من ملف PDF المنتج الصحيح، وهل يحتوي المقطع فعلاً على الإجابة؟

الاستعلامالإجابة المتوقعةحلّيالحل الفائز
جرعة GEbake Amyl20–100 ppmجزئي — المنتج صحيحجزئي — المنتج صحيح، لا جرعة في المقطع
الرقم الهيدروجيني GEbake AmylpH 5.5–6.5ناجح تماماًجزئي — لا رقم هيدروجيني في المقطع
مدة صلاحية GEbake Amyl12 شهراًجزئي — مقطوعجزئي — مدة الصلاحية غير موجودة
إنزيمات Domax SF Bingo PlusXylanase, Maltogenic Amylaseجزئيجزئي — R1 منتج خاطئ، الإجابة في R3
جرعة Domax SF Bingo Plus50–150 g/100kgناجح تماماًناجح تماماً
جرعة Tigris Gold0.5% من الطحينجزئي فشل — R1 هو حمض الأسكوربيك
حمض الأسكوربيك في Tigris Goldفي قائمة المكوناتجزئي — مقطوع فشل — بيانات الدهون الغذائية
غرض O-TENTIC DURUMعجين محمّض، متوسطيناجح تماماًجزئي — رأس TDS، لا وصف للمنتج
جرعة O-TENTIC DURUM4% من الطحينناجح تماماً فشل — R1-R2 هما حمض الأسكوربيك
جرعة حمض الأسكوربيك (بالفرنسية)20–60 ppmناجح تماماًجزئي — ملخص عام، لا قيمة جرعة
5 / 10نجاحاتي الكاملة
1 / 10نجاحات الفائز الكاملة
0حالات فشلي

استراتيجية التقطيع محوري الكيانات تُضيف بادئة اسم المنتج لكل مقطع، مما يتيح لنموذج التضمين تمييز المنتجات بهويتها حتى مع نمو قاعدة البيانات. دون هذا التثبيت، تتنافس مقاطع الحل الفائز ذات الرؤوس العامة عبر ملفات PDF — مُعيدةً مقاطع حمض الأسكوربيك لاستعلامات Tigris Gold وO-TENTIC DURUM.

11 —

التخزين مقابل الدقة — المقايضة بين المساحة والحوسبة

يُخزن حلّي 9.3× أكثر من تضمينات الحل الفائز (1,635 مقابل 176). السؤال الطبيعي هو: ما تكلفة ذلك، وما العائد منه؟

حلّيالحل الفائز
التضمينات1,635176
تخزين المتجهات1,635 × 384 × 4 بايت = 2.51 MB176 × 384 × 4 بايت = 0.27 MB
تعقيد البحثO(1,635) ضرباً نقطياً لكل استعلامO(176) ضرباً نقطياً لكل استعلام
زمن استجابة البحث< 5 مللي ثانية (بحث شامل)< 1 مللي ثانية (بحث شامل)
تكلفة API الخارجية لكل استعلام لا شيء استدعاء Groq API واحد (Llama 3.3 70B)
فهرس المتجهات بأكمله 2.51 MB — أصغر من صورة منتج واحدة. الـ2.24 MB الإضافية هي إجمالي تكلفة التقطيع محوري الكيانات مع التضمينات المزدوجة.

تفرض المسابقة نموذج بـ22 مليون معامل و384 بُعداً — صغير ورخيص عمداً. مع نموذج ثابت، رافعة التحسين الوحيدة هي كيفية إعداد البيانات له. ينتج التقطيع محوري الكيانات متجهات أكثر، لكن كل واحدة مركزة دلالياً: موضوع واحد، منتج واحد، سؤال واحد قابل للإجابة. هذا يمنح النموذج الصغير احتمالاً أعلى بكثير لإنتاج مطابقة قوية بتشابه جيب التمام.

يسلك الحل الفائز المسار المعاكس: مقاطع أقل وأكبر تخلط أوصاف المنتجات وجداول الجرعات والخصائص الفيزيائية في نوافذ من 500 حرف. هذا يوفر تخزيناً لا يُذكر لكنه يُجبر نموذج التضمين على ضغط مفاهيم غير مترابطة في متجه واحد بـ384 بُعداً — بالضبط السيناريو الذي يفقد فيه النموذج الصغير قوته التمييزية.

في نظرية استرجاع المعلومات، هذه هي المفاضلة بين الدقة والاستدعاء: مقاطع أكثر وأصغر تزيد الاستدعاء بتكلفة مساحة تخزين إضافية. لمجموعة من 35 ملف PDF، تلك التكلفة هي 2.24 MB. استدعاء API الخارجي للحل الفائز يُدخل زمن استجابة متغيراً وتكلفة تشغيلية تفوق التخزين الإضافية بأكمله.

كيف يتوسع التخزين مع المنتجات الجديدة

حجم قاعدة البياناتتضميناتيتخزينيتضمينات الفائزتخزين الفائز
35 ملف PDF (الحالي)1,6352.51 MB1760.27 MB
100 ملف PDF~4,670~7.2 MB~500~0.77 MB
1,000 ملف PDF~46,700~71.7 MB~5,000~7.7 MB
10,000 ملف PDF~467,000~717 MB~50,000~77 MB
عند 10,000 ملف PDF — أبعد بكثير من كتالوج أي شركة — سيكون فهرس المتجهات بأكمله أقل من 1 GB. التخزين ليس العائق على أي مقياس واقعي.

يستخدم حلّي PostgreSQL مع pgvector الذي يدعم فهارس HNSW وIVFFlat للجار الأقرب التقريبي. هذه تخفض البحث من O(n) إلى O(log n)، مما يبقي زمن الاستجابة تحت 10 مللي ثانية حتى عند مئات الآلاف من المتجهات. الحل الفائز يستخدم البحث الشامل لـ NumPy بدون هيكل فهرسة — لا يتيح توسعاً دون تربيع زمني دون إعادة كتابة جذرية.

عدم التوازن الحقيقي في التكاليف: استدعاء Groq API لكل استعلام له زمن استجابة متغير، وتكلفة نقدية لكل رمز، واعتماد على توفر خدمة خارجية. التخزين الإضافي لحلّي لا يُكلف شيئاً للتشغيل بعد الكتابة على القرص.

12 —

استجابة الجهة المنظمة

في 18 مارس 2026، أرسلتُ بريداً إلكترونياً رسمياً إلى ARSII يتضمن تقرير المقارنة التقنية الكامل، وطلبتُ شرحاً لمعايير التقييم المُستخدمة.

كان رد ARSII بريداً إلكترونياً جماعياً لجميع المشاركين (وليس رداً مباشراً):

"We would like to clarify that ARSII does not interfere in the evaluation process of the challenges, except for those proposed by ARSII itself. Each challenge is assessed independently by the respective partner organization responsible for it."
AR: «نودّ أن نوضّح أن ARSII لا تتدخل في عملية تقييم التحديات، باستثناء تلك المقترحة من ARSII نفسها. يُقيَّم كل تحدٍّ بشكل مستقل من قبل المنظمة الشريكة المعنية.»

"In case of any objections or concerns, you are absolutely welcome to submit a reclamation. We will ensure that you are put in direct contact with the responsible party of the challenge."
AR: «في حال وجود أي اعتراضات أو مخاوف، يسعدنا تلقّي شكواكم. سنحرص على وضعكم في تواصل مباشر مع الجهة المسؤولة عن التحدي.»

وفقاً لهذا الرد، تُفوِّض ARSII تقييم التحديات إلى الجهة الشريكة المعنية. المسار المتاح هو التواصل المباشر مع Rose Blanche Group.

حتى 26 مارس 2026، لم يصلني أي رد مباشر، ولم يُصدَر أي إقرار بالتناقض الموثق في متطلبات المسابقة.

13 —

ما يُثبته هذا المنشور

هذا المنشور سجلٌ عام للنتائج، وليس طلباً. الأدلة المُقدَّمة هنا قابلة للتحقق بشكل مستقل من أي شخص لديه وصول إلى مستودعَي GitHub وملف PDF للمسابقة. تحديداً:

  • الحل الفائز لا يستخدم PostgreSQL — ظاهر في الكود المصدري (القسم 2).
  • جودة الاسترجاع أدنى قياساً على كل مقياس اختُبر — تشابه جيب التمام، ومفيدية الإجابة، ودقة المنتج.
  • لم تُشرح عملية التقييم. ما المعايير المُستخدمة؟ إذا كان قيد PostgreSQL قد أُعفي، متى وكيف أُبلغ المشاركون؟

هذه ملاحظات موثقة. للقارئ أن يستخلص استنتاجاته بنفسه.

14 —

جميع الأدلة — تحقق بنفسك

كل ما وُرد في هذا المنشور قابل للتحقق العلني:

الموردالرابط
حلّي (Noobmaster)github.com/mohamedyaakoubi/RBG-ARSII-RAG
الحل الفائزgithub.com/AyaZantour/RagProject
أدوات الاختبار والإبلاغgithub.com/mohamedyaakoubi/noobmaster-vs-double_a--winner--
ملف PDF للمسابقةمُدرج في مستودع الحل الفائز
تقرير المقارنة التقنية الكاملمُدرج في مستودع الاختبار
البيانات المُقدَّمة في هذا المنشور قابلة للتكرار الكامل. يمكن لأي شخص استنساخ كلا المستودعين، وتشغيل نفس الاستعلامات، والتحقق بشكل مستقل من كل مقياس مُبلَّغ عنه.

الخلاصة

حلّي يمتثل لجميع قيود المسابقة، ويحقق دقة استرجاع أعلى بنسبة 40.4%، ويُعيد محتوى صحيحاً وقابلاً للتطبيق لـ14 من أصل 16 استعلاماً (مع 0 فشل تام)، وذلك كله دون اتصال بالإنترنت ودون اعتماد على APIs خارجية.

استرجاع الحل الفائز — المهمة الجوهرية للتحدي — يسجل درجات أدنى على كل مقياس اختُبر. مع 176 مقطعاً مُنتَجاً بنافذة منزلقة ذات عرض ثابت، ودون معالجة للفرنسية، ودون تفكيك استعلام، ودون PostgreSQL (وهو شرط مُصرَّح به)، وفقط 4 من 16 استعلاماً تُعيد بيانات قابلة للاستخدام، و5 حالات فشل تام في الاختبار الأساسي، لا تتوافق المخرجات الملاحظة مع مواصفات المسابقة.

كسياق إضافي (غير مُحتسَب — قابلية التوسع لم تكن متطلباً): يتوسع Noobmaster للمنتجات غير المرئية دون إعادة نتائج منتجات خاطئة (5/10 ناجح تماماً، 5/10 جزئي، 0 فشل)، بينما يسترجع الحل الفائز المنتج الخاطئ في 3 من 10 استعلامات منتجات جديدة مع نجاح كامل واحد فقط.

نُفِّذ الاختبار في الفترة 17–26 مارس 2026. كلا الحلين اختُبرا بنفس 16 استعلاماً + 10 استعلامات قابلية توسع، ونفس نموذج التضمين (all-MiniLM-L6-v2)، ونفس K=3، على نفس الجهاز. درجات الاسترجاع هي قيم تشابه جيب التمام القابلة للتكرار. قُيِّمت مفيدية الإجابات بمراجعة يدوية لكل مقطع R1 مقارنةً بمحتوى ملف PDF المصدر — دون مطابقة تلقائية بالكلمات المفتاحية. جرى التحقق المتقاطع لمفيدية إجابات قابلية التوسع مقابل ملفات PDF المصدر باستخدام pdfplumber.

يحتوي هذا المنشور فقط على معلومات متاحة للعموم وحقائق تقنية قابلة للتحقق. يمكن التحقق من جميع التصريحات بشكل مستقل عبر استنساخ المستودعات المُشار إليها وتشغيل الاختبارات الموثقة.