본문 바로가기

인공지능

Langchain으로 LLM 효율 높이기: 비용 절감과 응답 속도 향상을 위한 캐시 활용법

728x90
반응형

캐시(Cache)란 무엇인가요?

캐시는 자주 사용되는 데이터나 연산 결과를 임시로 저장해두어, 동일한 요청이 있을 때 다시 계산하지 않고 저장된 데이터를 반환하는 기술입니다. 이를 통해 데이터를 빠르게 가져올 수 있으며, 반복적인 연산을 줄여 리소스 사용량을 최적화할 수 있습니다.

반응형

LLM 애플리케이션에 캐시를 적용하면 얻을 수 있는 이점

대규모 언어 모델(LLM)을 사용할 때 동일한 쿼리나 유사한 질문이 반복적으로 들어올 수 있습니다. 매번 동일한 결과를 생성하는 대신 캐시된 결과를 반환하면 비용 절감과 응답 속도 향상이라는 두 가지 큰 이점을 얻을 수 있습니다.

1. 비용 절감

LLM 모델은 토큰을 처리할 때마다 비용이 발생합니다. 동일한 질문을 반복적으로 입력할 경우 매번 API를 호출하면 비용이 계속 누적됩니다. 하지만 캐시를 사용하면 동일한 요청에 대해 API 호출 없이 캐시된 응답을 사용할 수 있기 때문에 토큰 처리 비용을 절감할 수 있습니다.

2. 응답 속도 향상

캐시를 사용하면 API를 호출하여 결과를 생성하는 시간이 줄어들어 응답 속도가 빨라집니다. 즉, 사용자는 더욱 신속하게 결과를 확인할 수 있어 사용자 경험이 향상됩니다.

Langchain에서 캐시를 적용하는 방법

Langchain은 다양한 방식으로 캐싱을 지원하여 LLM 애플리케이션 개발 시 유용하게 활용될 수 있습니다. 아래에 여러 캐싱 방법과 간단한 코드 예제를 소개합니다.

1. 메모리 캐시 (In-Memory Cache)

메모리 캐시는 가장 간단한 캐싱 방식으로, 로컬 시스템의 메모리에 데이터를 저장합니다. 애플리케이션이 실행되는 동안만 캐시가 유지되므로 빠른 응답이 필요하지만 지속적인 저장이 필요하지 않은 경우에 적합합니다.

from langchain.llms import OpenAI
from langchain.callbacks import get_openai_callback
from langchain.globals import set_llm_cache
from langchain.cache import InMemoryCache

set_llm_cache(InMemoryCache())
llm = OpenAI(openai_api_key="{YOUR_API_KEY}")
prompt = "What is famous street foods in Seoul Korea in 200 characters"

with get_openai_callback() as callback:
    response = llm.invoke(prompt)
    print(response)
    print("Total Tokens:", callback.total_tokens)

2. SQLite 캐시

SQLite 캐시는 로컬 데이터베이스 파일에 데이터를 저장하여, 애플리케이션이 종료되더라도 캐시 데이터를 유지할 수 있습니다. 단일 사용자 애플리케이션에 적합합니다.

from langchain.cache import SQLiteCache

set_llm_cache(SQLiteCache(database_path="llm_cache.db"))
llm = OpenAI(openai_api_key="{YOUR_API_KEY}")

3. Redis 캐시

Redis 캐시는 네트워크를 통해 여러 클라이언트와 데이터를 공유할 수 있는 캐싱 방식입니다. 빠른 접근과 높은 캐시 히트율을 필요로 하는 경우에 적합합니다.

from langchain.cache import RedisCache
from redis import Redis

set_llm_cache(RedisCache(redis_=Redis(host='{YOUR_REDIS_INSTANCE_ADDRESS}', port={YOUR_REDIS_INSTANCE_PORT}, password='{YOUR_REDIS_INSTANCE_PASSWORD}')))
llm = OpenAI(openai_api_key="{YOUR_API_KEY}")

4. 시맨틱 캐시 (Semantic Cache)

시맨틱 캐시는 프롬프트의 의미를 벡터로 변환해 유사한 질문에 대해 캐시된 결과를 반환하는 방식입니다. 단순 문자열 비교가 아닌 문장 유사도를 기반으로 캐시를 활용할 수 있어 다양한 형태의 유사 질문에 대해 유용합니다.

from langchain.cache import RedisSemanticCache
from langchain.embeddings import OpenAIEmbeddings

set_llm_cache(RedisSemanticCache(redis_url="redis://default:{YOUR_REDIS_PASSWORD}@{YOUR_REDIS_INSTANCE_ADDRESS}:{YOUR_REDIS_INSTANCE_PORT}", embedding=OpenAIEmbeddings()))
llm = OpenAI()

이처럼 다양한 캐싱 방법을 통해 LLM 애플리케이션의 응답 속도를 향상시키고 비용을 절감할 수 있습니다. 특히, 개발 과정에서 불필요한 반복 호출을 줄이거나 운영 환경에서 효율적으로 모델을 사용할 때 캐싱은 매우 중요한 역할을 합니다.

728x90

마무리

LLM 애플리케이션 개발 시 캐시를 적용하면 비용 절감과 응답 속도 향상이라는 큰 이점을 얻을 수 있습니다. Langchain이 제공하는 다양한 캐싱 옵션을 활용해 개발 중의 효율을 높여보세요!

728x90
반응형