Delen via


Zelfstudie: Azure Cache voor Redis gebruiken als een semantische cache

In deze zelfstudie gebruikt u Azure Cache voor Redis als een semantische cache met een op AI gebaseerd groot taalmodel (LLM). U gebruikt Azure OpenAI Service om LLM-antwoorden te genereren voor query's en deze reacties in de cache op te cachen met behulp van Azure Cache voor Redis, waardoor snellere antwoorden worden geleverd en de kosten worden verlaagd.

Omdat Azure Cache voor Redis ingebouwde vectorzoekmogelijkheden biedt, kunt u ook semantische caching uitvoeren. U kunt antwoorden in de cache retourneren voor identieke query's en ook voor query's die vergelijkbaar zijn, zelfs als de tekst niet hetzelfde is.

In deze zelfstudie leert u het volgende:

  • Een Azure Cache voor Redis-exemplaar maken dat is geconfigureerd voor semantische caching
  • Gebruik LangChain andere populaire Python-bibliotheken.
  • Gebruik de Azure OpenAI-service om tekst te genereren op basis van AI-modellen en resultaten in de cache te plaatsen.
  • Bekijk de prestatieverbeteringen van het gebruik van caching met LLM's.

Belangrijk

In deze zelfstudie leert u hoe u een Jupyter Notebook bouwt. U kunt deze zelfstudie volgen met een Python-codebestand (.py) en vergelijkbare resultaten krijgen, maar u moet alle codeblokken in deze zelfstudie toevoegen aan het .py bestand en één keer uitvoeren om resultaten te zien. Met andere woorden, Jupyter Notebooks biedt tussenliggende resultaten wanneer u cellen uitvoert, maar dit is geen gedrag dat u kunt verwachten wanneer u in een Python-codebestand werkt.

Belangrijk

Als u in plaats daarvan wilt volgen in een voltooid Jupyter-notebook, downloadt u het Jupyter-notebookbestand met de naam semanticcache.ipynb en slaat u het bestand op in de nieuwe map semanticcache .

Vereisten

  • Een Azure-abonnement - Een gratis abonnement maken

  • Toegang verleend aan Azure OpenAI in het gewenste Azure-abonnement Op dit moment moet u toegang aanvragen tot Azure OpenAI. U kunt toegang tot Azure OpenAI aanvragen door het formulier in te vullen op https://aka.ms/oai/access.

  • Python 3.11.6 of hoger

  • Jupyter Notebooks (optioneel)

  • Een Azure OpenAI-resource met de geïmplementeerde modellen voor tekst-embedding-ada-002 (versie 2) en gpt-35-turbo-instruct . Deze modellen zijn momenteel alleen beschikbaar in bepaalde regio's. Zie de handleiding voor resource-implementatie voor instructies over het implementeren van de modellen.

Een instantie van Azure Cache voor Redis maken

Volg de quickstart: Een Redis Enterprise-cachehandleiding maken. Controleer op de pagina Geavanceerd of u de RediSearch-module hebt toegevoegd en kies het clusterbeleid voor ondernemingen . Alle andere instellingen kunnen overeenkomen met de standaardinstelling die in de quickstart wordt beschreven.

Het duurt enkele minuten voordat de cache is gemaakt. U kunt ondertussen verdergaan met de volgende stap.

Schermopname van het tabblad Basics van de Enterprise-laag ingevuld.

De ontwikkelomgeving instellen

  1. Maak een map op uw lokale computer met de naam semanticcache op de locatie waar u uw projecten meestal opslaat.

  2. Maak een nieuw Python-bestand (tutorial.py) of Jupyter Notebook (tutorial.ipynb) in de map.

  3. Installeer de vereiste Python-pakketten:

    pip install openai langchain redis tiktoken
    

Azure OpenAI-modellen maken

Zorg ervoor dat u twee modellen hebt geïmplementeerd in uw Azure OpenAI-resource:

  • Een LLM die tekstantwoorden biedt. We gebruiken het GPT-3.5-turbo-instruct-model voor deze zelfstudie.

  • Een insluitmodel waarmee query's worden geconverteerd naar vectoren, zodat ze kunnen worden vergeleken met eerdere query's. Voor deze zelfstudie gebruiken we het model text-embedding-ada-002 (versie 2 ).

Zie Een model implementeren voor gedetailleerdere instructies. Noteer de naam die u hebt gekozen voor elke modelimplementatie.

Bibliotheken importeren en verbindingsgegevens instellen

Als u azure OpenAI wilt aanroepen, hebt u een eindpunt en een sleutel nodig. U hebt ook een eindpunt en een sleutel nodig om verbinding te maken met Azure Cache voor Redis.

  1. Ga naar uw Azure OpenAI-resource in Azure Portal.

  2. Zoek eindpunt en sleutels in de sectie Resourcebeheer van uw Azure OpenAI-resource. Kopieer uw eindpunt en toegangssleutel omdat u beide nodig hebt voor het verifiëren van uw API-aanroepen. Een voorbeeldeindpunt is: https://docs-test-001.openai.azure.com. U kunt KEY1 of KEY2 gebruiken.

  3. Ga naar de pagina Overzicht van uw Azure Cache voor Redis resource in Azure Portal. Kopieer uw eindpunt.

  4. Zoek toegangssleutels in de sectie Instellingen . Kopieer uw toegangssleutel. U kunt Primary of Secondary gebruiken.

  5. Voeg de volgende code toe aan een nieuwe codecel:

       # 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. Werk de waarde van API_KEY en RESOURCE_ENDPOINT met de sleutel- en eindpuntwaarden van uw Azure OpenAI-implementatie bij.

  7. Stel LLM_DEPLOYMENT_NAME deze in en EMBEDDINGS_DEPLOYMENT_NAME op de naam van uw twee modellen die zijn geïmplementeerd in Azure OpenAI Service.

  8. Werk REDIS_ENDPOINT en met het eindpunt en REDIS_PASSWORD de sleutelwaarde van uw Azure Cache voor Redis exemplaar bij.

    Belangrijk

    We raden u ten zeerste aan om omgevingsvariabelen of een geheimbeheerder zoals Azure Key Vault te gebruiken om de api-sleutel, het eindpunt en de implementatienaamgegevens door te geven. Deze variabelen worden hier ter vereenvoudiging in tekst zonder opmaak ingesteld.

  9. Codecel 2 uitvoeren.

AI-modellen initialiseren

Vervolgens initialiseert u de LLM- en insluitingsmodellen

  1. Voeg de volgende code toe aan een nieuwe codecel:

       # 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. Voer codecel 3 uit.

Redis instellen als een semantische cache

Geef vervolgens Redis op als een semantische cache voor uw LLM.

  1. Voeg de volgende code toe aan een nieuwe codecel:

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

    Belangrijk

    De waarde van de parameter bepaalt hoe vergelijkbaar twee query's moeten zijn om een resultaat in de score_threshold cache te retourneren. Hoe lager het getal, hoe vergelijkbaarer de query's moeten zijn. U kunt deze waarde gebruiken om deze af te stemmen op uw toepassing.

  2. Voer codecel 4 uit.

Query's uitvoeren en antwoorden ophalen van de LLM

Voer ten slotte een query uit op de LLM om een door AI gegenereerd antwoord te krijgen. Als u een Jupyter-notebook gebruikt, kunt u boven aan de cel toevoegen %%time om de hoeveelheid tijd die nodig is om de code uit te voeren.

  1. Voeg de volgende code toe aan een nieuwe codecel en voer deze uit:

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

    Als het goed is, ziet u uitvoer en uitvoer die er ongeveer als volgt uitzien:

    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 Wall time waarde is 2,67 seconden. Dat is hoeveel realtime het kostte om een query uit te voeren op de LLM en voor de LLM om een antwoord te genereren.

  2. Voer cel 5 opnieuw uit. U zou precies dezelfde uitvoer moeten zien, maar met een kleinere wandtijd:

    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
    

    De wandtijd lijkt te verkorten met een factor van vijf tot 575 milliseconden.

  3. Wijzig de query van Please write a poem about cute kittens en Write a poem about cute kittens voer cel 5 opnieuw uit. Als het goed is, ziet u exact dezelfde uitvoer en een lagere wandtijd dan de oorspronkelijke query. Hoewel de query is gewijzigd, bleef de semantische betekenis van de query hetzelfde, zodat dezelfde uitvoer in de cache werd geretourneerd. Dit is het voordeel van semantische caching!

De drempelwaarde voor overeenkomsten wijzigen

  1. Probeer een vergelijkbare query uit te voeren met een andere betekenis, zoals Please write a poem about cute puppies. U ziet dat het resultaat in de cache hier ook wordt geretourneerd. De semantische betekenis van het woord puppies is dicht bij het woord kittens dat het resultaat in de cache wordt geretourneerd.

  2. De drempelwaarde voor overeenkomsten kan worden gewijzigd om te bepalen wanneer de semantische cache een resultaat in de cache moet retourneren en wanneer er een nieuwe uitvoer van de LLM moet worden geretourneerd. Wijzig score_threshold in codecel 4 van 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. Probeer de query Please write a poem about cute puppies opnieuw. U ontvangt een nieuwe uitvoer die specifiek is voor puppy's:

    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
    

    Waarschijnlijk moet u de drempelwaarde voor overeenkomsten verfijnen op basis van uw toepassing om ervoor te zorgen dat de juiste gevoeligheid wordt gebruikt bij het bepalen welke query's in de cache moeten worden opgeslagen.

Resources opschonen

Als u de resources wilt blijven gebruiken die u in dit artikel hebt gemaakt, moet u de resourcegroep behouden.

Als u klaar bent met de resources, kunt u de Azure-resourcegroep verwijderen die u hebt gemaakt om kosten te voorkomen.

Belangrijk

Het verwijderen van een resourcegroep kan niet ongedaan worden gemaakt. Wanneer u een resourcegroep verwijdert, worden alle resources in de groep definitief verwijderd. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of resources verwijdert. Als u de resources in een bestaande resourcegroep hebt gemaakt die resources bevat die u wilt behouden, kunt u elke resource afzonderlijk verwijderen in plaats van de resourcegroep te verwijderen.

Een resourcegroep verwijderen

  1. Meld u aan bij Azure Portal en selecteer vervolgens Resourcegroepen.

  2. Selecteer de resourcegroep die u wilt verwijderen.

    Als er veel resourcegroepen zijn, gebruikt u het vak Filter voor een veld... en typt u de naam van de resourcegroep die u voor dit artikel hebt gemaakt. Selecteer de resourcegroep in de lijst met resultaten.

    Schermopname van een lijst met resourcegroepen die u wilt verwijderen in het werkvenster.

  3. Selecteer Resourcegroep verwijderen.

  4. U wordt gevraagd om het verwijderen van de resourcegroep te bevestigen. Typ ter bevestiging de naam van de resourcegroep. Selecteer vervolgens Verwijderen.

    Schermopname van een formulier waarvoor de resourcenaam is vereist om het verwijderen te bevestigen.

Na enkele ogenblikken worden de resourcegroep en alle bijbehorende resources verwijderd.