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.
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.
De ontwikkelomgeving instellen
Maak een map op uw lokale computer met de naam semanticcache op de locatie waar u uw projecten meestal opslaat.
Maak een nieuw Python-bestand (tutorial.py) of Jupyter Notebook (tutorial.ipynb) in de map.
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.
Ga naar uw Azure OpenAI-resource in Azure Portal.
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 kuntKEY1
ofKEY2
gebruiken.Ga naar de pagina Overzicht van uw Azure Cache voor Redis resource in Azure Portal. Kopieer uw eindpunt.
Zoek toegangssleutels in de sectie Instellingen . Kopieer uw toegangssleutel. U kunt
Primary
ofSecondary
gebruiken.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>
Werk de waarde van
API_KEY
enRESOURCE_ENDPOINT
met de sleutel- en eindpuntwaarden van uw Azure OpenAI-implementatie bij.Stel
LLM_DEPLOYMENT_NAME
deze in enEMBEDDINGS_DEPLOYMENT_NAME
op de naam van uw twee modellen die zijn geïmplementeerd in Azure OpenAI Service.Werk
REDIS_ENDPOINT
en met het eindpunt enREDIS_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.
Codecel 2 uitvoeren.
AI-modellen initialiseren
Vervolgens initialiseert u de LLM- en insluitingsmodellen
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 )
Voer codecel 3 uit.
Redis instellen als een semantische cache
Geef vervolgens Redis op als een semantische cache voor uw LLM.
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.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.
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.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.
Wijzig de query van
Please write a poem about cute kittens
enWrite 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
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 woordpuppies
is dicht bij het woordkittens
dat het resultaat in de cache wordt geretourneerd.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 van0.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))
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
Meld u aan bij Azure Portal en selecteer vervolgens Resourcegroepen.
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.
Selecteer Resourcegroep verwijderen.
U wordt gevraagd om het verwijderen van de resourcegroep te bevestigen. Typ ter bevestiging de naam van de resourcegroep. Selecteer vervolgens Verwijderen.
Na enkele ogenblikken worden de resourcegroep en alle bijbehorende resources verwijderd.