Sistema de Memória para Redução de Tokens em Chatbots

Davi MonteiroDavi Monteiro
5 min read

Introdução

No desenvolvimento de chatbots, um dos principais desafios é equilibrar a qualidade das respostas com a eficiência no uso de recursos computacionais. Modelos de linguagem como os da OpenAI, Claude, DeepSeek e LLaMA têm apresentado resultados impressionantes, mas o custo em tokens para manter longas conversas pode se tornar elevado.

Neste artigo, vou compartilhar uma abordagem prática que estou utilizando para reduzir o consumo de tokens na parte conversacional dos meus chatbots. Essa técnica se inspira no funcionamento da memória humana e tem se mostrado eficaz para manter a continuidade do diálogo sem perder informações relevantes.

Aviso Importante

Antes de mergulhar na explicação da técnica, quero deixar um aviso claro: NÃO UTILIZE ESSA TÉCNICA PARA RESUMIR DADOS IMPORTANTES OU SENSÍVEIS.

Se você está lidando com informações críticas, considere implementar mecanismos que armazenem esses dados em um banco de dados ou outra solução persistente. O objetivo desta abordagem é otimizar a contextualização da conversa, não substituir um sistema de armazenamento seguro.

Conceito Aplicado

A ideia central é modelar a memória do chatbot com base em como a memória humana funciona. No cérebro humano, temos diferentes níveis de retenção de informações, o que nos permite priorizar detalhes recentes e resumir ou esquecer gradualmente eventos mais antigos.

Para implementar isso em um chatbot, sigo três etapas principais:

  1. Memória Imediata:

    • Inclui as mensagens mais recentes da conversa.

    • Mantém o fluxo contínuo e garante que o modelo compreenda o contexto atual.

  2. Memórias Passadas Recentes:

    • Gera resumos das interações anteriores que já não fazem parte do fluxo imediato.

    • Esses resumos condensam os principais pontos discutidos sem sobrecarregar o modelo.

  3. Memórias Passadas Resumidas:

    • Para conversas mais antigas, apenas indicadores ou marcos importantes são mantidos.

    • Esse processo reduz drasticamente o volume de texto necessário para contextualizar o modelo.

Como Funciona na Prática

  1. Durante a interação, o chatbot armazena as últimas mensagens em uma área de "memória imediata".

  2. Quando o volume de mensagens ultrapassa um limite predefinido, as mensagens mais antigas são condensadas em um resumo e movidas para a seção de "memórias passadas recentes".

  3. Ao longo do tempo, esses resumos também são simplificados em marcadores-chave que compõem a "memória passada resumida".

Esse processo garante que o chatbot mantenha o contexto das conversas de forma eficiente, sem exigir o armazenamento completo de todo o histórico. Além disso, a abordagem reduz o custo computacional, já que menos tokens são enviados em cada requisição.

A implantação vai depender muito da tecnologia sendo utilizada, então deixo para os programadores fazerem como acharem melhor. O que eu quero mostrar aqui é o passo a passo de forma abstrata.

Passo a Passo

Memória Imediata

Essa parte praticamente não muda, continua sendo o chat tradicional, enviando o contexto tal qual está escrito. Dependendo do tamanho do contexto, eu mantenho a memória imediata para as últimas 10 a 30 mensagens. Mais que 30 e nem o usuário lembra os detalhes do que foi dito.

Uma variação inicial (com cerca de 5% de economia de tokens, já que gera um output adicional) que pode causar um impacto positivo, especialmente se as respostas forem longas, é ter um prompt que gera uma segunda versão alternativa que:

  • Não possui novas linhas.

  • Remove "low key tokens".

  • Elimina informações repetidas e substitui palavras por sinônimos menores.

  • Remove caracteres desnecessários.

Como essa versão alternativa necessita apenas da versão original, costuma ser uma implementação barata em termos de consumo de tokens.

Memórias Passadas Recentes

Aqui começa a economia significativa (20% - 30%), mas, dependendo da sua necessidade, você pode pular essa etapa completamente.

Após uma quantidade de mensagens trocadas, não faz sentido enviar todo o conteúdo no contexto. A estrutura, o tom e o fluxo serão mantidos pelas memórias imediatas. Para implementar essa etapa:

  • Crie um prompt semelhante ao da memória imediata, mas com a instrução de transformar tanto a saída do usuário quanto do assistente. Utilize instruções como: "Crie uma versão reduzida que mantenha a intenção da mensagem sem utilizar hipérboles, emojis, repetições ou sentimentos. Informe apenas os dados necessários para contextualização do que foi falado de forma sucinta".

  • Instrua o chatbot a manter pontos-chave da conversa que definam o contexto e permitam à IA continuar o diálogo.

  • Ao enviar o pedido de resumo, utilize um valor máximo de tokens reduzido (mas não menor que 60% do original), pois valores muito baixos afetam a qualidade do resumo.

  • Se o seu bot é um chat conversacional que utiliza ** e () para ações e pensamentos, adicione a instrução para reduzir essas indicações a uma palavra ou, no máximo, três palavras, removendo variáveis que possam ser inferidas do contexto (como status ou local).

Memórias Passadas Resumidas

Memórias mais antigas não precisam conter todos os detalhes da conversa. Elas podem ser listadas como itens e fornecer apenas as informações essenciais. Pense nas suas próprias memórias: qual foi a conversa mais importante do mês passado? Você se lembra de cada palavra dita ou apenas dos pontos principais?

Com isso em mente, você pode construir um prompt adequado para sua aplicação. Por exemplo, um resumo simplificado pode ser algo assim:

Usuário: Quais pizzas?

Bot: Queijo, peperoni, carne e marguerita. Mais detalhes? Iniciar compra?

Usuário: Compra, carne, grande. Valor?

Bot: 99 mais 10 de entrega. OK?

Usuário: OK.

Ou até mesmo um registro mais conciso:

Resumo da interação em 01/01/99: Usuário entrou em contato para saber quais pizzas estavam disponíveis. Após explicação, comprou uma pizza de carne grande por 99 mais 10 pela entrega.

Esse tipo de memória para longo prazo mantém o contexto e as informações essenciais para que o chatbot continue compreendendo as solicitações do usuário de forma clara e objetiva.

Conclusão

A abordagem de modelar a memória do chatbot com base no funcionamento da memória humana oferece uma forma prática e eficiente de reduzir o consumo de tokens sem comprometer a qualidade das respostas. Ao dividir as informações em memória imediata, memórias passadas recentes e memórias passadas resumidas, conseguimos equilibrar o custo computacional com a necessidade de manter o contexto conversacional.

Vale destacar que essa estratégia é baseada na minha experiência prática em projetos reais, e os resultados podem variar dependendo da aplicação e do modelo utilizado. Adapte as etapas conforme suas necessidades e sempre valide se a qualidade do chatbot está sendo mantida.

Essa técnica não é uma solução universal, mas pode ser um ótimo ponto de partida para quem busca otimizar chatbots em ambientes com restrição de tokens ou de custo computacional.

0
Subscribe to my newsletter

Read articles from Davi Monteiro directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Davi Monteiro
Davi Monteiro