Självstudie: Använda Azure Cache for Redis som en semantisk cache
I den här självstudien använder du Azure Cache for Redis som en semantisk cache med en AI-baserad stor språkmodell (LLM). Du använder Azure OpenAI Service för att generera LLM-svar på frågor och cachelagrar dessa svar med hjälp av Azure Cache for Redis, vilket ger snabbare svar och lägre kostnader.
Eftersom Azure Cache for Redis erbjuder inbyggd vektorsökningsfunktion kan du även utföra semantisk cachelagring. Du kan returnera cachelagrade svar för identiska frågor och även för frågor som är liknande, även om texten inte är densamma.
I den här självstudien lär du dig att:
- Skapa en Azure Cache for Redis-instans som konfigurerats för semantisk cachelagring
- Använd LangChain andra populära Python-bibliotek.
- Använd Azure OpenAI-tjänsten för att generera text från AI-modeller och cacheresultat.
- Se prestandafördelarna med att använda cachelagring med LLM:er.
Viktigt!
Den här självstudien beskriver hur du skapar en Jupyter Notebook. Du kan följa den här självstudien med en Python-kodfil (.py) och få liknande resultat, men du måste lägga till alla kodblock i den här självstudien .py
i filen och köra en gång för att se resultat. Med andra ord ger Jupyter Notebooks mellanliggande resultat när du kör celler, men det här är inte det beteende du bör förvänta dig när du arbetar i en Python-kodfil.
Viktigt!
Om du vill följa med i en slutförd Jupyter-anteckningsbok i stället laddar du ned Jupyter Notebook-filen med namnet semanticcache.ipynb och sparar den i den nya mappen semanticcache .
Förutsättningar
En Azure-prenumeration – Skapa en kostnadsfritt
Åtkomst som beviljas till Azure OpenAI i den önskade Azure-prenumerationen För närvarande måste du ansöka om åtkomst till Azure OpenAI. Du kan ansöka om åtkomst till Azure OpenAI genom att fylla i formuläret på https://aka.ms/oai/access.
Jupyter Notebooks (valfritt)
En Azure OpenAI-resurs med modellerna text-embedding-ada-002 (version 2) och gpt-35-turbo-instruct distribuerade. Dessa modeller är för närvarande endast tillgängliga i vissa regioner. Se guiden för resursdistribution för anvisningar om hur du distribuerar modellerna.
Skapa en Azure Cache for Redis-instans
Följ snabbstarten : Skapa en Redis Enterprise-cacheguide . På sidan Avancerat ser du till att du har lagt till RediSearch-modulen och valt enterprise-klusterprincipen. Alla andra inställningar kan matcha standardvärdet som beskrivs i snabbstarten.
Det tar några minuter innan cacheminnet skapas. Du kan gå vidare till nästa steg under tiden.
Konfigurera utvecklingsmiljön
Skapa en mapp på den lokala datorn med namnet semanticcache på den plats där du vanligtvis sparar dina projekt.
Skapa en ny Python-fil (tutorial.py) eller Jupyter Notebook (tutorial.ipynb) i mappen.
Installera nödvändiga Python-paket:
pip install openai langchain redis tiktoken
Skapa Azure OpenAI-modeller
Kontrollera att du har två modeller distribuerade till din Azure OpenAI-resurs:
En LLM som tillhandahåller textsvar. Vi använder GPT-3.5-turbo-instruct-modellen för den här självstudien.
En inbäddningsmodell som konverterar frågor till vektorer så att de kan jämföras med tidigare frågor. Vi använder modellen text-embedding-ada-002 (version 2) för den här självstudien.
Mer detaljerade instruktioner finns i Distribuera en modell . Registrera namnet du valde för varje modelldistribution.
Importera bibliotek och konfigurera anslutningsinformation
Om du vill göra ett anrop mot Azure OpenAI behöver du en slutpunkt och en nyckel. Du behöver också en slutpunkt och en nyckel för att ansluta till Azure Cache for Redis.
Gå till din Azure OpenAI-resurs i Azure Portal.
Leta upp slutpunkt och nycklar i avsnittet Resurshantering i din Azure OpenAI-resurs. Kopiera slutpunkten och åtkomstnyckeln eftersom du behöver båda för att autentisera dina API-anrop. En exempelslutpunkt är:
https://docs-test-001.openai.azure.com
. Du kan använda antingenKEY1
ellerKEY2
.Gå till översiktssidan för din Azure Cache for Redis-resurs i Azure Portal. Kopiera slutpunkten.
Leta upp åtkomstnycklar i avsnittet Inställningar . Kopiera din åtkomstnyckel. Du kan använda antingen
Primary
ellerSecondary
.Lägg till följande kod i en ny kodcell:
# 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>
Uppdatera värdet
API_KEY
för ochRESOURCE_ENDPOINT
med nyckel- och slutpunktsvärdena från Azure OpenAI-distributionen.Ange
LLM_DEPLOYMENT_NAME
ochEMBEDDINGS_DEPLOYMENT_NAME
till namnet på de två modeller som distribuerats i Azure OpenAI Service.Uppdatera
REDIS_ENDPOINT
ochREDIS_PASSWORD
med slutpunkten och nyckelvärdet från din Azure Cache for Redis-instans.Viktigt!
Vi rekommenderar starkt att du använder miljövariabler eller en hemlig chef som Azure Key Vault för att skicka in information om API-nyckeln, slutpunkten och distributionsnamnet. Dessa variabler anges i klartext här för enkelhetens skull.
Kör kodcell 2.
Initiera AI-modeller
Sedan initierar du LLM- och inbäddningsmodellerna
Lägg till följande kod i en ny kodcell:
# 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 )
Kör kodcell 3.
Konfigurera Redis som en semantisk cache
Ange sedan Redis som en semantisk cache för din LLM.
Lägg till följande kod i en ny kodcell:
# Code cell 4 redis_url = "rediss://:" + REDIS_PASSWORD + "@"+ REDIS_ENDPOINT set_llm_cache(RedisSemanticCache(redis_url = redis_url, embedding=embeddings, score_threshold=0.05))
Viktigt!
Värdet för parametern
score_threshold
avgör hur lika två frågor måste vara för att returnera ett cachelagrat resultat. Ju lägre tal, desto mer lika måste frågorna vara. Du kan leka med det här värdet för att finjustera det till ditt program.Kör kodcell 4.
Fråga efter och hämta svar från LLM
Slutligen frågar du LLM för att få ett AI-genererat svar. Om du använder en Jupyter-anteckningsbok kan du lägga till %%time
längst upp i cellen för att mata ut hur lång tid det tar att köra koden.
Lägg till följande kod i en ny kodcell och kör den:
# Code cell 5 %%time response = llm("Please write a poem about cute kittens.") print(response)
Du bör se utdata och utdata som liknar följande:
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
Visar
Wall time
värdet 2,67 sekunder. Det var så mycket verklig tid det tog att fråga LLM och att LLM skulle generera ett svar.Kör cell 5 igen. Du bör se exakt samma utdata, men med en mindre väggtid:
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
Väggtiden verkar förkortas med en faktor på fem - hela vägen ner till 575 millisekunder.
Ändra frågan från
Please write a poem about cute kittens
tillWrite a poem about cute kittens
och kör cell 5 igen. Du bör se exakt samma utdata och en kortare väggtid än den ursprungliga frågan. Även om frågan ändrades förblev frågans semantiska betydelse densamma så att samma cachelagrade utdata returnerades. Det här är fördelen med semantisk cachelagring!
Ändra tröskelvärdet för likhet
Prova att köra en liknande fråga med en annan betydelse, till exempel
Please write a poem about cute puppies
. Observera att det cachelagrade resultatet också returneras här. Ordets semantiska innebördpuppies
är tillräckligt nära ordetkittens
att det cachelagrade resultatet returneras.Likhetströskelvärdet kan ändras för att avgöra när det semantiska cacheminnet ska returnera ett cachelagrat resultat och när det ska returnera nya utdata från LLM. I kodcell 4 ändrar du
score_threshold
från0.05
till0.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))
Försök med frågan
Please write a poem about cute puppies
igen. Du bör få nya utdata som är specifika för valpar: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
Du behöver förmodligen finjustera likhetströskelvärdet baserat på ditt program för att säkerställa att rätt känslighet används när du avgör vilka frågor som ska cachelageras.
Rensa resurser
Om du vill fortsätta att använda de resurser som du skapade i den här artikeln behåller du resursgruppen.
Om du är klar med resurserna kan du ta bort den Azure-resursgrupp som du skapade för att undvika avgifter.
Viktigt!
Att ta bort en resursgrupp kan inte ångras. När du tar bort en resursgrupp tas alla resurser som ingår i den bort permanent. Kontrollera att du inte av misstag tar bort fel resursgrupp eller resurser. Om du har skapat resurserna i en befintlig resursgrupp som innehåller resurser som du vill behålla kan du ta bort varje resurs individuellt i stället för att ta bort resursgruppen.
Ta bort en resursgrupp
Logga in på Azure-portalen och välj Resursgrupper.
Välj den resursgrupp som du vill ta bort.
Om det finns många resursgrupper använder du rutan Filter för alla fält... och skriver namnet på resursgruppen som du skapade för den här artikeln. Välj resursgruppen i resultatlistan.
Välj Ta bort resursgrupp.
Du blir ombedd att bekräfta borttagningen av resursgruppen. Skriv namnet på din resursgrupp för att bekräfta och välj sedan Ta bort.
Efter en liten stund tas resursgruppen och de resurser som finns i den bort.
Relaterat innehåll
- Mer information om Azure Cache for Redis
- Läs mer om sökfunktioner för Azure Cache for Redis-vektor
- Självstudie: Använda vektorlikhetssökning i Azure Cache for Redis
- Läs hur du skapar en AI-baserad app med OpenAI och Redis
- Skapa en Q&A-app med semantiska svar