Habr AI→ original

Habr AI mostra como adicionar memória e contexto a um chat LLM em Python com Ollama e LiteLLM

Na terceira parte da série sobre chat LLM em Python, o autor adicionou o essencial para transformar um diálogo em mais que requisições isoladas—o histórico…

Processado por IA de Habr AI; editado por Hamidun News
Habr AI mostra como adicionar memória e contexto a um chat LLM em Python com Ollama e LiteLLM
Fonte: Habr AI. Colagem: Hamidun News.
◐ Ouvir artigo

Um simples chat de console com um LLM deixa de ser um verdadeiro chat se o modelo vê apenas a pergunta atual. Em uma nova parte do guia prático de Python usando Ollama e LiteLLM, o autor mostra o passo mais importante após a integração básica: como adicionar histórico de mensagens e transformar uma sequência de requisições separadas em um diálogo coerente com contexto. O problema da versão anterior era que a cada turno, o programa enviava ao modelo apenas a instrução do sistema e uma resposta do usuário nova.

Para um humano, isso parece uma limitação quase imperceptível até que surgem perguntas dependentes como "torne mais curto" ou "adicione prática a isso". Sem mensagens anteriores, o modelo não sabe a quais pronomes e esclarecimentos se referem, e portanto pode responder aleatoriamente ou perder o fio da conversa. Exatamente isso é o que distingue uma chamada modelo única de uma interface de diálogo.

A análise enfatiza uma ideia importante que é frequentemente simplificada nas discussões sobre LLM: o modelo não possui memória oculta de longo prazo entre chamadas. A memória em tal chat não é criada pelo Ollama ou pelo LiteLLM em si, mas pela aplicação que armazena a conversa e a envia ao modelo novamente a cada nova requisição. No exemplo educacional, usa-se uma simples lista Python conversation_history para isso, onde mensagens com funções user e assistant são gravadas em sequência.

O prompt do sistema não é armazenado no histórico, mas adicionado separadamente cada vez que a requisição é montada. Arquiteturalmente, a mudança parece pequena, mas muda radicalmente o comportamento do programa. A função de envio de requisição agora recebe não apenas o user_message atual, mas também o histórico.

Depois forma-se uma lista de messages em ordem rigorosa: system, depois todas as respostas anteriores, depois a nova pergunta do usuário. Após a resposta do modelo, a aplicação salva ambos os lados da troca — tanto a pergunta quanto a resposta. Não é um detalhe decorativo: se você registrar apenas as respostas do usuário, a próxima requisição será incompleta porque o modelo verá que a pergunta já foi feita, mas não verá como respondeu a ela mesma.

Separadamente, a limitação do histórico também é discutida. No exemplo, uma constante MAX_HISTORY_MESSAGES = 6 é introduzida, e uma função auxiliar trim_history mantém apenas as últimas seis mensagens, ou seja, as últimas três trocas de mensagens. Para um protótipo local, este é um compromisso prático: o histórico não cresce infinitamente, as requisições não incham, e o modelo ainda obtém o contexto mais próximo.

Esta é uma boa forma de mostrar que a memória em aplicações LLM sempre precisa equilibrar entre qualidade de resposta, latência e custo ou carga, mesmo quando se trata de um modelo local. O artigo usa uma configuração local baseada em Ollama, LiteLLM e modelo qwen2.5:3b.

Esta stack é conveniente para aprendizado porque permite construir um chat funcionando sem API externa e sem infraestrutura complexa. Nos exemplos, é bem claro como a reação do sistema muda após adicionar histórico: a requisição "conte-me mais sobre o segundo" agora se refere corretamente à lista anterior, e a frase "torne mais curto" não é mais percebida como um comando abstrato separado. Ou seja, o modelo não fica mais inteligente por si só, mas a aplicação lhe dá o contexto que antes simplesmente se perdia.

Ao mesmo tempo, as limitações desta versão também são nomeadas diretamente. Todo o histórico é armazenado apenas na RAM da execução atual: se você fechar o script, o diálogo desaparece. Para um CLI educacional, isso é suficiente, mas para um bot do Telegram, serviço web ou assistente de cliente, seria necessário armazenamento permanente — pelo menos em um arquivo, SQLite ou banco de dados completo.

Os próximos passos geralmente incluem também sumarização de diálogos longos, filtragem de respostas irrelevantes e gerenciamento mais flexível da janela de contexto. A conclusão principal desta parte é muito pragmática e portanto útil: a memória em um chat LLM não é uma função mágica separada do modelo, mas a responsabilidade comum do código ao redor dele. Apenas algumas linhas com conversation_history, a ordem correta de messages e um simples limite de tamanho do histórico já transformam o script de demonstração na base para um assistente mais realista.

Para desenvolvedores, este é um bom exemplo de como o valor de uma interface de chat frequentemente nasce não na escolha do modelo em si, mas em como cuidadosamente a aplicação coleta e passa o contexto da conversa.

ZK
Hamidun News
Notícias de AI sem ruído. Seleção editorial diária de mais de 400 fontes. Produto de Zhemal Khamidun, Head of AI na Alpina Digital.

Quer parar de ler sobre IA e começar a usar?

AI News é um feed curado de notícias de IA. A Hamidun Academy ensina você a usar IA no trabalho.

O que você acha?
Carregando comentários…