자습서: Azure Cache for Redis를 의미 체계 캐시로 사용
이 자습서에서는 AI 기반 LLM(대규모 언어 모델)을 사용하는 의미 체계 캐시로 Azure Cache for Redis를 사용합니다. Azure OpenAI Service를 사용하여 쿼리에 대한 LLM 응답을 생성하고 Azure Cache for Redis를 사용하여 해당 응답을 캐시하여 더 빠른 응답을 제공하고 비용을 절감합니다.
Azure Cache for Redis는 기본 제공 벡터 검색 기능을 제공하므로 의미 체계 캐싱을 수행할 수도 있습니다. 텍스트가 동일하지 않더라도 동일한 쿼리 및 의미가 유사한 쿼리에 대한 캐시된 응답을 반환할 수 있습니다.
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- 의미 체계 캐싱을 위해 구성된 Azure Cache for Redis 인스턴스 만들기
- LangChain의 다른 인기 있는 Python 라이브러리를 사용합니다.
- Azure OpenAI 서비스를 사용하여 AI 모델에서 텍스트를 생성하고 결과를 캐시합니다.
- LLM과 함께 캐싱을 사용하면 성능이 향상됩니다.
Important
이 자습서에서는 Jupyter Notebook 빌드 과정을 안내합니다. Python 코드 파일(.py)을 사용하여 이 자습서를 수행하고 비슷한 결과를 얻을 수 있지만, 이 자습서의 모든 코드 블록을 .py
파일에 추가하고 한 번 실행하여 결과를 확인해야 합니다. 즉, Jupyter Notebook은 셀을 실행할 때 중간 결과를 제공하지만 Python 코드 파일에서 작업할 때 예상되는 동작은 아닙니다.
Important
대신, 완성된 Jupyter Notebook을 따라 작업하려면 새 semanticcache 폴더에 semanticcache.ipynb라는 Jupyter Notebook 파일을 다운로드합니다.
필수 조건
Azure 구독 - 체험 구독 만들기
현재 원하는 Azure 구독에서 Azure OpenAI에 부여된 액세스 권한으로, Azure OpenAI에 대한 액세스를 위해 적용해야 합니다. https://aka.ms/oai/access에서 양식을 작성하여 Azure OpenAI에 대한 액세스를 신청할 수 있습니다.
Jupyter Notebook(선택 사항)
text-embedding-ada-002(버전 2) 및 gpt-35-turbo-instruct 모델이 배포된 Azure OpenAI 리소스. 이러한 모델은 현재 특정 지역에서만 사용할 수 있습니다. 모델을 배포하는 방법에 대한 지침은 리소스 배포 가이드를 참조하세요.
Azure Cache for Redis 인스턴스 만들기
빠른 시작: Redis Enterprise 캐시 만들기 가이드를 따릅니다. 고급 페이지에서 RediSearch 모듈을 추가하고 엔터프라이즈 클러스터 정책을 선택했는지 확인합니다. 다른 모든 설정은 빠른 시작에 설명된 기본값과 일치할 수 있습니다.
캐시를 만드는 데 몇 분 정도 걸립니다. 그 동안 다음 단계로 이동할 수 있습니다.
개발 환경 설정
일반적으로 로컬 컴퓨터에서 프로젝트를 저장하는 위치에 semanticcache라는 폴더를 만듭니다.
이 폴더에 새 python 파일(tutorial.py) 또는 Jupyter Notebook(tutorial.ipynb)을 만듭니다.
필요한 Python 패키지를 설치합니다.
pip install openai langchain redis tiktoken
Azure OpenAI 모델 만들기
두 가지 모델을 Azure OpenAI 리소스에 배포했는지 확인합니다.
텍스트 응답을 제공하는 LLM. 이 자습서에서는 GPT-3.5-turbo-instruct 모델을 사용합니다.
쿼리를 이전 쿼리와 비교할 수 있도록 벡터로 변환하는 포함 모델입니다. 이 자습서에서는 text-embedding-ada-002(버전 2) 모델을 사용합니다.
자세한 지침은 모델 배포를 참조하세요. 각 모델 배포에 대해 선택한 이름을 기록합니다.
라이브러리 가져오기 및 연결 정보 설정
Azure OpenAI에 대해 성공적으로 호출하려면 엔드포인트와 키가 필요합니다. 또한 Azure Cache for Redis에 연결하려면 엔드포인트 및 키가 필요합니다.
Azure Portal에서 Azure OpenAI 리소스로 이동합니다.
Azure OpenAI 리소스의 리소스 관리 섹션에서 엔드포인트 및 키를 찾습니다. API 호출을 인증하는 데 모두 필요하므로 엔드포인트 및 액세스 키를 복사합니다. 예제 엔드포인트는
https://docs-test-001.openai.azure.com
입니다.KEY1
또는KEY2
를 사용할 수 있습니다.Azure Portal에서 Azure Cache for Redis 리소스의 개요 페이지로 이동합니다. 엔드포인트를 복사합니다.
설정 섹션에서 액세스 키를 찾습니다. 액세스 키를 복사합니다.
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>
Azure OpenAI 배포의 키 및 엔드포인트 값으로
API_KEY
및RESOURCE_ENDPOINT
값을 업데이트합니다.LLM_DEPLOYMENT_NAME
및EMBEDDINGS_DEPLOYMENT_NAME
을 Azure OpenAI Service에 배포된 두 모델의 이름으로 설정합니다.REDIS_ENDPOINT
및REDIS_PASSWORD
를 Azure Cache for Redis 인스턴스의 엔드포인트 및 키 값으로 업데이트합니다.Important
환경 변수 또는 Azure Key Vault와 같은 비밀 관리자를 사용하여 API 키, 엔드포인트 및 배포 이름 정보를 전달하는 것이 좋습니다. 이러한 변수는 단순성을 위해 여기에서 일반 텍스트로 설정됩니다.
코드 셀 2를 실행합니다.
AI 모델 초기화
다음으로 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를 의미 체계 캐시로 설정
다음으로, LLM에 대한 의미 체계 캐시로 Redis를 지정합니다.
새 코드 셀에 다음 코드를 추가합니다.
# Code cell 4 redis_url = "rediss://:" + REDIS_PASSWORD + "@"+ REDIS_ENDPOINT set_llm_cache(RedisSemanticCache(redis_url = redis_url, embedding=embeddings, score_threshold=0.05))
Important
score_threshold
매개 변수 값은 캐시된 결과를 반환하기 위해 두 쿼리가 얼마나 유사해야 하는지 결정합니다. 숫자가 낮을수록 쿼리가 더 비슷해야 합니다. 이 값을 사용하여 애플리케이션에 맞게 미세 조정할 수 있습니다.코드 셀 4를 실행합니다.
LLM에서 응답 쿼리 및 가져오기
마지막으로 LLM을 쿼리하여 AI 생성 응답을 가져옵니다. Jupyter Notebook을 사용하는 경우 셀 맨 위에 %%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밀리초까지 5단계에 걸쳐 감소되는 것처럼 보입니다.
쿼리를
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 리소스 그룹을 삭제하면 됩니다.
Important
리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹을 삭제하는 경우 그 안의 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 해야 합니다. 유지하려는 리소스가 포함된 기존 리소스 그룹 내에서 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 각 리소스를 개별적으로 삭제할 수 있습니다.
리소스 그룹을 삭제하려면
Azure Portal에 로그인한 다음, 리소스 그룹을 선택합니다.
삭제하려는 리소스 그룹을 선택합니다.
리소스 그룹이 많은 경우 필드 필터링... 상자를 사용하여 이 문서에 대해 만든 리소스 그룹의 이름을 입력합니다. 결과 목록에서 리소스 그룹을 선택합니다.
리소스 그룹 삭제를 선택합니다.
리소스 그룹 삭제를 확인하는 메시지가 표시됩니다. 리소스 그룹의 이름을 입력하여 확인한 다음, 삭제를 선택합니다.
잠시 후, 리소스 그룹 및 모든 해당 리소스가 삭제됩니다.
관련 콘텐츠
- Azure Cache for Redis에 대해 자세히 알아보기
- Azure Cache for Redis 벡터 검색 기능에 대해 자세히 알아보기
- 자습서: Azure Cache for Redis에서 벡터 유사성 검색 사용
- OpenAI 및 Redis를 사용하여 AI 기반 앱을 빌드하는 방법 읽기
- 의미 체계 답변을 사용하여 Q&A 앱 빌드