InfoForge: ويكيبيديا دون اتصال بالإنترنت كمصدر لأنظمة RAG لوكلاء الذكاء الاصطناعي المحليين لديّ

تاريخ النشر
28 أغسطس 2026
تاريخ التحديث
16 سبتمبر 2026
بقلم
جاكوب لويد — كُتب بمساعدة الذكاء الاصطناعي بعد إنجاز المشروع
مدة القراءة
قراءة 2 دقيقة

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

سألت نموذجًا لغويًا محليًا عن تاريخ ميلاد الروائي ناتسومي سوسيكي؛ فأجاب: “9 فبراير 1867”. ثم قام بما كنت أهتم به حقًا: ذكر المقالات التي استخدمها للإجابة. في الحقيقة، النموذج لا يعرف هذه المعلومة؛ بل بحث عنها في نسخة ويكيبيديا التي تبلغ حجمها 52.69 جيجابايت والموجودة على جهاز في منزلي، دون الحاجة إلى الإنترنت أصلاً.

ملخص سريع

  • ما هو المنتج: نسخة كاملة من ويكيبيديا باللغة الإنجليزية في ملف واحد من نوع ZIM (19.19 مليون مدخل، تاريخ التحديث يونيو 2026، بدون صور)، بالإضافة إلى أداة سطر أوامر بسيطة بلغة بايثون تحول هذه النسخة إلى مصدر استرجاع للمعلومات للنموذج اللغوي المحلي.
  • التكلفة: مجاني تمامًا؛ تنزيل واحد فقط، يحتاج إلى مساحة تخزين تقارب 53 جيجابايت، ولا يتطلب حسابًا أو مفتاح API أو اشتراكًا.
  • السرعة: تستغرق عملية الإجابة الكاملة من 4 إلى 10 ثوانٍ؛ معظم هذا الوقت يُستهلك في عمليات التفكير من قبل النموذج اللغوي. أما عمليات البحث واسترجاع المقالات فهي سريعة جدًا (انظر الأرقام أدناه).
  • القاعدة التي تجعله مفيدًا: عندما لا يجد البحث أي نتائج، تُطبع رسالة فشل وتُرجع الأداة كود الخروج 3؛ كما يُطلب من النموذج الإفصاح عن عدم وجود إجابة في حال لم تتضمن المصادر المعلومات المطلوبة. وبذلك، تقوم الأنظمة التي تستخدمه بالإبلاغ عن فشل عملية البحث بدلاً من تقديم إجابات مبنية على الذاكرة.
  • ما لا يفعله أبدًا: يبقى داخل المنزل؛ لا يوجد أي مزود خدمات، ولا مكالمات API، ولا سجلات استعلامات.

تحديث بتاريخ 16 سبتمبر 2026: بعد يومين من كتابة هذا النص، تحول البرنامج البسيط إلى أداة سطر أوامر جاهزة للاستخدام (الإصدار 2.0.0)؛ تشمل الأوامر: infoforge ask، search، serve start|stop|status|recreate، status، بالإضافة إلى أمر doctor الذي يتحقق من سلامة جميع الروابط المستخدمة. النسخة المتاحة للتنزيل هي هذه النسخة المُعبأة وليست النص الأصلي؛ كما أن أمثلة الأوامر في هذه الصفحة تعود إلى الإصدار الثاني وتم تنفيذها بتاريخ 16 سبتمبر 2026. أما أشهر إجابة قدمها الإصدار الأول، والتي تتعلق برواية “Kokoro”, فقد تم ذكرها في قسم “الملاحظات” لأن الإصدار الثاني لم يعد قادرًا على العثور عليها. كما أضفت الأعلام الخاصة بالحاويات، ووحدة الخدمة، ونص التوجيه، بالإضافة إلى آلية الرفض، وقمت بتصحيح تقديرات زمن الاسترجاع.

لماذا نفعل ذلك، بينما النموذج اللغوي “يعرف” كل شيء؟

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

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

ويكيبيديا تحل كلا المشكلتين دفعة واحدة؛ فهي أغنى مصدر للمعرفة العامة المتاحة، ويمكن تنزيلها بالكامل بشكل قانوني، كما أن حجمها يتناسب مع مساحة تخزينية لا تتجاوز تكلفتها ثمن وجبة عشاء واحدة. وقد قام مشروع Kiwix منذ سنوات بالجزء الصعب؛ إذ قام بتغليف جميع محتويات ويكيبيديا في صيغة ZIM المضغوطة والمفهرسة لتُستخدم في المدارس والسفن والأماكن التي لا تتوفر فيها شبكة إنترنت. أنا فقط أوجه النموذج اللغوي نحو هذه البيانات بدلًا من استخدام متصفح ويب.

ما الذي تحصل عليه في النهاية؟

سؤالك، ثم إجابتك، بالإضافة إلى قائمة مرقمة بالمراجع التي توضح المقالات المستخدمة لبناء الإجابة. هذه محاولة حقيقية تمت بتاريخ 16 سبتمبر 2026 (عنوان الخادم هو loopback):

$ infoforge ask "When was Natsume Soseki born?"
infoforge: warning: skipping disambiguation page: Natsume
infoforge: warning: skipping disambiguation page: Soseki
infoforge: grounding on 5 article(s)
According to the provided sources, Natsume Soseki was born on 9 February 1867. ...

Citations:
[1] Natsume Soseki — http://127.0.0.1:8080/content/wikipedia_en_all_nopic/Natsume_Soseki
[2] Natsume Sōseki — http://127.0.0.1:8080/content/wikipedia_en_all_nopic/Natsume_S%C5%8Dseki
[3] Beongcheon Yu — ...

استغرقت هذه العملية 4.4 ثوانٍ؛ وهذا ما يحدث عندما لا تتوفر أي مصادر يمكن الاستناد إليها:

$ infoforge search "qzxvbnm plorkwidget fnargle"
infoforge: error: no sources found for 'qzxvbnm plorkwidget fnargle'
$ echo $?
3

لا فقرة، لا تخمينات، بل كود خروج يمكن لأي برنامج يستدعي الأداة التحقق منه. أما أمر ask فيُرجع نفس كود الخروج 3، مع تلميح لتجربة كلمات بحث أبسط أو تشغيل أمر infoforge doctor. قائمة أكواد الخروج محدودة للغاية: 0 تعني النجاح، و2 تعني وجود خطأ في الإعدادات أو الاستخدام، و3 تعني عدم وجود مصادر يمكن الاستناد إليها، و4 تعني عدم توفر أي مراجع (فقط عند استخدام الخيار --strict)، و5 تعني عدم توفر أي نقطة اتصال بالنموذج اللغوي. حتى في حالة كود الخروج 5، تظل الأداة تُخرج المقالات التي تم العثور عليها، لذا لا يضيع الجهد المبذول في عملية البحث.

كيف يعمل النظام؟

يتكون من خمس مراحل، ولا تحتاج أي منها إلى تعقيدات؛ بل أنصح بالحفاظ على هذا البساطة.

استخلاص الكلمات المفتاحية: السؤال ليس هو الاستعلام الفعلي؛ فمحرك Kiwix يقوم بدمج جميع مصطلحات البحث بواسطة عامل “AND”, لذا فإن السؤال “من كتب رواية Kokoro ومتى نُشرت؟” لا يُنتج أي نتائج تقريبًا، بينما يكون Kokoro استعلامًا مناسبًا. جوهر أداة الاستخلاص هو فلترة الكلمات التوقفية التي تحافظ على ترتيب الكلمات الأصلية:

def keyword_query(question: str) -> str:
    tokens = _TOKEN_RE.findall(question)
    keywords = [
        t for t in tokens
        if t.lower() not in _STOPWORDS and t.lower() not in _WEAK_VERBS
    ]
    return " ".join(keywords) if keywords else question.strip()

الإصدار الثاني أضاف تعديلين: أولًا، يتم تجربة العبارات المكتوبة بأحرف كبيرة كعناوين للمقالات؛ ثانيًا، تُعاد ترتيب النتائج بحيث تنخفض أهمية صفحات التوضيح، أو السنوات الفارغة، أو صفحات “قائمة…”.

البحث: محرك البحث النصي الكامل في Kiwix هو فهرس بحث حقيقي وليس مجرد أداة بحث بسيطة؛ وهو السبب الأساسي في نجاح هذا النظام. عند تطويره، استرجع الفهرس عناوينًا من 19.19 مليون مدخل في غضون 3 إلى 30 مللي ثانية. وفي 16 سبتمبر 2026، وبعد زيادة حركة المرور على الجهاز نفسه، استغرقت عملية البحث ذاتها ما بين 90 و730 مللي ثانية؛ وأعتقد أن الفهرس قد خرج من ذاكرة التخزين المؤقت، لكن بغض النظر عن ذلك، فإن هذه المدة لا تُذكر مقارنة بوقت معالجة النموذج اللغوي. لا توجد أي تمثيلات متجهية في هذا النظام، ولا قاعدة بيانات متجهية، ولا مخازن للمقتطفات تحتاج إلى إعادة بناء عند تحديث محتوى ويكيبيديا؛ فمحررو ويكيبيديا هم من قاموا بالفعل بتقسيم المحتوى إلى مقتطفات، والتي نسميها “المقالات”.

الاسترجاع والتقليم: يسترجع أمر kiwix-serve المقالات عبر اتصال محلي في غضون ملي ثانية واحدة تقريبًا عندما يكون النظام في حالة التشغيل؛ فقد قمت بقياس زمن الاستجابة باستخدام أداة curl على ثلاثة مقالات تمت قراءتها حديثًا، فكانت النتيجة بين 0.7 و1.1 ملي ثانية، بينما استغرقت العملية أول مرة ما بين 6 و9 ملي ثانية. كان مسودة الإصدار الأول تذكر “0.5 ملي ثانية” دون توضيح أنها تعبر عن حالة التشغيل؛ أما مرحلة التقليم فهي الوحيدة التي تتطلب بعض التقدير الذاتي؛ إذ إن قطع النص من البداية كان يؤدي غالبًا إلى فقدان الإجابة، لأن المعلومات المطلوبة تكون غالبًا في أعماق المقالات الطويلة. لذا يحتفظ كل مقال بجزء تمهيدي قصير (ربع الحد الأقصى المسموح به) بالإضافة إلى نافذة حول المقطع الذي يتطابق بشكل أفضل مع الكلمات النادرة في السؤال.

صياغة السؤال المرتكز: هذه هي الخطوة الأساسية، وهي تتكون من أربع جمل فقط؛ حيث تأتي القواعد أولًا، ثم قائمة المصادر المرقمة، ثم السؤال نفسه:

You are a question-answering assistant grounded ONLY in the source texts provided below.
Answer the user's question using only information found in these sources. If the sources do not contain the answer, say so clearly.
When you use information from a source, cite the article title (for example: "according to <title>").
Do not invent facts, titles, or URLs that are not present in the sources.

Source 1: <title>
<trimmed article text>
...
Question: <the question>

تم تحديد درجة الحرارة عند 0.3 بدلًا من 0؛ فقد أشارت ملاحظات الكود إلى أن استخدام قيمة 0.0 كان يؤدي إلى حلقات تكرارية في بعض التطبيقات المحلية بسبب تكرار نصوص المصادر؛ وهذه التعليمات ليست ضمانًا، بل هي مجرد توجيهات، ولهذا السبب تم إدراج القسم التالي.

النموذج: نموذج استدلالي محلي (DeepSeek-R1 8B) يعمل على خادم GPU الموجود في المنزل، وهو الذي يكتب الإجابة. حجم ملف Q4_K_M هو 5.0 جيجابايت، كما أن ذاكرة KV تستهلك حوالي 0.15 جيجابايت لكل 1000 رمز من السياق عند استخدام دقة f16؛ وبالتالي فإن الأوزان بالإضافة إلى نافذة السياق التي تتسع لـ 32 ألف رمز تشغل حوالي 10 جيجابايت قبل بدء عمليات الحساب. يتم إزالة كتل من الإجابة قبل طباعتها. كان الوقت الذي استغرقه التنفيذ في قياسي الأولي حوالي 8 ثوانٍ؛ أما في ثلاث تجارب أُجريت بتاريخ 2026-09-16 فقد استغرقت 4.4 و5.2 و9.7 ثوانٍ على التوالي. عملية الاسترجاع مجانية، لكن عمليات التفكير ليست كذلك. لم يعد هناك أي نموذج احتياطي محلي؛ فقد أزلت خادم النماذج من الكمبيوتر الصغير بتاريخ 2026-09-16. وفي حال عدم استجابة خادم GPU، فإن الأداة تنهي عملها برمز الخروج 5 مع طباعة المقالات التي تم العثور عليها.

التأسيس كآلية للرفض

هذا هو القرار التصميمي الذي سأدافع عنه بشدة، وهو ليس قرارًا تقنيًا.

الطلب الذي ينص على "استخدم فقط هذه المصادر" يُعد طلبًا عاديًا؛ فالنماذج تلتزم به في معظم الأوقات، لكنها تتجاهله أحيانًا، خاصةً عندما تكون المصادر محدودة ويصادف أن النموذج يتذكر معلومة مناسبة. إذا كان هذا الطلب هو الدفاع الوحيد للنظام، فإن "التأسيس" لا يعد سوى شعور نظري.

لذلك، يتم تطبيق التأسيس خارج النموذج عبر ثلاث طبقات:

  1. لا مصادر، لا استدعاء للنموذج. إذا لم تعثر عملية البحث على أي نتائج، فلا ترسل الأداة أي طلب إلى النموذج كلغة احتياطية؛ بل تنهي عملها برمز الخروج 3، وهو الرمز الذي تتحقق منه جميع البرامج التي تستخدمها بالفعل.
  2. المصادر لا تحتوي على إجابة. يُطلب من النموذج الإشارة إلى ذلك صراحةً؛ وفي هذه الحالة تُعتبر العملية ناجحة. فالإجابة الصادقة "لا توجد معلومات في هذه المصادر" هي دليل على عمل النظام بشكل سليم.
  3. إجابة لا تستشهد بأي مصدر. تطبع الأداة تحذيرًا بأن الإجابة غير مُؤسسة على أي مصدر؛ وفي حال استخدام خيار --strict، تنهي عملها برمز الخروج 4.

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

النتيجة هي وجود مساعد ذكي يخبرك صراحةً بأنه لم يتمكن من العثور على المعلومة المطلوبة. قد تبدو هذه الميزة كنقطة ضعف، لكنها في الحقيقة عكس ذلك تمامًا؛ فالنموذج الذي يقول "لم أجد إجابة" أفضل بكثير من نموذج أكبر حجمًا يختلق الإجابات، لأنه يمكنك الاعتماد على الأول، بينما يجب عليك التحقق من صحة المعلومات التي يقدمها الثاني. فإذا كان عليك التحقق من كل إجابة، فإنك لم توفر أي جهد في النهاية.

خصوصية يمكن التحقق منها

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

ولا يتوجب عليك تصديقي في ذلك؛ يمكنك التحقق من الأمر بقطع الاتصال بالإنترنت ومشاهدة استمرار عمل النظام بشكل طبيعي.

الـ 90% غير الملفتة للنظر

كان تطوير هذا النظام مشروعًا ممتعًا استغرق عطلة نهاية أسبوع؛ لكن الجزء الصعب كان التعامل مع ثلاثة خيارات في أوامر الحاوية.

يعمل خادم ويكيبيديا كحاوية Podman بدون صلاحيات الجذر على نظام تشغيل لينكس غير قابل للتغيير مع تفعيل SELinux؛ وكل واحد من هذه الشروط الثلاثة استهلك مني مساءً كاملاً. هذا هو الأمر الصحيح للتشغيل:

podman run -d --name infoforge-kiwix \
  --user root \
  -p 127.0.0.1:8080:8080 \
  -v "$HOME/zims:/data:z" \
  ghcr.io/kiwix/kiwix-serve \
  -k /data/wikipedia_en_all_nopic.zim
  • --user root. في بيئة Podman بدون صلاحيات الجذر، يُعاد توجيه المستخدم الجذر داخل الحاوية إلى حسابك العادي خارجها؛ لكن المستخدم الافتراضي للصورة يقع ضمن نطاق المعرفات الفرعية، مما يمنعه من الوصول إلى مجلد المنزل ويؤدي إلى رسالة Permission denied عند محاولة الوصول إلى /data.
  • :z في تعريف الحجم. على أنظمة SELinux، يجب إعادة تصنيف المجلد المرتبط بالحاوية؛ وإلا يرفض النواة قراءته حتى لو كان المستخدم داخل الحاوية هو الجذر. تبدو رسالة الخطأ وكأن الملف مفقود، مما يضلل المستخدم تمامًا.
  • تحديد مسارات ملفات ZIM صراحةً (مع خيار -k). بدون تحديد ملف معين، يقوم سكريبت التشغيل الافتراضي بتشغيل kiwix-serve دون أي ملف ZIM، مما يؤدي إلى فشل التشغيل برسالة "Arguments did not match expected patterns". أما خيار -k (--skipInvalid) فيسمح للخادم بالعمل حتى لو كان أحد الملفات قيد التحميل.

على أنظمة Docker التي لا تستخدم SELinux أو تعيين المستخدمين بدون صلاحيات الجذر، ربما لا تحتاج إلى كل هذه الإعدادات. كما أن الربط بـ 127.0.0.1 هو تغيير تم في الإصدار الثاني؛ فالإصدار الأول كان يستمع على الشبكة بأكملها، وهو أمر غير ضروري لخادم معلومات لا يتطلب أي مصادقة.

استغرق التعامل مع هذه الخيارات الثلاثة حوالي 90% من الوقت الإجمالي؛ وهذا هو الواقع الحقيقي لمعظم مشاريع الاستضافة الذاتية، وهو ما تتجاهله التقارير التقنية عادةً. لذلك يخلص الكثيرون إلى أنهم غير قادرين على القيام بذلك، بينما هم في الحقيقة يقومون به لأول مرة وحدهم، أمام نفس الخيارات الثلاثة.

ثم توقف العمل، ولم يلاحظ أحد

كان النظام يعمل بشكل جيد وبسرعة؛ فقد اختبرته وسجلت الأرقام وتابعت مشغولياتي.

بعد أسبوع، حاولت استخدامه فوجدته غير نشط. لقد أعاد الجهاز التشغيل نفسه في وقت ما، لكن الحاوية لم تستأنف عملها؛ ولم يخبرني أحد بذلك، لعدم وجود وحدة خدمة أو مراقبة أو فحص صحة. والأسوأ من ذلك، أن ملف المهارات الذي كان يجب أن يخبر برامج الذكاء الاصطناعي بوجود هذه الأداة قد تم إعداده لكن لم يتم تثبيته قط؛ فطوال ذلك الأسبوع، كانت جميع البرامج تستجيب بناءً على ذاكرتها بدلًا من البحث في المصادر المتاحة، ولم يكن أي منها على علم بوجود خيار آخر.

الدرس المستفاد بسيط للغاية:

القدرة التي لا يتم تشغيلها تلقائيًا ولا يعرف بها أحد هي نفسها القدرة التي لم تُبنَ من الأساس.

تم حل المشكلة عبر وحدة خدمة مكونة من 12 سطرًا (تم حذف التعليقات هنا) وملف مهارات من صفحة واحدة:

[Unit]
Description=InfoForge kiwix-serve (قاعدة معرفية غير متصلة للإجابات المؤسسة على مصادر محددة)
After=default.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=%h/.local/bin/infoforge serve start
ExecStop=%h/.local/bin/infoforge serve stop
ExecReload=%h/.local/bin/infoforge serve recreate
TimeoutStartSec=180

[Install]
WantedBy=default.target

استخدام نوع oneshot مع خيار RemainAfterExit هو مقصود؛ فأمر serve start يعود فور تشغيل الحاوية، لكن الخدمة يجب أن تظل "نشطة" طوال فترة عملها، حتى يتمكن أمر systemctl --user stop من إيقافها. يمكن تفعيلها عبر systemctl --user enable --now infoforge.service. وبما أن أمر serve start لا يتسبب في تكرار التشغيل، فإن إعادة التحميل تعيد إنشاء الحاوية عند تغيير مجموعة ملفات ZIM.

أما ملف المهارات فهو ملاحظة مشتركة تطلع عليها البرامج لتعرف ما يمكنها القيام به؛ ويذكر ثلاث نقاط: وجود الأداة، أمر التشغيل الخاص بها، وضرورة أن تحمل الإجابات المؤسسة على مصادر محددة.

أما فحص الصحة الذي كنت أتمناه فهو الآن متاح عبر أمر infoforge doctor؛ فهو يتفقد كل حلقة في السلسلة (الإعدادات، مجلد ZIM، الحاوية، اتصال HTTP، بحث تجريبي، نقاط وصول النماذج) ويطبع PASS أو FAIL لكل منها (تم تقطيع المخرجات):

$ infoforge doctor
  [PASS] config          parsed <config path>
  [PASS] zims            1 enabled: wikipedia_en_all_nopic.zim
  [PASS] container       infoforge-kiwix: running, serving wikipedia_en_all_nopic.zim
  [PASS] kiwix http      http://127.0.0.1:8080 responds
  [PASS] search          3 hit(s) for 'water' in wikipedia_en_all_nopic
  [PASS] llm primary     <gpu server>/v1 reachable, model ...DeepSeek-R1-0528-Qwen3-8B... (model listed)

doctor: all checks passed

كانت النسخة الأولى عبارة عن سكريبت بايثون يتألف من حوالي 700 سطر غير فارغ، وكانت قصة نجاح؛ لكن وحدة الخدمة وملف المهارات هما ما جعلاها واقعية، وهذا درس أتعلمه مرارًا وتكرارًا.

متكاملة في بنية برامج الذكاء الاصطناعي

أصبحت InfoForge الآن أداة مشتركة لـ البرامج الذكية التي أديرها محليًا، وليست مجرد سكريبت يجب أن أتذكره. فالبرنامج الذي يحتاج إلى معلومة يشغل أمر infoforge ask (أو --json للحصول على إجابة قابلة للقراءة آليًا)، فيحصل على إجابة مرفقة بالمصادر ويقوم بإرسالهما معًا. أهمية هذه المصادر تفوق ما يبدو عليه الأمر؛ فعندما يذكر البرنامج عنوان المقال، يمكنني التحقق منه بنقرة واحدة، وهذه القدرة على التحقق هي ما يجعل المساعد الذكي موثوقًا.

ملاحظات وتحذيرات

  • التخزين قبل التحميل. حجم النسخة الخالية من الصور يبلغ حوالي 53 جيجابايت، بينما تضاعفه تقريبًا النسخة التي تحتوي على صور. تحقق من مساحة التخزين أولاً؛ فتحميل ملف ZIM بشكل غير كامل طريقة بطيئة للتعرف على هذا الأمر.
  • تاريخ البيانات محدد. النسخة التي أملكها تعود لشهر يونيو 2026، بينما ويكيبيديا تتحدث باستمرار؛ وبالنسبة لهذا النظام، أي معلومات أحدث من ذلك التاريخ غير موجودة. هذا جيد إذا كنت تتذكر ذلك، لكنه قد يكون فخًا إذا نسيته.
  • جودة البحث تعتمد على استخراج الكلمات المفتاحية والبحث في العناوين. ففي النسخة الأولى كانت الإجابة على سؤال "من كتب رواية Kokoro ومتى نُشرت؟" هي "ناتسومي سوسيكي، عام 1914" مع ذكر المقال؛ لكن عند إعادة طرح السؤال في النسخة الثانية (2026-09-16)، ظهر عنوان ألبوم مكتوب بطريقة مختلفة وهو KoKoro، ولم يظهر مقال الرواية ضمن الخمسة الأوائل. استجاب النموذج بشكل صحيح بإدراج كل الإصدارات المشابهة وسألني عن المقصود؛ وعند طرح السؤال "من كتب رواية Kokoro؟" أجاب بأن المصادر لا تحتوي على إجابة. لم يختلق النموذج أي شيء، لكنه لم يجد إجابة؛ فغالبية الإجابات السيئة التي رأيتها ناتجة عن أسئلة غير جيدة وليس عن نموذج سيء، لذا حسّن عملية البحث قبل التفكير في استخدام نموذج أكبر.
  • تحديد السياق خيار مهم. فقلة السياق تجعل الإجابة غير موجودة، بينما كثرته تجعل النموذج ينحرف عن التعليمات؛ لذا ضبطه بناءً على أسئلة تهمك فعلاً وليس أسئلة مصطنعة.
  • اختبر مسار الفشل عمدًا. اطلب شيئًا لا تحتوي ويكيبيديا على مقال عنه وتأكد من حصولك على رمز الخروج 3 بدلاً من فقرة سلسة؛ فإذا اختبرت فقط الأسئلة التي تعمل، فأنت تختبر النصف السهل فقط.
  • اكتب وحدة الخدمة من اليوم الأول. انظر ما سبق.

إلى أين يقودني هذا؟

أصبح لدي الآن موسوعة غير متصلة بالإنترنت مع فهرس بحثي أمامها، بالإضافة إلى ذكاء اصطناعي مسموح له بالإجابة فقط من هذه المصادر. كل ذلك كلفني عملية تحميل وعطلة نهاية أسبوع؛ وهو يعمل في حالات انقطاع الاتصال ولا يمكن إيقافه، كما أنه لا يستند إلى أي نموذج تجاري يتعلق بي.

الخطوة التالية هي إضافة المزيد من ملفات ZIM ضمن نفس الإعداد (مجموعات الطب والهندسة التي توفرها Kiwix، بالإضافة إلى ويكي أو اثنتين خاصتين بي)؛ فطبقة الاسترجاع لا تهتم بنوع المحتوى. النسخة الثانية تحتوي بالفعل على أمر zimify لتحويل مجلد من الوثائق إلى ملف ZIM. أما المشكلة الأخرى التي واجهتها وهي خطأ مطابقة العناوين المتعلق برواية Kokoro، فهي مشكلة برمجية وليست متعلقة بالنموذج.

مرتبط: بنية برامج الذكاء الاصطناعي المحلية التي أستخدمها، StudioForge (خادم GPU الذي يعمل عليه النموذج)، الكمبيوتر الصغير الذي يستضيف InfoForge، والتكاليف الفعلية للبرامج الذكية (InfoForge نفسه مجاني).

التنزيلات

مجاني للاستخدام الشخصي. إذا وفّر لك عصرًا كاملًا من الوقت، فزر القهوة قريب منك.


← المزيد من الذكاء الاصطناعي والنماذج المحلية