يُعَد التخزين المؤقت للمطالبات طريقة لتخزين ثم إعادة استخدام الاستجابات الناتجة عن المطالبات التي تم تنفيذها عند العمل مع النماذج اللغوية مثل IBM Granite. إذا تكرَّر نفس الإدخال (المطالبة)، فبدلًا من إجراء استدعاء جديد لواجهة API، سيسترجع التطبيق الاستجابة المخزَّنة مسبقًا في ذاكرة التخزين المؤقت للمطالبات.
فكِّر في التخزين المؤقت للمطالبات كنوع من "الذاكرة" للتطبيق. يحتفظ النظام بنتائج الاستعلامات السابقة لتوفير وقت المعالجة من خلال عدم الاضطرار إلى تكرار الطلبات للإدخال نفسه.
يُعَد تخزين المطالبات مهمًا لأنه يتجنَّب تكرار استدعاءات واجهة برمجة التطبيقات (API) من خلال إعادة استخدام الاستجابات الموجودة للمطالبات المتكررة المتطابقة. تؤدي هذه القدرة إلى وقت استجابة أسرع، ومخرجات متسقة، واستخدام أقل لواجهة برمجة التطبيقات، ما يساعد على البقاء ضمن حدود المعدل. كما تساعد على توسيع نطاق التدفق وتحقيق المرونة أثناء الانقطاعات. يُعد تخزين المطالبات ميزة أساسية تضيف قيمة لأي تطبيق ذكاء اصطناعي فعَّال من حيث التكلفة، وعالي الكفاءة، وسهل الاستخدام.
تحتاج إلى حساب IBM Cloud لإنشاء مشروع watsonx.ai.
تحتاج أيضًا إلى إصدار Python 3.12.7.
رغم توفُّر عدة أدوات للاختيار منها، يُرشدك هذا الدليل خلال خطوات إعداد حساب IBM لاستخدام Jupyter Notebook.
سجِّل الدخول إلى watsonx.ai باستخدام حساب IBM Cloud الخاص بك.
أنشئ مشروع watsonx.ai. يمكنك الحصول على معرِّف المشروع من داخل مشروعك. انقر على علامة التبويب الإدارة (Manage)، ثم انسخ معرِّف المشروع من قسم التفاصيل (Details) في صفحة عام (General). ستحتاج إلى هذا المعرِّف في هذا البرنامج التعليمي.
أنشئ Jupyter Notebook. تفتح هذه الخطوة بيئة Jupyter Notebook حيث يمكنك نسخ الكود من هذا البرنامج التعليمي. وبدلًا من ذلك، يمكنك تنزيل هذا الدفتر إلى نظامك المحلي ورفعه إلى مشروعك في watsonx.ai كأصل. لعرض المزيد من برامج IBM® Granite التعليمية، تفضَّل بزيارة مجتمع IBM Granite.
أنشئ مثيل خدمة watsonx.ai Runtime (اختَر خطة Lite، وهي مثيل مجاني).
اربط مثيل خدمة watsonx.ai Runtime بالمشروع الذي أنشأته في watsonx.ai.
نحن بحاجة إلى المكتبات للعمل باستخدام إطار العمل langchain وWatsonxLLM. لنبدأ أولًا بتثبيت الحزم المطلوبة. تم بناء هذا البرنامج التعليمي باستخدام Python 3.12.7.
ملاحظة: إذا كنت تستخدم إصدارًا قديمًا من pip، يمكنك استخدام الأمر pip install --upgrade pip لتسهيل تثبيت أحدث الحزم التي قد لا تكون متوافقة مع الإصدارات القديمة. أما إذا كنت تستخدم بالفعل أحدث إصدار أو أجريتَ مؤخرًا ترقية للحِزَم، فيمكنك تخطي هذا الأمر.
تُستخدم وحدة نظام التشغيل للوصول إلى متغيرات البيئة، مثل بيانات اعتماد المشروع أو مفاتيح واجهة برمجة التطبيقات.
يُعَد WatsonxLLLM وحدة نمطية من langchain_ibm تدمج IBM Watson LLM لتوليد مخرجات من نماذج الذكاء الاصطناعي التوليدي.
تُتيح ChatWatsonx التفاعلات القائمة على الدردشة باستخدام IBM watsonx من خلال LangChain.
يتم استخدام SimpleDirectoryReader لتحميل وقراءة المستندات من دليل للفهرسة باستخدام LlamaIndex.
يحتوي GenParams على مفاتيح بيانات وصفية مخصصة لضبط مَعلمات توليد النصوص في Watsonx.
يُتيح SQLiteCache إعداد قاعدة بيانات محلية باسم .cache.db باستخدام SQLite لتفادي استدعاءات API المكررة وتسريع التطوير والاختبار.
نحن بحاجة إلى عدد قليل من المكتبات والوحدات لهذا البرنامج التعليمي. تأكَّد من استيراد المكتبات التالية، وإذا لم تكن مثبَّتة، يمكنك تثبيتها بسرعة باستخدام pip.
يضبط هذا الكود بيانات الاعتماد للوصول إلى واجهة برمجة تطبيقات IBM Watson Machine Learning (WML) ويضمن تكوين معرِّف المشروع بشكل صحيح.
يُهيئ IBM Watson LLM للاستخدام في التطبيق:
لمعرفة المزيد عن مَعلمات النموذج مثل الحد الأدنى والحد الأقصى للرموز المميزة، راجِع الوثائق.
تُعَد SQLiteCache أداة تخزين مؤقت دائم من LangChain، تخزِّن استجابات استدعاءات LLM في ملف قاعدة بيانات SQLite. تعمل SQLiteCache على تقليل وقت استخدام وحدة المعالجة المركزية بذكاء عبر تخزين العمليات الحسابية المكلفة، ما يعني أنها تركِّز على استرجاع البيانات بدلًا من إعادة حسابها. بدلًا من إعادة تنفيذ العملية بأكملها، تسحب فقط النتائج من القرص، ما يجعلها أكثر كفاءة وموثوقية وقابلية لإعادة الاستخدام.
يوضح الشكل كيف يتم تحميل النتائج فورًا من القرص عند استخدام التخزين المؤقت للمطالبات، أما في غيابه فإن كل استعلام يستهلك وقتًا في حسابات زائدة.
في هذه الحالة عمِلت وحدة المعالجة المركزية لمدة 22 ميللي ثانية فقط، لكن الزمن الفعلي المنقضي كان 1.43 ثانية.
يُشير هذا المثال إلى أن معظم الوقت قد تم استهلاكه في الانتظار، ويرجَّح أن ذلك كان بسبب عمليات الإدخال والإخراج (مثل قراءة وكتابة القرص، أو الوصول إلى الشبكة، أو استدعاء واجهة برمجة التطبيقات).
الآن، دعنا نشغِّل النموذج مرة ثانية مع المطالبة ونرى وقت الاستجابة.
من الواضح أنه باستخدام SQLiteCache، تم استخدام وحدة المعالجة المركزية لمدة 7.26 ميللي ثانية فقط، في حين كان زمن التنفيذ الكلي 6.15 ثوانٍ.
يُشير هذا بوضوح إلى حظر التبعيات الخارجية (مثل انتظار استجابة من الخادم).
يُسهم التخزين المؤقت للمطالبات في تسريع طلبات واجهة برمجة التطبيقات إلى النماذج اللغوية الكبيرة مثل GPT-4o، وتقليل تكلفتها. تخزِّن المطالبات في الذاكرة محتوى مثل الرموز المميزة للإدخال والرموز المميزة للإخراج والتضمينات والرسائل من المستخدم أو مطالبات النظام أو مخرجات وظيفة، والتي أصبحت الآن تُستَخدم من المحتوى المخزَّن بدلًا من طلبات الشبكة لإصدار جديد. توفِّر هذه الطريقة تسعيرًا أقل، وزمن انتقال أفضل، ومؤشرات أداء رئيسية محسَّنة.
يمكن أن يكون التخزين المؤقت المطالبات مفيدًا لروبوتات المحادثة وأنظمة RAG والضبط الدقيق ومساعدي التعليمات البرمجية. ستُسهم استراتيجية التخزين المؤقت الفعَّالة التي تتضمن وظائف مثل القراءة من الذاكرة المؤقتة والكتابة إليها ورسالة النظام والتحكم في التخزين المؤقت وتحديد زمن صلاحية مناسب (TTL) في تحسين معدلات النجاح في التخزين المؤقت وتقليل معدلات الإخفاق.
إن الاستخدام المتسق لرموز المطالبة نفسها وبادئة المطالبة وتعليمات النظام، يساعد على ضمان أداء ثابت للمطالبات في المحادثات متعددة الأدوار والطلبات اللاحقة. سواء أكنت تستخدم Python أم حزمة SDK أم تعمل مع OpenAI أم مزوِّد آخر، فإن فهم آلية عمل التخزين المؤقت للمطالبات سيمكِّنك بشكل أفضل من تطبيقه في العديد من حالات الاستخدام.