LangChain Migliorare le prestazioni con la capacità di memoria

LangChain Improve performance with memory capacity.

Foto di Milad Fakurian su Unsplash

Il boost di LangChain attraverso le tecniche di espansione della memoria

Ho già pubblicato articoli su LangChain in precedenza, presentando la libreria e tutte le sue capacità. Ora vorrei concentrarmi su un aspetto fondamentale, ovvero come gestire la memoria nei chatbot intelligenti.

I chatbot o agenti hanno bisogno anche di un meccanismo di archiviazione delle informazioni, che possono assumere forme diverse e svolgere funzioni diverse. Implementare un sistema di memoria nei chatbot non solo li aiuta a diventare più intelligenti, ma anche più naturali e utili per gli utenti.

Felizmente, LangChain fornisce API che rendono facile per gli sviluppatori implementare la memoria nelle loro applicazioni. In questo articolo, esploreremo questo aspetto in modo più dettagliato.

Usare la memoria in LangChain

Una best practice quando si sviluppano chatbot è quella di salvare tutte le interazioni che il chatbot ha con l’utente. Questo perché lo stato dell’LLM può cambiare a seconda della conversazione passata, infatti, l’LLM alla stessa domanda da 2 utenti risponderà anche in modo diverso perché hanno una conversazione passata diversa con il chatbot e quindi si trova in uno stato diverso.

Quindi ciò che la memoria del chatbot crea non è altro che una lista di vecchi messaggi, che vengono restituiti ad esso prima di una nuova domanda. Naturalmente, gli LLM hanno un contesto limitato, quindi bisogna essere un po’ creativi e scegliere come restituire questa storia all’LLM. I metodi più comuni sono restituire un riassunto dei vecchi messaggi o restituire solo gli N messaggi più recenti che sono probabilmente i più informativi.

Iniziare con le basi con ChatMessageHistory

Questa è la classe principale che ci consente di gestire i messaggi che si verificano tra il chatbot (AI) e l’utente (umano). Questa classe fornisce due metodi principali che sono i seguenti.

  • add_user_message: ci consente di aggiungere un messaggio alla memoria del chatbot e di etichettare il messaggio come “utente”
  • add_ai_message: ci consente di aggiungere un messaggio alla memoria del chatbot e di etichettare il messaggio come “AI”
!pip install langchainfrom langchain.memory import ChatMessageHistoryhistory = ChatMessageHistory()history.add_user_message("Ciao!")history.add_ai_message("Ehi, come posso aiutarti oggi?")#print messageshistory.messages

Questa classe consente di fare varie cose, ma nel suo uso più semplice, puoi guardarla come il salvataggio di vari messaggi in una lista di tanto in tanto. Poi puoi anche rivedere tutti i messaggi che hai aggiunto semplicemente iterando sulla storia nel modo seguente.

for message in history.messages:    print(message.content)

Memoria avanzata con ConversationBufferMemory

La classe ConversationBufferMemory si comporta in modo simile alla classe ChatMessageHistory per quanto riguarda la memorizzazione dei messaggi, ma fornisce metodi intelligenti per recuperare vecchi messaggi. Ad esempio, possiamo recuperare vecchi messaggi come lista di messaggi o come una sola grande stringa a seconda di ciò di cui abbiamo bisogno. Se vogliamo chiedere all’LLM di fare un riassunto della conversazione passata potrebbe essere utile avere la conversazione passata come una sola grande stringa. Se vogliamo invece fare un’analisi dettagliata del passato, possiamo leggere un messaggio alla volta estrarre una lista.

Anche con la classe ConversationBufferMemory, possiamo aggiungere messaggi alla memoria utilizzando i metodi add_user_message e add_user_message. Il metodo load_memory_variables, d’altra parte, viene utilizzato per estrarre vecchi messaggi sotto forma di lista o dizionario a seconda di quanto specificato, vediamo un esempio.

from langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory()memory.chat_memory.add_user_message("Ciao, come stai?")memory.chat_memory.add_ai_message("Ciao, sto bene! Come stai?")memory_variables = memory.load_memory_variables({})print(memory_variables['history'])

Gestire la memoria in conversazioni multiple

Abbiamo visto degli esempi di come gestire la memoria salvando e recuperando messaggi. Ma in un’applicazione del mondo reale probabilmente dovrai gestire la memoria di diverse conversazioni. LangChain ti consente di gestire anche questo caso con l’uso di ciò che vengono chiamati catene. Una catena non è altro che un flusso di vari passaggi semplici o complessi che ti consentono di raggiungere un determinato obiettivo.

Ad esempio, un LLM che cerca una informazione su Wikipedia perché non sa come rispondere a una certa domanda è una catena. Per gestire diverse conversazioni, è sufficiente associare a ogni catena un ConversazioneBufferMemory che viene creato con un’istanza della classe ConversationChain. In questo modo, quando viene chiamato il metodo di previsione del modello, vengono eseguiti tutti i passaggi della catena, così il modello leggerà i messaggi passati della conversazione. Vediamo un semplice esempio.

from langchain.llms import OpenAIfrom langchain.chains import ConversationChainfrom langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory()conversation = ConversationChain(llm= OpenAI(), memory=memory)conversation.predict(input="Hey! how are you?")

Considerazioni finali

In conclusione, la memoria è un componente critico di un chatbot, e LangChain fornisce diversi framework e strumenti per gestire la memoria in modo efficace. Attraverso l’uso di classi come ChatMessageHistory e ConversationBufferMemory, puoi catturare e memorizzare le interazioni dell’utente con l’AI, e utilizzare queste informazioni per guidare le future risposte dell’AI. Spero che queste informazioni ti aiutino a costruire chatbot più intelligenti e capaci!

Nel prossimo articolo, ti mostrerò come utilizzare gli strumenti di LangChain.

Se hai trovato utile questo articolo, seguimi qui su Nisoo! 😉

Fine

Marcello Politi

Linkedin, Twitter, Sito Web