البرنامج التعليمي: استخدام ذاكرة التخزين المؤقت Azure ل Redis كذاكرة تخزين مؤقت دلالية

في هذا البرنامج التعليمي، يمكنك استخدام ذاكرة التخزين المؤقت Azure ل Redis كذاكرة تخزين مؤقت دلالية مع نموذج لغة كبيرة مستندة إلى الذكاء الاصطناعي (LLM). يمكنك استخدام خدمة Azure OpenAI لإنشاء استجابات LLM للاستعلامات وتخزين تلك الاستجابات مؤقتا باستخدام ذاكرة التخزين المؤقت Azure ل Redis، وتقديم استجابات أسرع وخفض التكاليف.

نظرا لأن Azure Cache for Redis يوفر إمكانية بحث متجه مضمنة، يمكنك أيضا إجراء التخزين المؤقت الدلالي. يمكنك إرجاع الاستجابات المخزنة مؤقتا للاستعلامات المتطابقة وكذلك للاستعلامات المتشابهة في المعنى، حتى إذا لم يكن النص هو نفسه.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • إنشاء مثيل Azure Cache for Redis تم تكوينه للتخزين المؤقت الدلالي
  • استخدم مكتبات Python الشائعة الأخرى في LangChain.
  • استخدم خدمة Azure OpenAI لإنشاء نص من نماذج الذكاء الاصطناعي ونتائج ذاكرة التخزين المؤقت.
  • راجع مكاسب الأداء من استخدام التخزين المؤقت مع LLMs.

هام

يرشدك هذا البرنامج التعليمي خلال إنشاء Jupyter Notebook. يمكنك متابعة هذا البرنامج التعليمي مع ملف التعليمات البرمجية Python (.py) والحصول على نتائج مماثلة ، ولكن تحتاج إلى إضافة جميع كتل التعليمات البرمجية في هذا البرنامج التعليمي في .py الملف وتنفيذ مرة واحدة لمشاهدة النتائج. بمعنى آخر، توفر Jupyter Notebooks نتائج وسيطة أثناء تنفيذ الخلايا، ولكن هذا ليس السلوك الذي يجب أن تتوقعه عند العمل في ملف التعليمات البرمجية ل Python.

هام

إذا كنت ترغب في المتابعة في دفتر ملاحظات Jupyter مكتمل بدلا من ذلك، فنزل ملف دفتر ملاحظات Jupyter المسمى semanticcache.ipynb واحفظه في المجلد الدلالي الجديد.

المتطلبات الأساسية

  • اشتراك Azure - إنشاء اشتراك مجاناً

  • الوصول الممنوح إلى Azure OpenAI في اشتراك Azure المطلوب حاليا، يجب عليك التقدم بطلب للوصول إلى Azure OpenAI. يمكنك التقدم بطلب للوصول إلى Azure OpenAI عن طريق إكمال النموذج في https://aka.ms/oai/access.

  • Python 3.11.6 أو إصدار أحدث

  • Jupyter Notebooks (اختياري)

  • مورد Azure OpenAI مع توزيع نماذج text-embedding-ada-002 (الإصدار 2) وgpt-35-turbo-instruct. تتوفر هذه النماذج حاليا فقط في مناطق معينة. راجع دليل توزيع الموارد للحصول على إرشادات حول كيفية نشر النماذج.

إنشاء مثيل Azure Cache لـ Redis

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

يستغرق إنشاء ذاكرة التخزين المؤقت بضع دقائق. يمكنك الانتقال إلى الخطوة التالية في هذه الأثناء.

Screenshot showing the Enterprise tier Basics tab filled out.

إعداد بيئة التطوير

  1. أنشئ مجلدا على الكمبيوتر المحلي باسم semanticcache في الموقع الذي تحفظ فيه مشاريعك عادة.

  2. إنشاء ملف python جديد (tutorial.py) أو دفتر ملاحظات Jupyter (tutorial.ipynb) في المجلد.

  3. تثبيت حزم Python المطلوبة:

    pip install openai langchain redis tiktoken
    

إنشاء نماذج Azure OpenAI

تأكد من أن لديك نموذجين تم نشرهما في مورد Azure OpenAI:

  • LLM الذي يوفر استجابات نصية. نستخدم نموذج GPT-3.5-turbo-instruct لهذا البرنامج التعليمي.

  • نموذج تضمين يحول الاستعلامات إلى خطوط متجهة للسماح بمقارنتها بالاستعلامات السابقة. نستخدم نموذج text-embedding-ada-002 (الإصدار 2) لهذا البرنامج التعليمي.

راجع نشر نموذج للحصول على إرشادات أكثر تفصيلا. سجل الاسم الذي اخترته لكل نشر نموذج.

استيراد المكتبات وإعداد معلومات الاتصال

لإجراء مكالمة بنجاح مقابل Azure OpenAI، تحتاج إلى نقطة نهاية ومفتاح. تحتاج أيضا إلى نقطة نهاية ومفتاح للاتصال بذاكرة التخزين المؤقت Azure ل Redis.

  1. انتقل إلى مورد Azure OpenAI في مدخل Microsoft Azure.

  2. حدد موقع نقطة النهاية والمفاتيح في قسم إدارة الموارد في مورد Azure OpenAI. انسخ نقطة النهاية ومفتاح الوصول لأنك تحتاج إلى كليهما لمصادقة استدعاءات واجهة برمجة التطبيقات. مثال على نقطة النهاية هو: https://docs-test-001.openai.azure.com. يمكنك استخدام إما KEY1 أو KEY2.

  3. انتقل إلى صفحة نظرة عامة على Azure Cache لمورد Redis في مدخل Microsoft Azure. انسخ نقطة النهاية.

  4. حدد موقع مفاتيح Access في قسم الإعدادات. انسخ مفتاح الوصول الخاص بك. يمكنك استخدام إما Primary أو Secondary.

  5. أضف التعليمات البرمجية التالية إلى خلية تعليمات برمجية جديدة:

       # Code cell 2
    
    import openai
    import redis
    import os
    import langchain
    from langchain.llms import AzureOpenAI
    from langchain.embeddings import AzureOpenAIEmbeddings
    from langchain.globals import set_llm_cache
    from langchain.cache import RedisSemanticCache
    import time
    
    
    AZURE_ENDPOINT=<your-openai-endpoint>
    API_KEY=<your-openai-key>
    API_VERSION="2023-05-15"
    LLM_DEPLOYMENT_NAME=<your-llm-model-name>
    LLM_MODEL_NAME="gpt-35-turbo-instruct"
    EMBEDDINGS_DEPLOYMENT_NAME=<your-embeddings-model-name>
    EMBEDDINGS_MODEL_NAME="text-embedding-ada-002"
    
    REDIS_ENDPOINT = <your-redis-endpoint>
    REDIS_PASSWORD = <your-redis-password>
    
    
  6. قم بتحديث قيمة API_KEY و RESOURCE_ENDPOINT بقيم المفتاح ونقطة النهاية من توزيع Azure OpenAI.

  7. EMBEDDINGS_DEPLOYMENT_NAME قم بتعيين LLM_DEPLOYMENT_NAME وإلى اسم النموذجين المنشورين في خدمة Azure OpenAI.

  8. قم بتحديث REDIS_ENDPOINT و REDIS_PASSWORD بنقطة النهاية وقيمة المفتاح من Azure Cache لمثيل Redis.

    هام

    نوصي بشدة باستخدام المتغيرات البيئية أو مدير سري مثل Azure Key Vault لتمرير مفتاح API ونقطة النهاية ومعلومات اسم النشر. يتم تعيين هذه المتغيرات في نص عادي هنا من أجل البساطة.

  9. تنفيذ خلية التعليمات البرمجية 2.

تهيئة نماذج الذكاء الاصطناعي

بعد ذلك، يمكنك تهيئة نماذج LLM وتضمينها

  1. أضف التعليمات البرمجية التالية إلى خلية تعليمات برمجية جديدة:

       # Code cell 3
    
    llm = AzureOpenAI(
        deployment_name=LLM_DEPLOYMENT_NAME,
        model_name="gpt-35-turbo-instruct",
        openai_api_key=API_KEY,
        azure_endpoint=AZURE_ENDPOINT,
        openai_api_version=API_VERSION,
    )
    embeddings = AzureOpenAIEmbeddings(
        azure_deployment=EMBEDDINGS_DEPLOYMENT_NAME,
        model="text-embedding-ada-002",
        openai_api_key=API_KEY,
        azure_endpoint=AZURE_ENDPOINT,
        openai_api_version=API_VERSION
    )
    
  2. تنفيذ خلية التعليمات البرمجية 3.

إعداد Redis كذاكرة تخزين مؤقت دلالية

بعد ذلك، حدد Redis كذاكرة تخزين مؤقت دلالية ل LLM الخاص بك.

  1. أضف التعليمات البرمجية التالية إلى خلية تعليمات برمجية جديدة:

       # Code cell 4
    
    redis_url = "rediss://:" + REDIS_PASSWORD + "@"+ REDIS_ENDPOINT
    set_llm_cache(RedisSemanticCache(redis_url = redis_url, embedding=embeddings, score_threshold=0.05))
    

    هام

    تحدد قيمة المعلمة score_threshold مدى تشابه استعلمين لإرجاع نتيجة مخزنة مؤقتا. كلما انخفض الرقم، زادت تشابه الاستعلامات. يمكنك التغلب على هذه القيمة لضبطها على التطبيق الخاص بك.

  2. تنفيذ خلية التعليمات البرمجية 4.

الاستعلام عن الاستجابات والحصول عليها من LLM

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

  1. أضف التعليمات البرمجية التالية إلى خلية تعليمات برمجية جديدة وقم بتنفيذها:

    # Code cell 5
    %%time
    response = llm("Please write a poem about cute kittens.")
    print(response)
    

    يجب أن تشاهد مخرجات ومخرجات مشابهة لهذا:

    Fluffy balls of fur,
    With eyes so bright and pure,
    Kittens are a true delight,
    Bringing joy into our sight.
    
    With tiny paws and playful hearts,
    They chase and pounce, a work of art,
    Their innocence and curiosity,
    Fills our hearts with such serenity.
    
    Their soft meows and gentle purrs,
    Are like music to our ears,
    They curl up in our laps,
    And take the stress away in a snap.
    
    Their whiskers twitch, they're always ready,
    To explore and be adventurous and steady,
    With their tails held high,
    They're a sight to make us sigh.
    
    Their tiny faces, oh so sweet,
    With button noses and paw-sized feet,
    They're the epitome of cuteness,
    ...
    Cute kittens, a true blessing,
    In our hearts, they'll always be reigning.
    CPU times: total: 0 ns
    Wall time: 2.67 s
    

    Wall time يظهر قيمة 2.67 ثانية. هذا هو مقدار الوقت الحقيقي الذي استغرقه الاستعلام عن LLM و LLM لإنشاء استجابة.

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

    Fluffy balls of fur,
    With eyes so bright and pure,
    Kittens are a true delight,
    Bringing joy into our sight.
    
    With tiny paws and playful hearts,
    They chase and pounce, a work of art,
    Their innocence and curiosity,
    Fills our hearts with such serenity.
    
    Their soft meows and gentle purrs,
    Are like music to our ears,
    They curl up in our laps,
    And take the stress away in a snap.
    
    Their whiskers twitch, they're always ready,
    To explore and be adventurous and steady,
    With their tails held high,
    They're a sight to make us sigh.
    
    Their tiny faces, oh so sweet,
    With button noses and paw-sized feet,
    They're the epitome of cuteness,
    ...
    Cute kittens, a true blessing,
    In our hearts, they'll always be reigning.
    CPU times: total: 0 ns
    Wall time: 575 ms
    

    يبدو أن وقت الحائط يقصر بمقدار خمسة-- وصولا إلى 575 مللي ثانية.

  3. قم بتغيير الاستعلام من Please write a poem about cute kittens إلى Write a poem about cute kittens ثم قم بتشغيل الخلية 5 مرة أخرى. يجب أن تشاهد نفس الإخراج بالضبط ووقت جدار أقل من الاستعلام الأصلي. على الرغم من تغيير الاستعلام، ظل المعنى الدلالي للاستعلام كما هو، لذلك تم إرجاع نفس الإخراج المخزن مؤقتا. هذه هي ميزة التخزين المؤقت الدلالي!

تغيير حد التشابه

  1. حاول تشغيل استعلام مشابه مع معنى مختلف، مثل Please write a poem about cute puppies. لاحظ أن النتيجة المخزنة مؤقتا يتم إرجاعها هنا أيضا. المعنى الدلالي للكلمة puppies قريب بما يكفي من الكلمة kittens التي يتم إرجاع النتيجة المخزنة مؤقتا.

  2. يمكن تعديل حد التشابه لتحديد متى يجب أن ترجع ذاكرة التخزين المؤقت الدلالية نتيجة مخزنة مؤقتا ومتى يجب أن ترجع إخراجا جديدا من LLM. في خلية التعليمات البرمجية 4، قم بالتغيير score_threshold من 0.05 إلى 0.01:

    # Code cell 4
    
    redis_url = "rediss://:" + REDIS_PASSWORD + "@"+ REDIS_ENDPOINT
    set_llm_cache(RedisSemanticCache(redis_url = redis_url, embedding=embeddings, score_threshold=0.01))
    
  3. حاول الاستعلام Please write a poem about cute puppies مرة أخرى. يجب أن تتلقى مخرجات جديدة خاصة بالجراء:

    Oh, little balls of fluff and fur
    With wagging tails and tiny paws
    Puppies, oh puppies, so pure
    The epitome of cuteness, no flaws
    
    With big round eyes that melt our hearts
    And floppy ears that bounce with glee
    Their playful antics, like works of art
    They bring joy to all they see
    
    Their soft, warm bodies, so cuddly
    As they curl up in our laps
    Their gentle kisses, so lovingly
    Like tiny, wet, puppy taps
    
    Their clumsy steps and wobbly walks
    As they explore the world anew
    Their curiosity, like a ticking clock
    Always eager to learn and pursue
    
    Their little barks and yips so sweet
    Fill our days with endless delight
    Their unconditional love, so complete
    ...
    For they bring us love and laughter, year after year
    Our cute little pups, in every way.
    CPU times: total: 15.6 ms
    Wall time: 4.3 s
    

    من المحتمل أن تحتاج إلى ضبط حد التشابه استنادا إلى التطبيق الخاص بك للتأكد من استخدام الحساسية الصحيحة عند تحديد الاستعلامات المراد تخزينها مؤقتا.

تنظيف الموارد

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

وإلا، إذا انتهيت من الموارد، يمكنك حذف مجموعة موارد Azure التي قمت بإنشائها لتجنب الرسوم.

هام

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

لحذف مجموعة موارد

  1. سجل الدخول إلى مدخل Azure، وحدد "Resource groups".

  2. حدد مجموعة الموارد التي تريد حذفها.

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

    Screenshot showing a list of resource groups to delete in the working pane.

  3. حدد Delete resource group.

  4. يُطلب منك تأكيد حذف مجموعة الموارد. اكتب اسم مجموعة الموارد لتأكيده، واختر "Delete".

    Screenshot showing a form that requires the resource name to confirm deletion.

بعد مرور لحظات قليلة، يتم حذف مجموعة الموارد وجميع مواردها.