Aracılığıyla paylaş


Öğretici: Redis için Azure Cache anlamsal önbellek olarak kullanma

Bu öğreticide Redis için Azure Cache yapay zeka tabanlı büyük dil modeli (LLM) ile anlamsal önbellek olarak kullanacaksınız. Sorgulara LLM yanıtları oluşturmak ve Redis için Azure Cache kullanarak bu yanıtları önbelleğe almak, daha hızlı yanıtlar sunmak ve maliyetleri düşürmek için Azure OpenAI Hizmeti'ni kullanırsınız.

Redis için Azure Cache yerleşik vektör arama özelliği sunduğundan, anlamsal önbelleğe alma da gerçekleştirebilirsiniz. Metin aynı olmasa bile, özdeş sorgular ve anlam olarak benzer sorgular için önbelleğe alınmış yanıtlar döndürebilirsiniz.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Anlamsal önbelleğe alma için yapılandırılmış bir Redis için Azure Cache örneği oluşturma
  • LangChain'i diğer popüler Python kitaplıklarını kullanın.
  • Yapay zeka modellerinden metin oluşturmak ve sonuçları önbelleğe almak için Azure OpenAI hizmetini kullanın.
  • LLM'lerle önbelleğe alma özelliğini kullanarak elde eden performans kazanımlarına bakın.

Önemli

Bu öğreticide Jupyter Not Defteri oluşturma adımları gösterilmektedir. Bu öğreticiyi bir Python kod dosyasıyla (.py) izleyebilir ve benzer sonuçlar alabilirsiniz, ancak bu öğreticideki tüm kod bloklarını dosyaya .py eklemeniz ve sonuçları görmek için bir kez yürütmeniz gerekir. Başka bir deyişle, Siz hücreleri yürütürken Jupyter Notebooks ara sonuçlar sağlar, ancak bu bir Python kod dosyasında çalışırken beklemeniz gereken bir davranış değildir.

Önemli

Bunun yerine tamamlanmış bir Jupyter not defterini takip etmek isterseniz semanticcache.ipynb adlı Jupyter not defteri dosyasını indirin ve yeni semanticcache klasörüne kaydedin.

Önkoşullar

Redis için Azure Cache örneği oluşturma

Hızlı Başlangıç: Redis Enterprise önbellek kılavuzu oluşturma'yı izleyin. Gelişmiş sayfasında RediSearch modülünü eklediğinizden ve Kurumsal Küme İlkesi'ni seçtiğinizden emin olun. Diğer tüm ayarlar, hızlı başlangıçta açıklanan varsayılan ayarlarla eşleşebilir.

Önbelleğin oluşturulması birkaç dakika sürer. Bu arada bir sonraki adıma geçebilirsiniz.

Screenshot showing the Enterprise tier Basics tab filled out.

Geliştirme ortamınızı ayarlama

  1. Yerel bilgisayarınızda genellikle projelerinizi kaydettiğiniz konumda semanticcache adlı bir klasör oluşturun.

  2. Klasörde yeni bir python dosyası (tutorial.py) veya Jupyter not defteri (tutorial.ipynb) oluşturun.

  3. Gerekli Python paketlerini yükleyin:

    pip install openai langchain redis tiktoken
    

Azure OpenAI modelleri oluşturma

Azure OpenAI kaynağınıza dağıtılan iki model olduğundan emin olun:

  • Metin yanıtları sağlayan bir LLM. Bu öğretici için GPT-3.5-turbo-instruct modelini kullanıyoruz.

  • Geçmiş sorgularla karşılaştırılmalarına olanak sağlamak için sorguları vektörlere dönüştüren ekleme modeli. Bu öğretici için text-embedding-ada-002 (Sürüm 2) modelini kullanırız.

Daha ayrıntılı yönergeler için bkz . Model dağıtma. Her model dağıtımı için seçtiğiniz adı kaydedin.

Kitaplıkları içeri aktarma ve bağlantı bilgilerini ayarlama

Azure OpenAI'ye karşı başarılı bir şekilde çağrı yapmak için bir uç nokta ve anahtar gerekir. Ayrıca Redis için Azure Cache bağlanmak için bir uç nokta ve anahtara da ihtiyacınız vardır.

  1. Azure portalında Azure OpenAI kaynağınıza gidin.

  2. Azure OpenAI kaynağınızın Kaynak Yönetimi bölümünde Uç Nokta ve Anahtarlar'ı bulun. Hem API çağrılarınızın kimliğini doğrulamak için ihtiyacınız olduğundan uç noktanızı ve erişim anahtarınızı kopyalayın. Örnek uç nokta: https://docs-test-001.openai.azure.com. KEY1 veya KEY2 kullanabilirsiniz.

  3. Azure portalında Redis için Azure Cache kaynağınızın Genel Bakış sayfasına gidin. Uç noktanızı kopyalayın.

  4. Ayarlar bölümünde Erişim anahtarlarını bulun. Erişim anahtarınızı kopyalayın. Primary veya Secondary kullanabilirsiniz.

  5. Yeni bir kod hücresine aşağıdaki kodu ekleyin:

       # 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. ve RESOURCE_ENDPOINT değerini API_KEY Azure OpenAI dağıtımınızdaki anahtar ve uç nokta değerleriyle güncelleştirin.

  7. Azure OpenAI Hizmeti'nde dağıtılan iki modelinizin adını ve EMBEDDINGS_DEPLOYMENT_NAME olarak ayarlayınLLM_DEPLOYMENT_NAME.

  8. ve REDIS_PASSWORD öğesini Redis için Azure Cache örneğinizdeki uç nokta ve anahtar değeriyle güncelleştirinREDIS_ENDPOINT.

    Önemli

    API anahtarı, uç nokta ve dağıtım adı bilgilerini geçirmek için ortam değişkenlerini veya Azure Key Vault gibi bir gizli dizi yöneticisini kullanmanızı kesinlikle öneririz. Bu değişkenler basitlik adına burada düz metin olarak ayarlanmıştır.

  9. Kod hücresi 2'i yürütür.

Yapay zeka modellerini başlatma

Ardından LLM ve ekleme modellerini başlatacaksınız

  1. Yeni bir kod hücresine aşağıdaki kodu ekleyin:

       # 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. Kod hücresi 3'i yürütür.

Redis'i anlamsal önbellek olarak ayarlama

Ardından, LLM'niz için anlamsal önbellek olarak Redis'i belirtin.

  1. Yeni bir kod hücresine aşağıdaki kodu ekleyin:

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

    Önemli

    parametresinin score_threshold değeri, önbelleğe alınmış bir sonuç döndürmek için iki sorgunun ne kadar benzer olması gerektiğini belirler. Sayı ne kadar düşükse sorguların o kadar benzer olması gerekir. Uygulamanıza ince ayar yapmak için bu değerle işlem yapabilirsiniz.

  2. Kod hücresi 4'i yürütür.

LLM'den yanıtlar alma ve sorgulama

Son olarak, yapay zeka tarafından oluşturulan bir yanıt almak için LLM'yi sorgula. Jupyter not defteri kullanıyorsanız, kodu yürütmek için geçen süreyi çıkarmak için hücrenin en üstüne ekleyebilirsiniz %%time .

  1. Yeni bir kod hücresine aşağıdaki kodu ekleyin ve yürütür:

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

    Şuna benzer bir çıkış ve çıkış görmeniz gerekir:

    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
    

    değeri Wall time 2,67 saniyeyi gösterir. LLM'yi sorgulamak ve LLM'nin yanıt oluşturması bu kadar gerçek dünyada sürdü.

  2. 5. hücreyi yeniden yürütür. Tam olarak aynı çıkışı, ancak daha küçük bir duvar süresiyle görmeniz gerekir:

    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
    

    Duvar süresi beş kat kısaltılmış gibi görünüyor, 575 milisaniyeye kadar.

  3. Sorguyu olarak Please write a poem about cute kittens değiştirin ve 5. hücreyi Write a poem about cute kittens yeniden çalıştırın. Tam olarak aynı çıkışı ve özgün sorgudan daha düşük bir duvar süresi görmeniz gerekir. Sorgu değişse de, sorgunun anlamsal anlamı aynı kaldığından, önbelleğe alınan aynı çıkış döndürülür. Bu, anlamsal önbelleğe almanın avantajıdır!

Benzerlik eşiğini değiştirme

  1. gibi Please write a poem about cute puppiesfarklı bir anlama sahip benzer bir sorgu çalıştırmayı deneyin. Önbelleğe alınan sonucun da burada döndürüldüğünü görebilirsiniz. Sözcüğün puppies anlamsal anlamı, önbelleğe alınan sonucun döndürüldüğünü belirten sözcüye kittens yeterince yakındır.

  2. Anlamsal önbelleğin ne zaman önbelleğe alınmış bir sonuç döndürmesi gerektiğini ve LLM'den ne zaman yeni bir çıkış döndürmesi gerektiğini belirlemek için benzerlik eşiği değiştirilebilir. 4. kod hücresinde olarak değiştirin 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. Sorguyu Please write a poem about cute puppies yeniden deneyin. Yavru köpeklere özgü yeni bir çıktı almalısınız:

    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
    

    Hangi sorguların önbelleğe alındığını belirlerken doğru duyarlılığın kullanıldığından emin olmak için büyük olasılıkla uygulamanıza göre benzerlik eşiğinde ince ayar yapmanız gerekir.

Kaynakları temizleme

Bu makalede oluşturduğunuz kaynakları kullanmaya devam etmek istiyorsanız kaynak grubunu koruyun.

Aksi takdirde, kaynaklarla işiniz bittiyse ücretlerden kaçınmak için oluşturduğunuz Azure kaynak grubunu silebilirsiniz.

Önemli

Silinen kaynak grupları geri alınamaz. Kaynak grubunu sildiğinizde, içindeki tüm kaynaklar kalıcı olarak silinir. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. Tutmak istediğiniz kaynakları içeren mevcut bir kaynak grubunun içinde kaynakları oluşturduysanız, kaynak grubunu silmek yerine her kaynağı tek tek silebilirsiniz.

Kaynak grubunu silmek için

  1. Azure portalında oturum açın ve Kaynak grupları’nı seçin.

  2. Silmek istediğiniz kaynak grubunu seçin.

    Çok sayıda kaynak grubu varsa Herhangi bir alan için filtre uygula... kutusunu kullanın, bu makale için oluşturduğunuz kaynak grubunuzun adını yazın. Sonuçlar listesinden kaynak grubunu seçin.

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

  3. Kaynak grubunu sil'i seçin.

  4. Kaynak grubunun silinmesini onaylamanız istenir. Onaylamak için kaynak grubunuzun adını yazın ve ardından Sil’i seçin.

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

Birkaç dakika sonra kaynak grubu ve bu gruptaki kaynakların tümü silinir.