Bagikan melalui


Tutorial: Menggunakan Azure Cache for Redis sebagai cache semantik

Dalam tutorial ini, Anda menggunakan Azure Cache for Redis sebagai cache semantik dengan model bahasa besar (LLM) berbasis AI. Anda menggunakan Azure OpenAI Service untuk menghasilkan respons LLM terhadap kueri dan menyimpan respons tersebut menggunakan Azure Cache for Redis, memberikan respons yang lebih cepat dan menurunkan biaya.

Karena Azure Cache for Redis menawarkan kemampuan pencarian vektor bawaan, Anda juga dapat melakukan penembolokan semantik. Anda dapat mengembalikan respons cache untuk kueri yang identik dan juga untuk kueri yang serupa dalam arti, meskipun teksnya tidak sama.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat instans Azure Cache for Redis yang dikonfigurasi untuk penembolokan semantik
  • Gunakan LangChain pustaka Python populer lainnya.
  • Gunakan layanan Azure OpenAI untuk menghasilkan teks dari model AI dan hasil cache.
  • Lihat perolehan performa dari menggunakan penembolokan dengan LLM.

Penting

Tutorial ini memandu Anda membangun Jupyter Notebook. Anda dapat mengikuti tutorial ini dengan file kode Python (.py) dan mendapatkan hasil yang sama , tetapi Anda perlu menambahkan semua blok kode dalam tutorial ini ke dalam .py file dan menjalankan sekali untuk melihat hasil. Dengan kata lain, Jupyter Notebooks memberikan hasil menengah saat Anda menjalankan sel, tetapi ini bukan perilaku yang harus Anda harapkan saat bekerja dalam file kode Python.

Penting

Jika Anda ingin mengikuti di buku catatan Jupyter yang telah selesai, unduh file notebook Jupyter bernama semanticcache.ipynb dan simpan ke folder semanticcache baru.

Prasyarat

Membuat instans Azure Cache for Redis

Ikuti panduan Mulai Cepat: Membuat cache Redis Enterprise. Pada halaman Tingkat Lanjut , pastikan Anda menambahkan modul RediSearch dan memilih Kebijakan Kluster Perusahaan . Semua pengaturan lain dapat cocok dengan default yang dijelaskan dalam mulai cepat.

Dibutuhkan beberapa menit agar cache dibuat. Anda dapat melanjutkan ke langkah berikutnya sementara itu.

Screenshot showing the Enterprise tier Basics tab filled out.

Menyiapkan lingkungan pengembangan Anda

  1. Buat folder di komputer lokal Anda bernama semanticcache di lokasi tempat Anda biasanya menyimpan proyek.

  2. Buat file python baru (tutorial.py) atau jupyter notebook (tutorial.ipynb) di folder .

  3. Instal paket Python yang diperlukan:

    pip install openai langchain redis tiktoken
    

Membuat model Azure OpenAI

Pastikan Anda memiliki dua model yang disebarkan ke sumber daya Azure OpenAI Anda:

  • LLM yang menyediakan respons teks. Kami menggunakan model GPT-3.5-turbo-instruct untuk tutorial ini.

  • Model penyematan yang mengonversi kueri menjadi vektor untuk memungkinkannya dibandingkan dengan kueri sebelumnya. Kami menggunakan model text-embedding-ada-002 (Versi 2) untuk tutorial ini.

Lihat Menyebarkan model untuk instruksi lebih rinci. Catat nama yang Anda pilih untuk setiap penyebaran model.

Mengimpor pustaka dan menyiapkan informasi koneksi

Agar berhasil melakukan panggilan terhadap Azure OpenAI, Anda memerlukan titik akhir dan kunci. Anda juga memerlukan titik akhir dan kunci untuk menyambungkan ke Azure Cache for Redis.

  1. Buka sumber daya Azure OpenAI Anda di portal Azure.

  2. Temukan Titik Akhir dan Kunci di bagian Manajemen Sumber Daya sumber daya Azure OpenAI Anda. Salin titik akhir dan kunci akses Anda karena Anda memerlukan keduanya untuk mengautentikasi panggilan API Anda. Contoh titik akhir adalah: https://docs-test-001.openai.azure.com. Anda dapat menggunakan KEY1 atau KEY2.

  3. Buka halaman Gambaran Umum sumber daya Azure Cache for Redis Anda di portal Azure. Salin titik akhir Anda.

  4. Temukan Kunci akses di bagian Pengaturan. Salin kunci akses Anda. Anda dapat menggunakan Primary atau Secondary.

  5. Tambahkan kode berikut ke sel kode baru:

       # 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. Perbarui nilai API_KEY dan RESOURCE_ENDPOINT dengan nilai kunci dan titik akhir dari penyebaran Azure OpenAI Anda.

  7. Atur LLM_DEPLOYMENT_NAME dan EMBEDDINGS_DEPLOYMENT_NAME ke nama dua model Anda yang disebarkan di Azure OpenAI Service.

  8. Perbarui REDIS_ENDPOINT dan REDIS_PASSWORD dengan titik akhir dan nilai kunci dari instans Azure Cache for Redis Anda.

    Penting

    Sebaiknya gunakan variabel lingkungan atau manajer rahasia seperti Azure Key Vault untuk meneruskan informasi kunci API, titik akhir, dan nama penyebaran. Variabel-variabel ini diatur dalam teks biasa di sini demi kesederhanaan.

  9. Jalankan sel kode 2.

Menginisialisasi model AI

Selanjutnya, Anda menginisialisasi model LLM dan penyematan

  1. Tambahkan kode berikut ke sel kode baru:

       # 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. Jalankan sel kode 3.

Menyiapkan Redis sebagai cache semantik

Selanjutnya, tentukan Redis sebagai cache semantik untuk LLM Anda.

  1. Tambahkan kode berikut ke sel kode baru:

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

    Penting

    Nilai score_threshold parameter menentukan seberapa mirip dua kueri yang diperlukan untuk mengembalikan hasil yang di-cache. Semakin rendah angkanya, semakin mirip kueri yang diperlukan. Anda dapat bermain-main dengan nilai ini untuk menyempurnakannya dengan aplikasi Anda.

  2. Jalankan sel kode 4.

Mengkueri dan mendapatkan respons dari LLM

Terakhir, kueri LLM untuk mendapatkan respons yang dihasilkan AI. Jika Anda menggunakan notebook Jupyter, Anda dapat menambahkan %%time di bagian atas sel untuk menghasilkan jumlah waktu yang diperlukan untuk menjalankan kode.

  1. Tambahkan kode berikut ke sel kode baru dan jalankan:

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

    Anda akan melihat output dan output yang mirip dengan ini:

    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
    

    menunjukkan Wall time nilai 2,67 detik. Itulah berapa banyak waktu dunia nyata yang diperlukan untuk mengkueri LLM dan agar LLM menghasilkan respons.

  2. Jalankan sel 5 lagi. Anda akan melihat output yang sama persis, tetapi dengan waktu dinding yang lebih kecil:

    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
    

    Waktu dinding tampaknya diperpendek oleh faktor lima - semua jalan turun menjadi 575 milidetik.

  3. Ubah kueri dari Please write a poem about cute kittens ke Write a poem about cute kittens dan jalankan sel 5 lagi. Anda akan melihat output yang sama persis dan waktu dinding yang lebih rendah daripada kueri asli. Meskipun kueri berubah, arti semantik kueri tetap sama sehingga output cache yang sama dikembalikan. Ini adalah keuntungan dari penembolokan semantik!

Mengubah ambang kesamaan

  1. Coba jalankan kueri serupa dengan arti yang berbeda, seperti Please write a poem about cute puppies. Perhatikan bahwa hasil yang di-cache juga dikembalikan di sini. Arti semantik kata puppies cukup dekat dengan kata kittens bahwa hasil yang di-cache dikembalikan.

  2. Ambang kesamaan dapat dimodifikasi untuk menentukan kapan cache semantik harus mengembalikan hasil cache dan kapan harus mengembalikan output baru dari LLM. Di sel kode 4, ubah score_threshold dari 0.05 ke 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. Coba kueri Please write a poem about cute puppies lagi. Anda harus menerima output baru yang khusus untuk anak anjing:

    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
    

    Anda mungkin perlu menyempurnakan ambang kesamaan berdasarkan aplikasi Anda untuk memastikan bahwa sensitivitas yang tepat digunakan saat menentukan kueri mana yang akan di-cache.

Membersihkan sumber daya

Jika Anda ingin terus menggunakan sumber daya yang Anda buat di artikel ini, simpan grup sumber daya.

Jika tidak, jika Anda sudah selesai dengan sumber daya, Anda dapat menghapus grup sumber daya Azure yang Anda buat untuk menghindari biaya.

Penting

Penghapusan grup sumber daya tidak bisa dipulihkan. Ketika Anda menghapus grup sumber daya, semua sumber daya di dalamnya dihapus secara permanen. Pastikan Anda tidak salah menghapus grup sumber daya atau sumber daya secara tidak sengaja. Jika Anda membuat sumber daya di dalam grup sumber daya yang sudah ada yang berisi sumber daya yang ingin Anda simpan, Anda dapat menghapus setiap sumber daya satu per satu alih-alih menghapus grup sumber daya.

Untuk menghapus grup sumber daya

  1. Masuk ke portal Azure, lalu pilih Grup sumber daya.

  2. Pilih grup sumber daya yang ingin Anda hapus.

    Jika ada banyak grup sumber daya, gunakan kotak Filter untuk bidang apa pun... , ketik nama grup sumber daya yang Anda buat untuk artikel ini. Pilih grup sumber daya dalam daftar hasil.

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

  3. Pilih Hapus grup sumber daya.

  4. Anda akan diminta untuk mengonfirmasi penghapusan grup sumber daya. Ketik nama grup sumber daya Anda lagi untuk mengonfirmasi, lalu pilih Hapus.

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

Setelah beberapa saat, grup sumber daya dan semua sumber dayanya akan dihapus.