Habr AI→ المصدر

RAG محلي على FastAPI وOllama: من استدعاء بسيط لنموذج LLM إلى نظام backend جاهز للإنتاج

يعرض مطوّر على Habr كيف يمكن تحويل استدعاء واحد إلى Ollama إلى نظام RAG متكامل. فإلى نقطة POST /ask البسيطة تُضاف request_id لتتبّع الطلبات، وsources وهي قائمة بالمقاطع الوثائقية الموجودة في السياق، وtimings لقياس زمن كل مرحلة، ونقطة وصول (endpoint) لإعادة بناء الفهرس، وكذلك negative tests. المكدّس التقني محلي بالكامل: FastAPI وOllama، دون أي واجهات API خارجية.

معالج بواسطة الذكاء الاصطناعي من Habr AI؛ بتحرير Hamidun News
RAG محلي على FastAPI وOllama: من استدعاء بسيط لنموذج LLM إلى نظام backend جاهز للإنتاج
المصدر: Habr AI. كولاج: Hamidun News.
◐ استمع للمقال

يتناول مطوّر على Habr لحظة محددة: متى يصبح استدعاء واحد لنموذج محلي غير كافٍ، وما الذي ينبغي إضافته للحصول على نظام backend حقيقي.

متى لا يكفي الاستدعاء البسيط

تبدو النسخة الأولى بديهية: ترسل الواجهة الأمامية (frontend) سؤالاً، فيستقبل FastAPI الطلب `POST /ask`، ويستدعي الـ backend نموذج Ollama ويعيد سلسلة نصية تحمل الإجابة. وهذا يكفي لعرض تجريبي، لكنه لا يكفي لمساعد يعمل على الوثائق.

تظهر الأسئلة فوراً: على أي وثائق تستند الإجابة؟ وأي مقاطع وصلت إلى الـ prompt؟ ولماذا يُعالَج أحد الطلبات في ثانيتين بينما يستغرق آخر خمس عشرة ثانية؟ وماذا يحدث إذا لم يُحدَّث الفهرس منذ ثلاثة أسابيع؟ لا يمكن الإجابة عن هذه الأسئلة باستدعاء LLM بسيط.

ما الذي تضيفه طبقة الـ backend

يُدخل المؤلف المكوّنات واحداً تلو الآخر، ويشرح المشكلة المحددة التي يحلّها كل منها:

  • request_id — معرّف فريد للطلب، يربط السجلات ببعضها ويسهّل تتبّع عطل بعينه
  • sources — قائمة بالمقاطع الوثائقية التي دخلت في سياق النموذج، مع ذكر المصدر
  • timings — توزيع الزمن على المراحل: البحث في الفهرس، وتكوين الـ prompt، وتوليد الإجابة
  • rebuild index — نقطة وصول مستقلة لإعادة بناء الفهرس دون إعادة تشغيل الخدمة
  • negative tests — فحص سلوك النظام عند خلوّ المجموعة الوثائقية، وعند الأسئلة الخارجة عن الموضوع، وعند قِدَم الفهرس

المكدّس محلي بالكامل: FastAPI لطبقة HTTP، وOllama للتوليد، وتضمينات (embeddings) خاصة بالمشروع. ولا حاجة إلى أي مفاتيح API خارجية.

عقد الـ API بوصفه حدّ النظام

من أبرز أطروحات المقال أهمية العقد الصريح على مستوى الاستجابة. فحين تعيد نقطة `/ask` سلسلة نصية فقط، تبقى الخدمة صندوقاً أسود. أما حين تتضمن الاستجابة `request_id` و`sources` و`timings` وحالة الفهرس، تصبح المراقبة وتصحيح الأخطاء والتحسين ممكنة.

«أعرض لا البنية العامة لنظام RAG، بل الطريق من استدعاء بسيط لنموذج LLM

محلي إلى مشروع backend صغير بعقد API وتسجيل وsources وtimings وحدود معلنة بصدق».

يغيّر هذا النهج النظرة إلى الخدمة: فبدلاً من «النموذج يجيب بطريقة ما» يصبح «النظام يتصرف بصورة يمكن التنبؤ بها».

الصراحة بشأن الحدود

يعدّد المؤلف صراحةً ما لا يتضمنه المشروع: المصادقة، والتخزين المؤقت (caching)، ودعم الأحمال متعددة المستخدمين، وCI/CD. وهذا يجعل المقال أنفع من معظم الدروس التعليمية التي إما تخلو من قسم الحدود أو تكتفي فيه بعبارة شكلية.

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

ماذا يعني ذلك

يسدّ المقال فجوة محددة: فمعظم المواد المتعلقة بـ RAG إما تشرح النظرية أو تعرض مثال «hello world» باستخدام LangChain. أما هنا فنجد خدمة محلية عاملة مزوّدة بأدوات observability، ويمكن اتخاذها أساساً لمشروع حقيقي.

ZK
Hamidun News
أخبار الذكاء الاصطناعي بدون ضوضاء. اختيار تحريري يومي من أكثر من 50 مصدر. منتج من جمال حميدون، رئيس الذكاء الاصطناعي في Alpina Digital.
✦ Unified AI Workspace

Access Frontier LLMs & Multimodal AI in One Workspace

Discover NomadNet AI (nomadnet.ai) — unified access to frontier language models, research synthesis, and multimodal workflows.

Try NomadNet AI →Launch NomadNet Agent
ما رأيك؟
جارٍ تحميل التعليقات…