Pular para o conteúdo principal

Tutorial GPTCache: aumentando a eficiência em aplicações com LLM

Aprenda como o GPTCache recupera resultados em cache em vez de gerar novas respostas do zero.
· 8 min leer

Explore com IA

GPTCache é um framework open source para aplicações com modelos de linguagem de grande porte (LLM), como o ChatGPT. Ele armazena respostas de LLM já geradas para consultas semelhantes. Em vez de depender do LLM a cada vez, a aplicação verifica o cache em busca de uma resposta relevante para economizar seu tempo.

Este guia explica como o GPTCache funciona e como você pode usá-lo com eficiência nos seus projetos.

O que é o GPTCache?

GPTCache é um sistema de cache criado para melhorar o desempenho e a eficiência de modelos de linguagem de grande porte (LLMs) como o GPT-3. Ele ajuda LLMs a armazenar consultas e respostas já geradas para economizar tempo e processamento.

Quando surge uma consulta semelhante, o LLM pode recuperar a resposta em cache em vez de gerar uma nova do zero.

Diferente de outras ferramentas, o GPTCache trabalha com cache semântico. Caches semânticos preservam a intenção de uma consulta/solicitação. Assim, quando consultas armazenadas são recuperadas, o resultado reduz a carga do servidor e melhora as taxas de acerto do cache.

Vantagens de usar o GPTCache

A ideia central do GPTCache é armazenar e reutilizar os cálculos intermediários gerados durante o processo de inferência de um LLM. Isso traz vários benefícios:

Economia em chamadas de API de LLM

A maioria dos LLMs cobra por solicitação com base no número de tokens processados. É aí que o GPTCache ajuda: ele reduz o número de chamadas à API do LLM ao servir respostas já geradas para consultas semelhantes. Como resultado, você diminui custos com chamadas desnecessárias.

Tempo de resposta e eficiência melhores

Buscar uma resposta no cache é muito mais rápido do que gerá-la do zero consultando o LLM. Isso acelera a execução e melhora o tempo de resposta. Respostas mais eficientes aliviam a carga do próprio LLM e liberam recursos para outras tarefas.

Experiência do usuário aprimorada com desempenho mais rápido

Imagine que você está pesquisando perguntas para seu conteúdo. Cada pergunta leva uma eternidade para a IA responder. Por quê? Porque muitos serviços de LLM impõem limites de requisições em períodos definidos. Ao exceder esses limites, novas solicitações ficam bloqueadas até a redefinição, causando interrupções.

GPT reached its response generating limit

O ChatGPT pode atingir o limite de geração de respostas

Para evitar esses problemas, o GPTCache guarda respostas anteriores para perguntas semelhantes. Quando você pede algo, ele rapidamente consulta a memória e entrega a informação em instantes. Assim, você recebe a resposta muito mais rápido que o normal.

Em resumo, ao aproveitar respostas em cache, o GPTCache torna aplicações baseadas em LLM mais responsivas e eficientes — como você espera de qualquer ferramenta moderna.

Configurando o GPTCache

Veja como instalar o GPTCache diretamente:

Instalação e configuração

Instale o pacote GPTCache com este comando.

! pip install -q gptcache

Depois, importe o GPTCache para sua aplicação.

from gptcache import GPTCache
cache = GPTCache()  
# mantenha o modo padrão 

Pronto, é só isso!

Integração com LLMs

Você pode integrar o GPTCache aos LLMs por meio do LLM Adapter. Por enquanto, ele é compatível com apenas dois adapters de modelos de linguagem:

  • OpenAI
  • Langchain

Veja como integrar com ambos:

GPTCache com a API do ChatGPT (OpenAI)

Para integrar o GPTCache com a OpenAI, inicialize o cache e importe openai de gptcache.adapter.

from gptcache import cache
from gptcache.adapter import openai

cache.init()
cache.set_openai_key()

Antes de executar o exemplo, defina a variável de ambiente OPENAI_API_KEY executando echo $OPENAI_API_KEY.

Se ela ainda não estiver definida, você pode configurá-la com export OPENAI_API_KEY=YOUR_API_KEY em sistemas Unix/Linux/MacOS ou set OPENAI_API_KEY=YOUR_API_KEY no Windows.

Depois, se você fizer duas perguntas idênticas ao ChatGPT, a resposta da segunda será recuperada do cache em vez de consultar o ChatGPT novamente.

Aqui vai um exemplo de código para cache por similaridade:

import time


def response_text(openai_resp):
    return openai_resp['choices'][0]['message']['content']

print("Cache loading.....")

# To use GPTCache, that's all you need
# -------------------------------------------------
from gptcache import cache
from gptcache.adapter import openai

cache.init()
cache.set_openai_key()
# -------------------------------------------------

question = "what's github"
for _ in range(2):
    start_time = time.time()
    response = openai.ChatCompletion.create(
      model='gpt-3.5-turbo',
      messages=[
        {
            'role': 'user',
            'content': question
        }
      ],
    )
    print(f'Question: {question}')
    print("Time consuming: {:.2f}s".format(time.time() - start_time))
    print(f'Answer: {response_text(response)}\n')

Veja o que você verá na saída:

Na segunda vez, o GPT levou praticamente 0 segundo para responder a mesma pergunta

GPTCache com LangChain

Se quiser utilizar um LLM diferente, experimente o adapter do LangChain. Veja como integrar o GPTCache ao LangChain:

from langchain.globals import set_llm_cache
from langchain_openai import OpenAI

# To make the caching really obvious, lets use a slower model.
llm = OpenAI(model_name="gpt-3.5-turbo-instruct", n=2, best_of=2)

Aprenda a construir aplicações com LLM usando LangChain.

Usando o GPTCache nos seus projetos

Vamos ver como o GPTCache pode apoiar seus projetos.

Operações básicas

LLMs podem se tornar ineficientes por conta da complexidade e variabilidade inerentes às consultas, o que resulta em uma baixa taxa de acertos no cache.

Para contornar essa limitação, o GPTCache adota estratégias de cache semântico. O cache semântico armazena consultas semelhantes ou relacionadas — aumentando a probabilidade de acertos e elevando a eficiência geral do cache.

O GPTCache usa algoritmos de embedding para converter consultas em representações numéricas chamadas embeddings. Esses embeddings são armazenados em um repositório vetorial, permitindo buscas por similaridade eficientes. Esse processo possibilita identificar e recuperar consultas semelhantes ou relacionadas do armazenamento em cache.

Com um design modular, você pode personalizar a implementação de cache semântico conforme suas necessidades.

No entanto — às vezes ocorrem falsos acertos e perdas (misses) no cache semântico. Para monitorar o desempenho, o GPTCache oferece três métricas:

  • Taxa de acerto (hit ratio) mede o sucesso do cache em atender requisições. Quanto maior, melhor.
  • Latência indica o tempo para recuperar dados do cache — quanto menor, melhor.
  • Revocação (recall) mostra a proporção de consultas corretamente atendidas pelo cache. Percentuais maiores indicam melhor precisão.

Recursos avançados

Todos os dados básicos, como consultas iniciais, prompts, respostas e carimbos de data/hora de acesso, são armazenados em um "gerenciador de dados". O GPTCache atualmente oferece suporte às seguintes opções de armazenamento de cache:

  • SQLite
  • MySQL
  • Bancos PostgreSQL.

Ainda não há suporte a bancos ‘NoSQL’, mas ele está nos planos para ser incorporado em breve.

Usando políticas de remoção (eviction)

O GPTCache pode remover dados do armazenamento de cache com base em um limite ou contagem definidos. Para gerenciar o tamanho do cache, você pode aplicar a política LRU (Least Recently Used) ou FIFO (First In, First Out).

  • LRU remove os itens acessados há mais tempo.
  • Já a política FIFO descarta os itens em cache que estão lá há mais tempo.

Avaliando o desempenho das respostas

O GPTCache usa uma função de ‘avaliação’ para verificar se uma resposta em cache atende à consulta do usuário. Para isso, ela considera três entradas:

  • a solicitação do usuário
  • os dados em cache que estão sendo avaliados
  • parâmetros definidos pelo usuário (se houver)

Você também pode usar duas outras funções:

  • log_time_func permite registrar e informar a duração de tarefas intensivas, como gerar embeddings ou executar buscas no cache. Isso ajuda a monitorar características de desempenho.
  • Com similarity_threshold, você define o limite a partir do qual dois vetores de embedding (representações textuais de alta dimensão) são considerados suficientemente semelhantes para corresponder.

Boas práticas e solução de problemas no GPTCache

Agora que você já sabe como o GPTCache funciona, veja algumas boas práticas e dicas para aproveitar ao máximo.

Otimizando o desempenho do GPTCache

Há várias ações que você pode adotar para otimizar o desempenho do GPTCache, como as listadas abaixo.

1. Deixe seus prompts claros

A forma como você escreve seus prompts impacta diretamente o desempenho do GPTCache. Mantenha a redação consistente para aumentar as chances de acerto no cache.

Por exemplo, use sempre formulações consistentes como "Não consigo fazer login na minha conta". Assim, o GPTCache reconhece com mais facilidade problemas semelhantes, como "Esqueci minha senha" ou "Problemas para acessar a conta".

2. Use as métricas nativas de acompanhamento

Monitore métricas como taxa de acerto, recall e latência para analisar o desempenho do cache. Uma taxa de acerto mais alta indica que o cache está servindo melhor o conteúdo solicitado a partir dos dados armazenados — ajudando você a entender sua efetividade.

3. Escalando o GPTCache para aplicações de LLM com grande base de usuários

Para escalar o GPTCache em aplicações maiores, implemente um cache compartilhado que utilize o mesmo cache para grupos de usuários com perfis semelhantes. Crie perfis de usuário e classifique-os para identificar grupos similares.

Aproveitar um cache compartilhado para usuários do mesmo grupo de perfil traz ótimos resultados em eficiência e escalabilidade.

Isso porque usuários de um mesmo grupo tendem a ter consultas relacionadas que se beneficiam de respostas em cache. Porém, é essencial aplicar técnicas adequadas de criação de perfis e classificação para agrupar usuários corretamente e extrair o máximo do cache compartilhado.

Solucionando problemas comuns no GPTCache

Se você estiver enfrentando dificuldades com o GPTCache, há algumas ações que podem ajudar a diagnosticar e resolver os problemas.

1. Invalidação do cache

O GPTCache depende de respostas atualizadas. Se as respostas do LLM ou a intenção do usuário mudarem com o tempo, as respostas em cache podem ficar imprecisas ou irrelevantes.

Para evitar isso, defina tempos de expiração para as entradas em cache com base na frequência esperada de atualização do LLM e faça a atualização periódica do cache.

2. Dependência excessiva do cache

Embora o GPTCache aumente a eficiência, depender demais do cache pode levar a informações desatualizadas se a invalidação não for feita corretamente.

Por isso, garanta que sua aplicação ocasionalmente busque respostas novas do LLM, mesmo para consultas semelhantes. Isso mantém a precisão e a qualidade das respostas em cenários críticos ou sensíveis ao tempo.

3. Ignorar a qualidade do cache

A qualidade e a relevância das respostas em cache impactam a experiência do usuário. Use métricas de avaliação para verificar a qualidade das respostas antes de entregá-las aos usuários.

Ao entender esses possíveis problemas e suas soluções, você garante que o GPTCache aumente o desempenho e a relação custo-benefício das suas aplicações com LLM — sem comprometer a precisão ou a experiência do usuário.

Fechamento

O GPTCache é uma ferramenta poderosa para otimizar o desempenho e reduzir custos em aplicações com LLM. Configuração adequada, monitoramento e estratégias de avaliação do cache são essenciais para garantir respostas precisas e relevantes.

Se você está começando com LLMs, estes recursos podem ajudar:

FAQs

Como inicializar o cache para executar o GPTCache e importar a API da OpenAI?

Para inicializar o cache e importar a API da OpenAI, importe openai de gptcache.adapter. Isso configura automaticamente o gerenciador de dados para corresponder ao cache exato. Veja como fazer:

from gptcache.adapter import openai
O que acontece se você fizer a mesma pergunta duas vezes ao ChatGPT?

O GPTCache armazena as respostas anteriores no cache e recupera a resposta do cache em vez de fazer uma nova requisição à API. Assim, a resposta para a segunda pergunta será obtida do cache, sem consultar o ChatGPT novamente.

Laiba Siddiqui

Autor

Laiba Siddiqui

Sou um estrategista de conteúdo que adora simplificar tópicos complexos. Ajudei empresas como Splunk, Hackernoon e Tiiny Host a criar conteúdo envolvente e informativo para seus públicos.

Temas

Relacionado

An avian AI exits its cage

blog

12 Alternativas de código aberto ao GPT-4

blog

Os 10 melhores GPTs personalizados na GPT Store

Tutorial

Como fazer o ajuste fino do GPT 3.5: Liberando todo o potencial da IA