ثلاثةُ أخطاءٍ في RAG العربيّ تَجعل ثلثَ إجاباتِ منتجِك مضلِّلة
التقسيمُ الأعمى، الـ embeddings الإنجليزيّة، والـ prompt المُترجَم — ثلاثةُ أخطاءٍ تَتكرَّر في كلِّ مشروعِ RAG عربيّ. كلُّها قابلةٌ للإصلاح بساعةٍ واحدة.

حمّلتَ وثائقَكَ في قاعدة vector، ربطتَها بـ Claude أو GPT، سألتَ سؤالاً — والإجابةُ خاطئة. ليست هلوسةً هذه المرّة. النموذجُ استَرجعَ الوثيقةَ الصحيحة. لكنّه فَهمَها خطأً.
هذا هو الفخّ. معظمُ فرقِ المنتجاتِ العربيّة تَبني RAG (Retrieval-Augmented Generation) بإطلاقٍ أعمى: تُقسِّم، تُضمِّن، تَستعلم، تَنشر. ثمّ تَكتشف بعد أسابيع أنّ ثلثَ الإجاباتِ في الإنتاجِ مضلِّلة — ليست خاطئة تماماً، بل أسوأ: صحيحةٌ جزئيّاً.
هذه ثلاثةُ أخطاءٍ رصدتُها تَتكرَّر في كلِّ مشروعِ RAG عربيٍّ عملتُ عليه. كلُّها قابلةٌ للإصلاح — لو عَرفتَها قبل النشر.
١. التقسيمُ الأعمى يَقتلُ السياق
الخطأُ الأكثر شيوعاً: تقسيمُ الوثائقِ بعددِ الأحرف. كلّ ٥٠٠ حرف = chunk. بسيطٌ وسريع. ومدمِّر.
المشكلة: النصُّ العربيُّ أكثفُ من الإنجليزي. جملةٌ عربيّةٌ واحدةٌ تَحمل معنىً تَحتاج ثلاثَ جملٍ إنجليزيّةٍ لنقلِه. حين تَقطع عند ٥٠٠ حرف، تَقطع غالباً في منتصفِ فكرة. النموذجُ يَستلم نصفَ الفكرة، ويُكمل النصفَ الآخر من "خياله".
الحلّ: قسِّم بالمعنى لا بالحجم. استخدمْ فواصلَ طبيعيّة: عناوين H2، فقرات كاملة، أو فواصل موضوعيّة. إن كنتَ تَستخدم LangChain، استبدلْ CharacterTextSplitter بـ RecursiveCharacterTextSplitter مع separators عربيّة: ["\n\n", "\n", "۔", ".", "،"]. الفرقُ في الجودة ملحوظٌ من أوّل استعلام.
٢. الـ embeddings لا تَفهم العربيّةَ كما تَظنّ
أكثرُ مطوّرٍ عربيٍّ يَستخدم text-embedding-ada-002 أو text-embedding-3-small من OpenAI. هذه نماذج ممتازة — بالإنجليزية. بالعربيّة، دقّتُها تَنخفض ١٥-٢٥٪.
السبب: التدريبُ تَغلب عليه البياناتُ الإنجليزيّة. الكلمةُ العربيّة الواحدة تُرمَّز إلى tokens أكثر (أحياناً ٣-٤× مقارنةً بالإنجليزيّة). هذا يَعني أنَّ vector الناتجَ يُمثِّل المعنى بدقّةٍ أقلّ.
الحلّ: جرِّب بديلاً واحداً من هذه وقِسْ:
- Cohere embed-multilingual-v3: مُصمَّم للتعدّد اللغويّ، أداءٌ قويٌّ بالعربيّة.
- Voyage AI voyage-multilingual-2: أقوى في المهامِّ التخصّصيّة (قانون، طبّ).
- Gemini text-embedding: خيارٌ مجّانيٌّ من Google يَدعم العربيّة بشكلٍ معقول.
القياس: خُذ ٢٠ سؤالاً حقيقيّاً من مستخدميك، شغِّلها على النموذجَيْن، قارِنْ top-5 retrievals. إن كان البديلُ يَسترجع وثائقَ أدقّ في ١٥+ من ٢٠، انتقِلْ.
٣. الـ prompt يَتجاهل بنيةَ العربيّة
حتى لو استرجعتَ الوثيقةَ الصحيحة بالـ embedding الصحيح، الإجابةُ قد تَكون سيّئة — لأنَّ الـ system prompt يَتجاهل طبيعةَ النصّ العربيّ.
أخطاءٌ شائعة:
- الـ prompt بالإنجليزيّة والوثائقُ بالعربيّة → النموذجُ "يُترجم ذهنيّاً" قبل أن يُجيب، ويَخسر دقّة.
- لا تعليماتٍ عن اتّجاه الاقتباس (يَنسخ العربيّة بدون علامات تنصيصٍ صحيحة).
- لا تعليماتٍ عن التشكيل في الأسماء والمصطلحات (يُهمل التفريقَ بين "حَكَم" و"حُكم").
الحلّ: اكتبْ الـ system prompt بالعربيّة. نعم، بالكامل. مثال:
أنتَ مساعدٌ يُجيب من الوثائقِ المُرفقةِ فقط. إن لم تَجد الإجابةَ في الوثائق، قُلْ "لا أجدُ إجابةً في المصادرِ المتاحة". لا تُترجمْ — أجبْ بنفسِ لغةِ السؤال. اقتبسْ النصَّ الأصليَّ بين علامتَيْ تنصيصٍ عربيّتَيْن «».
الفرقُ بين prompt عربيٍّ وآخر إنجليزيٍّ يُترجَم: ١٠-٢٠٪ تحسُّنٌ في دقّة الإجابات. مجّاناً.
