Sdílet prostřednictvím


Kurz: Použití azure Cache for Redis jako sémantické mezipaměti

V tomto kurzu použijete Azure Cache for Redis jako sémantickou mezipaměť s velkým jazykovým modelem založeným na umělé inteligenci (LLM). Pomocí služby Azure OpenAI můžete generovat odpovědi LLM na dotazy a ukládat tyto odpovědi do mezipaměti pomocí Služby Azure Cache for Redis a poskytovat rychlejší odpovědi a snížit náklady.

Vzhledem k tomu, že Azure Cache for Redis nabízí integrované funkce vektorového vyhledávání, můžete také provádět sémantické ukládání do mezipaměti. Odpovědi uložené v mezipaměti můžete vrátit pro identické dotazy a také pro dotazy, které jsou podobné významu, i když text není stejný.

V tomto kurzu se naučíte:

  • Vytvoření instance Azure Cache for Redis nakonfigurované pro sémantické ukládání do mezipaměti
  • Použijte LangChain další oblíbené knihovny Pythonu.
  • Ke generování textu z modelů AI a výsledků mezipaměti použijte službu Azure OpenAI.
  • Podívejte se na zvýšení výkonu při použití ukládání do mezipaměti s LLM.

Důležité

Tento kurz vás provede vytvořením poznámkového bloku Jupyter. Můžete postupovat podle tohoto kurzu se souborem kódu Pythonu (.py) a získat podobné výsledky, ale musíte do souboru přidat všechny bloky kódu v tomto kurzu .py a spustit jednou, abyste viděli výsledky. Jinými slovy, Jupyter Notebooks při provádění buněk poskytují přechodné výsledky, ale při práci v souboru kódu Pythonu byste neměli očekávat toto chování.

Důležité

Pokud chcete pokračovat v dokončeném poznámkovém bloku Jupyter, stáhněte si soubor poznámkového bloku Jupyter s názvem sémanticcache.ipynb a uložte ho do nové složky sémanticcache .

Požadavky

Vytvoření instance Azure Cache for Redis

Postupujte podle rychlého startu : Vytvoření průvodce mezipamětí Redis Enterprise. Na stránce Upřesnit se ujistěte, že jste přidali modul RediSearch a zvolili zásady podnikového clusteru. Všechna ostatní nastavení můžou odpovídat výchozímu nastavení popsanému v rychlém startu.

Vytvoření mezipaměti trvá několik minut. Mezitím můžete přejít k dalšímu kroku.

Snímek obrazovky znázorňující vyplněnou kartu Základy úrovně Enterprise

Nastavení vývojového prostředí

  1. Vytvořte složku v místním počítači s názvem sémanticcache v umístění, kam obvykle ukládáte projekty.

  2. Ve složce vytvořte nový soubor Pythonu (tutorial.py) nebo Jupyter Notebook (tutorial.ipynb).

  3. Nainstalujte požadované balíčky Pythonu:

    pip install openai langchain redis tiktoken
    

Vytváření modelů Azure OpenAI

Ujistěte se, že máte do prostředku Azure OpenAI nasazené dva modely:

  • LLM, který poskytuje textové odpovědi. Pro účely tohoto kurzu používáme model GPT-3.5-turbo-instruct .

  • Model vkládání, který převádí dotazy na vektory, aby je bylo možné porovnat s předchozími dotazy. Pro účely tohoto kurzu používáme model text-embedding-ada-002 (verze 2 ).

Podrobnější pokyny najdete v tématu Nasazení modelu . Poznamenejte si název, který jste zvolili pro každé nasazení modelu.

Import knihoven a nastavení informací o připojení

K úspěšnému volání azure OpenAI potřebujete koncový bod a klíč. Potřebujete také koncový bod a klíč pro připojení ke službě Azure Cache for Redis.

  1. Na webu Azure Portal přejděte k prostředku Azure OpenAI.

  2. Vyhledejte koncový bod a klíče v části Správa prostředků vašeho prostředku Azure OpenAI. Zkopírujte koncový bod a přístupový klíč, protože potřebujete obojí pro ověřování volání rozhraní API. Ukázkový koncový bod je: https://docs-test-001.openai.azure.com. Použít můžete předponu KEY1 nebo KEY2.

  3. Na webu Azure Portal přejděte na stránku Přehled vašeho prostředku Azure Cache for Redis. Zkopírujte koncový bod.

  4. Vyhledejte přístupové klíče v části Nastavení . Zkopírujte přístupový klíč. Použít můžete předponu Primary nebo Secondary.

  5. Do nové buňky kódu přidejte následující kód:

       # 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. Aktualizujte hodnotu API_KEY RESOURCE_ENDPOINT klíče a koncového bodu z nasazení Azure OpenAI.

  7. Nastavte LLM_DEPLOYMENT_NAME a EMBEDDINGS_DEPLOYMENT_NAME na název vašich dvou modelů nasazených ve službě Azure OpenAI.

  8. REDIS_PASSWORD Aktualizujte REDIS_ENDPOINT koncový bod a hodnotu klíče z instance Azure Cache for Redis.

    Důležité

    Důrazně doporučujeme použít proměnné prostředí nebo správce tajných kódů, jako je Azure Key Vault , a předat tak informace o klíči rozhraní API, koncovém bodu a názvu nasazení. Tyto proměnné jsou zde nastaveny v prostém textu kvůli jednoduchosti.

  9. Spusťte buňku kódu 2.

Inicializace modelů AI

Dále inicializujete modely LLM a vkládání.

  1. Do nové buňky kódu přidejte následující kód:

       # 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. Spusťte buňku kódu 3.

Nastavení Redis jako sémantické mezipaměti

Dále zadejte Redis jako sémantickou mezipaměť pro LLM.

  1. Do nové buňky kódu přidejte následující kód:

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

    Důležité

    Hodnota parametru score_threshold určuje, jak podobné dva dotazy musí být, aby se vrátil výsledek uložený v mezipaměti. Čím nižší je číslo, tím podobnou musí být dotazy. S touto hodnotou si můžete pohrát, abyste ji vyladili do své aplikace.

  2. Spusťte buňku kódu 4.

Dotazování a získání odpovědí z LLM

Nakonec odešlete dotaz na LLM a získejte vygenerovanou odpověď AI. Pokud používáte poznámkový blok Jupyter, můžete do horní části buňky přidat %%time výstup doby potřebné ke spuštění kódu.

  1. Do nové buňky kódu přidejte následující kód a spusťte ho:

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

    Měl by se zobrazit výstup a výstup podobný tomuto:

    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
    

    Zobrazuje Wall time hodnotu 2,67 sekund. To je to, kolik času v reálném světě trvalo dotazování LLM a aby LLM vygeneroval odpověď.

  2. Znovu spusťte buňku 5. Měl by se zobrazit stejný výstup, ale s menším časem zdi:

    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
    

    Čas zdi se zdá zkrátit faktorem pěti až do 575 milisekund.

  3. Změňte dotaz z Please write a poem about cute kittens buňky na Write a poem about cute kittens buňku 5 a spusťte ji znovu. Měl by se zobrazit stejný výstup a nižší čas zdi než původní dotaz. I když se dotaz změnil, sémantický význam dotazu zůstal stejný, takže se vrátil stejný výstup uložený v mezipaměti. To je výhoda sémantické ukládání do mezipaměti!

Změna prahové hodnoty podobnosti

  1. Zkuste spustit podobný dotaz s jiným významem, například Please write a poem about cute puppies. Všimněte si, že výsledek uložený v mezipaměti se tady také vrátí. Sémantický význam slova je dostatečně blízko slovu puppies kittens , že se vrátí výsledek uložený v mezipaměti.

  2. Prahovou hodnotu podobnosti je možné upravit tak, aby určila, kdy by sémantická mezipaměť měla vrátit výsledek v mezipaměti a kdy by měla vrátit nový výstup z LLM. V buňce kódu 4 změňte score_threshold na0.010.05:

    # 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. Zkuste dotaz Please write a poem about cute puppies zopakovat. Měli byste obdržet nový výstup, který je specifický pro štěňátka:

    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
    

    Pravděpodobně budete muset vyladit prahovou hodnotu podobnosti na základě vaší aplikace, abyste měli jistotu, že se při určování dotazů, které se mají ukládat do mezipaměti, použije správná citlivost.

Vyčištění prostředků

Pokud chcete dál používat prostředky, které jste vytvořili v tomto článku, ponechte skupinu prostředků.

Jinak pokud jste s prostředky hotovi, můžete odstranit skupinu prostředků Azure, kterou jste vytvořili, abyste se vyhnuli poplatkům.

Důležité

Odstranění skupiny prostředků je nevratné. Při odstranění skupiny prostředků se všechny prostředky, které obsahuje, trvale odstraní. Ujistěte se, že nechtěně neodstraníte nesprávnou skupinu prostředků nebo prostředky. Pokud jste prostředky vytvořili v existující skupině prostředků, která obsahuje prostředky, které chcete zachovat, můžete každý prostředek odstranit jednotlivě místo odstranění skupiny prostředků.

Odstranění skupiny prostředků

  1. Přihlaste se k portálu Azure Portal a potom vyberte Skupiny prostředků.

  2. Vyberte skupinu prostředků, kterou chcete odstranit.

    Pokud existuje mnoho skupin prostředků, použijte filtr pro jakékoli pole... zadejte název skupiny prostředků, kterou jste vytvořili pro tento článek. V seznamu výsledků vyberte skupinu prostředků.

    Snímek obrazovky se seznamem skupin prostředků, které se mají odstranit v pracovním podokně

  3. Vyberte Odstranit skupinu prostředků.

  4. Zobrazí se výzva k potvrzení odstranění skupiny prostředků. Potvrďte odstranění zadáním názvu vaší skupiny prostředků a vyberte Odstranit.

    Snímek obrazovky s formulářem, který vyžaduje název prostředku k potvrzení odstranění

Po chvíli se skupina prostředků včetně všech prostředků, které obsahuje, odstraní.