Руководство. Использование Кэш Azure для Redis в качестве семантического кэша
В этом руководстве вы используете Кэш Azure для Redis в качестве семантического кэша с моделью большого языка на основе ИИ (LLM). Служба Azure OpenAI используется для создания ответов LLM на запросы и кэширования этих ответов с помощью Кэш Azure для Redis, предоставления более быстрых ответов и снижения затрат.
Так как Кэш Azure для Redis предлагает встроенные возможности поиска векторов, вы также можете выполнять семантические кэширования. Вы можете возвращать кэшированные ответы для идентичных запросов, а также для запросов, которые похожи в значении, даже если текст не совпадает.
В этом руководстве описано следующее:
- Создание экземпляра Кэш Azure для Redis, настроенного для семантического кэширования
- Используйте LangChain и другие популярные библиотеки Python.
- Используйте службу Azure OpenAI для создания текста из моделей ИИ и результатов кэширования.
- Узнайте, как повысить производительность при использовании кэширования с помощью LLM.
Внимание
В этом руководстве описывается создание Jupyter Notebook. Вы можете следовать этому руководству с файлом кода Python (.py) и получить аналогичные результаты, но вам нужно добавить все блоки кода в этом руководстве в .py
файл и выполнить один раз, чтобы просмотреть результаты. Другими словами, Jupyter Notebook предоставляет промежуточные результаты при выполнении ячеек, но это не следует ожидать при работе в файле кода Python.
Внимание
Если вы хотите продолжить работу в завершенной записной книжке Jupyter, скачайте файл записной книжки Jupyter с именем semanticcache.ipynb и сохраните его в новой папке семантики.
Необходимые компоненты
подписка Azure — создайте бесплатную учетную запись.
Доступ, предоставленный Azure OpenAI в требуемой подписке Azure Сейчас, необходимо подать заявку на доступ к Azure OpenAI. Вы можете подать заявку на доступ к Azure OpenAI, выполнив форму по адресу https://aka.ms/oai/access.
Записные книжки Jupyter (необязательно)
Ресурс Azure OpenAI с развернутыми моделями преобразования текста ada-002 (версия 2) и gpt-35-turbo-instruct . Сейчас эти модели доступны только в определенных регионах. Инструкции по развертыванию моделей см. в руководстве по развертыванию ресурсов.
Создание экземпляра кэша Azure для Redis
Следуйте инструкциям из краткого руководства по созданию кэша Redis Enterprise. На странице "Дополнительно" убедитесь, что вы добавили модуль RediSearch и выбрали политику корпоративного кластера. Все остальные параметры могут соответствовать умолчанию, описанному в кратком руководстве.
Создание кэша занимает несколько минут. Вы можете перейти к следующему шагу в то же время.
Настройка среды разработки
Создайте папку на локальном компьютере семантикой в расположении, где обычно сохраняются проекты.
Создайте файл Python (tutorial.py) или записную книжку Jupyter (tutorial.ipynb) в папке.
Установите необходимые пакеты Python:
pip install openai langchain redis tiktoken
Создание моделей Azure OpenAI
Убедитесь, что у вас есть две модели, развернутые в ресурсе Azure OpenAI:
LLM, предоставляющий текстовые ответы. Мы используем модель инструкции GPT-3.5-turbo-instruct для этого руководства.
Модель внедрения, которая преобразует запросы в векторы, чтобы их можно было сравнить с прошлыми запросами. Мы используем модель внедрения текста ada-002 (версия 2) для этого руководства.
Дополнительные инструкции см. в статье "Развертывание модели ". Запишите имя, выбранное для каждого развертывания модели.
Импорт библиотек и настройка сведений о подключении
Чтобы успешно выполнить вызов к Azure OpenAI, вам потребуется конечная точка и ключ. Для подключения к Кэш Azure для Redis также требуется конечная точка и ключ.
Перейдите к ресурсу Azure OpenAI в портал Azure.
Найдите конечную точку и ключи в разделе "Управление ресурсами" ресурса Azure OpenAI. Скопируйте конечную точку и ключ доступа, так как требуется для проверки подлинности вызовов API. Пример конечной точки:
https://docs-test-001.openai.azure.com
. Вы можете использоватьKEY1
илиKEY2
.Перейдите на страницу обзора ресурса Кэш Azure для Redis в портал Azure. Скопируйте конечную точку.
Найдите ключи Access в разделе "Параметры". Скопируйте ключ доступа. Вы можете использовать
Primary
илиSecondary
.Добавьте следующий код в новую ячейку кода:
# 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>
Обновите значение и значения ключей
API_KEY
RESOURCE_ENDPOINT
и конечных точек из развертывания Azure OpenAI.Задайте и
EMBEDDINGS_DEPLOYMENT_NAME
укажитеLLM_DEPLOYMENT_NAME
имя двух моделей, развернутых в Службе OpenAI Azure.Обновите
REDIS_ENDPOINT
иREDIS_PASSWORD
используя значение конечной точки и ключа из экземпляра Кэш Azure для Redis.Внимание
Настоятельно рекомендуется использовать переменные среды или диспетчер секретов, например Azure Key Vault , чтобы передать сведения о ключе API, конечной точке и имени развертывания. Эти переменные задаются в виде открытого текста в целях простоты.
Выполните ячейку кода 2.
Инициализация моделей ИИ
Затем вы инициализируете модели LLM и внедрения
Добавьте следующий код в новую ячейку кода:
# 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 )
Выполните ячейку кода 3.
Настройка Redis в качестве семантического кэша
Затем укажите Redis в качестве семантического кэша для LLM.
Добавьте следующий код в новую ячейку кода:
# Code cell 4 redis_url = "rediss://:" + REDIS_PASSWORD + "@"+ REDIS_ENDPOINT set_llm_cache(RedisSemanticCache(redis_url = redis_url, embedding=embeddings, score_threshold=0.05))
Внимание
Значение
score_threshold
параметра определяет, как аналогичные два запроса должны быть для возврата кэшированного результата. Чем ниже число, тем более похожими должны быть запросы. Вы можете обойти это значение, чтобы точно настроить его в приложении.Выполните ячейку кода 4.
Запрос и получение ответов от LLM
Наконец, запросите LLM, чтобы получить созданный ИИ ответ. Если вы используете записную книжку Jupyter, можно добавить %%time
в верхней части ячейки, чтобы вывести время, затраченное на выполнение кода.
Добавьте следующий код в новую ячейку кода и выполните его:
# Code cell 5 %%time response = llm("Please write a poem about cute kittens.") print(response)
Вы должны увидеть выходные данные и выходные данные, аналогичные следующему:
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
Отображается
Wall time
значение 2,67 секунды. Это то, сколько времени в реальном мире потребовалось для запроса LLM и для LLM, чтобы создать ответ.Снова выполните ячейку 5. Вы должны увидеть одинаковые выходные данные, но с меньшим временем стены:
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
Время стены, как представляется, сокращается коэффициентом пяти-всех до 575 миллисекунда.
Измените запрос на
Please write a poem about cute kittens
Write a poem about cute kittens
и запустите ячейку 5 еще раз. Вы должны увидеть точно те же выходные данные и нижнее время стены, чем исходный запрос. Несмотря на то, что запрос изменился, семантический смысл запроса остался неизменным, поэтому возвращены те же кэшированные выходные данные. Это преимущество семантического кэширования!
Изменение порога сходства
Попробуйте выполнить аналогичный запрос с другим значением, например
Please write a poem about cute puppies
. Обратите внимание, что кэшированный результат также возвращается здесь. Семантическое значение слова достаточно близко к словуpuppies
kittens
, возвращаемого кэшируемым результатом.Порог сходства можно изменить, чтобы определить, когда семантический кэш должен возвращать кэшированный результат и когда он должен возвращать новые выходные данные из LLM. В ячейке кода 4 переход с
score_threshold
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))
Повторите запрос
Please write a poem about cute puppies
. Вы должны получить новые выходные данные, относящиеся к щенкам: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
Скорее всего, необходимо точно настроить порог сходства на основе приложения, чтобы обеспечить правильную конфиденциальность при определении запросов для кэширования.
Очистка ресурсов
Если вы хотите продолжить использовать ресурсы, созданные в этой статье, сохраните группу ресурсов.
В противном случае, чтобы избежать расходов, связанных с ресурсами, при завершении использования ресурсов можно удалить созданную группу ресурсов Azure.
Предупреждение
Удаление группы ресурсов — процесс необратимый. При удалении группы ресурсов все ресурсы в группе ресурсов удаляются безвозвратно. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали ресурсы внутри существующей группы ресурсов с ресурсами, которые необходимо сохранить, можно удалить каждый ресурс по отдельности, а не удалить группу ресурсов.
Удаление группы ресурсов
Войдите на портал Azure и щелкните Группы ресурсов.
Выберите группу ресурсов для удаления.
Если в фильтре для любого поля существует много групп ресурсов, введите имя созданной группы ресурсов для выполнения этой статьи. В списке результатов поиска выберите группу ресурсов.
Выберите команду Удалить группу ресурсов.
В области "Удалить группу ресурсов" введите имя группы ресурсов, чтобы подтвердить, и нажмите кнопку "Удалить".
В течение нескольких минут группа ресурсов и все его ресурсы удаляются.
Связанный контент
- Подробнее о Кэше Azure для Redis
- Дополнительные сведения о возможностях поиска векторов Кэш Azure для Redis
- Руководство. Использование поиска по сходству векторов в Кэш Azure для Redis
- Узнайте, как создать приложение на основе ИИ с помощью OpenAI и Redis
- Создание приложения Q&A с помощью семантических ответов