Come aggiungere memoria sia a un agente che ai suoi strumenti in LangChain?

Come Aggiungere Memoria Sia A Un Agente Che Ai Suoi Strumenti In Langchain



LangChain fornisce tutti gli strumenti necessari per creare agenti per controllare il processo di estrazione delle informazioni per l'utente. Questi strumenti sono necessari per creare l'agente poiché gestiscono le attività utilizzando strumenti diversi. Gli agenti manipolano anche questi strumenti per eseguire i passaggi e implementare tutte le attività. Sa quale strumento è necessario per il lavoro e quando assegnarlo a quel compito specifico.

Contorno rapido

Questo post dimostrerà quanto segue:

Come aggiungere memoria sia a un agente che ai suoi strumenti in LangChain?

L'aggiunta di memoria agli agenti e agli strumenti consente loro di lavorare meglio con la possibilità di utilizzare la cronologia chat del modello. Con la memoria, l'agente può decidere in modo efficiente quale strumento implementare e quando. È preferibile utilizzare il “ Memoria di sola lettura ' sia per gli agenti che per gli strumenti, quindi non saranno in grado di modificarlo. Per apprendere il processo di aggiunta di memoria sia agli agenti che agli strumenti in LangChain, seguire i passaggi elencati:







Passaggio 1: installazione dei framework

Prima di tutto, installa il file langchain-sperimentale modulo per ottenere le sue dipendenze per la creazione di modelli linguistici e strumenti per l'agente. LangChain sperimentale è il modulo che ottiene le dipendenze per la costruzione di modelli utilizzati principalmente per esperimenti e test:



pip installa langchain - sperimentale



Ottenere il risultati-ricerca-google moduli con le dipendenze OpenAI per ottenere le risposte più rilevanti da Internet:





pip installa openai google - ricerca - risultati

Passaggio 2: configurazione degli ambienti

Per costruire il modello che ottiene risposte da Internet, è necessario configurare gli ambienti utilizzando il file OpenAI E SerpAPi chiavi:



importare Voi
importare getpass

Voi. circa [ 'OPENAI_API_KEY' ] = getpass. getpass ( 'Chiave API OpenAI:' )
Voi. circa [ 'SERPAPI_API_KEY' ] = getpass. getpass ( 'Chiave API Serpapi:' )

Passaggio 3: importazione delle librerie

Dopo aver configurato gli ambienti, importa le librerie per creare gli strumenti per l'agente e la memoria aggiuntiva da integrare con essi. Il codice seguente utilizza agenti, memoria, llms, catene, prompt e utilità per ottenere le librerie richieste:

da langchain. agenti importare ZeroShotAgent , Attrezzo , AgentExecutor
da langchain. memoria importare Memoria buffer di conversazione , Memoria condivisa di sola lettura
da langchain. llms importare OpenAI
#prendi la biblioteca per costruire la catena utilizzando LangChain
da langchain. Catene importare LLMChain
da langchain. richiede importare Modello Prompt
#prendi la biblioteca per ottenere informazioni da Internet
da langchain. utilità importare SerpAPIWrapper

Passaggio 4: aggiunta di ReadOnlyMemory

Configura il modello affinché l'agente possa iniziare a eseguire le attività non appena l'utente fornisce l'input. Successivamente, aggiungi il “Memoria buffer conversazione()” per memorizzare la cronologia chat del modello e inizializzare il file “Memoria di sola lettura” per gli agenti e i suoi strumenti:

modello = '' 'Questa è una conversazione tra un essere umano e un bot:

{chat_history}
#imposta la struttura per estrarre il riepilogo preciso e semplice
Riassumi la chat per {input}:
'
''

richiesta = Modello Prompt ( input_variabili = [ 'ingresso' , 'cronologia_chat' ] , modello = modello )
memoria = Memoria buffer di conversazione ( chiave_memoria = 'cronologia_chat' )
readonlymemory = Memoria condivisa di sola lettura ( memoria = memoria )
#catena riassuntiva per integrare tutti i componenti per ottenere il riassunto della conversazione
summary_chain = LLMChain (
llm = OpenAI ( ) ,
richiesta = richiesta ,
prolisso = VERO ,
memoria = readonlymemory ,
)

Passaggio 5: configurazione degli strumenti

Ora imposta strumenti come ricerca e riepilogo per ottenere la risposta da Internet insieme al riepilogo della chat:

ricerca = SerpAPIWrapper ( )
utensili = [
Attrezzo (
nome = 'Ricerca' ,
funz = ricerca. correre ,
descrizione = 'risposte adeguate alle domande mirate sugli eventi recenti' ,
) ,
Attrezzo (
nome = 'Riepilogo' ,
funz = summary_chain. correre ,
descrizione = 'utile per riassumere la chat e l'input a questo strumento dovrebbe essere una stringa, che rappresenta chi leggerà questo riepilogo' ,
) ,
]

Passaggio 6: creazione dell'agente

Configura l'agente non appena gli strumenti sono pronti per eseguire le attività richieste ed estrarre le risposte da Internet. IL ' prefisso ' viene eseguita prima che gli agenti assegnino qualsiasi attività agli strumenti e la variabile ' suffisso ' viene eseguito dopo che gli strumenti hanno estratto la risposta:

prefisso = '' 'Conversa con un essere umano, rispondendo al meglio che puoi alle seguenti domande accedendo ai seguenti strumenti:' ''
suffisso = '' 'Inizio!'
#struttura per l'agente per iniziare a utilizzare gli strumenti durante l'utilizzo della memoria
{ chat_history }
Domanda : { ingresso }
{ agente_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure modelli di prompt per comprendere il contesto della domanda
utensili,
prefisso=prefisso,
suffisso=suffisso,
variabili_input=['
ingresso ', ' chat_history ', ' agente_scratchpad '],
)

Metodo 1: utilizzo di ReadOnlyMemory

Una volta impostato l'agente per eseguire gli strumenti, il modello con ReadOnlyMemory è il preferito modo per costruire ed eseguire le catene per recuperare le risposte e il processo è il seguente:

Passaggio 1: costruire la catena

Il primo passo in questo metodo è costruire la catena e l'esecutore per il file “ZeroShotAgent()” con le sue argomentazioni. IL “LLMChain()” viene utilizzato per creare la connessione tra tutte le chat nel modello linguistico utilizzando gli argomenti llm e prompt. L'agente utilizza llm_chain, tools e verbose come argomento e crea agent_chain per eseguire sia gli agenti che i relativi strumenti con la memoria:

llm_chain = LLMChain ( llm = OpenAI ( temperatura = 0 ) , richiesta = richiesta )
agente = ZeroShotAgent ( llm_chain = llm_chain , utensili = utensili , prolisso = VERO )
catena_agente = AgentExecutor. from_agent_and_tools (
agente = agente , utensili = utensili , prolisso = VERO , memoria = memoria
)

Passaggio 2: testare la catena

Chiama il catena_agente utilizzando il metodo run() per porre la domanda da Internet:

catena_agente. correre ( ingresso = 'Cos'è LangChain' )

L'agente ha estratto la risposta da Internet utilizzando gli strumenti di ricerca:

L'utente può porre la domanda di follow-up poco chiara per testare la memoria collegata all'agente:

catena_agente. correre ( ingresso = 'Chi lo ha sviluppato?' )

L'agente ha utilizzato la chat precedente per comprendere il contesto delle domande e ha recuperato le risposte come mostrato nello screenshot seguente:

L’agente utilizza lo strumento (summary_chain) per estrarre un riepilogo di tutte le risposte estratte in precedenza utilizzando la memoria dell’agente:

catena_agente. correre (
ingresso = 'Grazie! Riassumi la conversazione, per il mio bambino di 5 anni'
)

Produzione
Il riepilogo delle domande poste in precedenza è stato visualizzato per un bambino di 5 anni nella seguente schermata:

Passaggio 3: testare la memoria

Stampa la memoria buffer per estrarre le chat in essa memorizzate utilizzando il seguente codice:

stampa ( catena_agente. memoria . respingente )

Le chat nell'ordine corretto senza alcuna modifica sono state visualizzate nel seguente snippet:

Metodo 2: utilizzo della stessa memoria sia per l'agente che per gli strumenti

Il secondo metodo non consigliato dalla piattaforma è l'utilizzo della memoria buffer sia per gli agenti che per gli strumenti. Gli strumenti possono modificare le chat archiviate in memoria che potrebbero restituire risultati falsi in conversazioni di grandi dimensioni:

Passaggio 1: costruire la catena

Utilizzando il codice completo del modello per creare gli strumenti e le catene per gli agenti con una piccola modifica poiché questa volta ReadOnlyMemory non viene aggiunta:

modello = '' 'Questa è una conversazione tra un essere umano e un bot:

{chat_history}

Scrivi un riassunto della conversazione per {input}:
'
''
#costruisci la struttura della chat interfaccia utilizzando il modello di prompt aggiungendo la memoria con la catena
richiesta = Modello Prompt ( input_variabili = [ 'ingresso' , 'cronologia_chat' ] , modello = modello )
memoria = Memoria buffer di conversazione ( chiave_memoria = 'cronologia_chat' )
summary_chain = LLMChain (
llm = OpenAI ( ) ,
richiesta = richiesta ,
prolisso = VERO ,
memoria = memoria ,
)
#costruisci gli strumenti ( ricerca e riepilogo ) per configurazione degli agenti
ricerca = SerpAPIWrapper ( )
utensili = [
Attrezzo (
nome = 'Ricerca' ,
funz = ricerca. correre ,
descrizione = 'risposte adeguate alle domande mirate sugli eventi recenti' ,
) ,
Attrezzo (
nome = 'Riepilogo' ,
funz = summary_chain. correre ,
descrizione = 'utile per ottenere il riepilogo della chat e serve la stringa inserita in questo strumento che rappresenta chi leggerà questo riepilogo' ,
) ,
]
#spiegare i passaggi per l'agente di utilizzare gli strumenti per estrarre informazioni per la chiacchierata
prefisso = '' 'Conversa con un essere umano, rispondendo alle domande nel miglior modo possibile accedendo ai seguenti strumenti:' ''
suffisso = '' 'Inizio!'
#struttura per l'agente per iniziare a utilizzare gli strumenti durante l'utilizzo della memoria
{ chat_history }
Domanda : { ingresso }
{ agente_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure modelli di prompt per comprendere il contesto della domanda
utensili,
prefisso=prefisso,
suffisso=suffisso,
variabili_input=['
ingresso ', ' chat_history ', ' agente_scratchpad '],
)
#integra tutti i componenti durante la creazione dell'esecutore dell'agente
llm_chain = LLMChain(llm=OpenAI(temperatura=0), prompt=prompt)
agente = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
catena_agente = AgentExecutor.from_agent_and_tools(
agente=agente, strumenti=strumenti, verbose=True, memoria=memoria
)

Passaggio 2: testare la catena

Esegui il seguente codice:

catena_agente. correre ( ingresso = 'Cos'è LangChain' )

La risposta viene visualizzata e archiviata con successo nella memoria:

Fai la domanda successiva senza fornire gran parte del contesto:

catena_agente. correre ( ingresso = 'Chi lo ha sviluppato?' )

L'agente utilizza la memoria per comprendere la domanda trasformandola e poi stampa la risposta:

Ottieni il riepilogo della chat utilizzando la memoria collegata all'agente:

catena_agente. correre (
ingresso = 'Grazie! Riassumi la conversazione, per il mio bambino di 5 anni'
)

Produzione
Il riepilogo è stato estratto con successo e fino ad ora tutto sembra essere uguale ma il cambiamento arriva nel passaggio successivo:

Passaggio 3: testare la memoria

Estraendo i messaggi di chat dalla memoria utilizzando il seguente codice:

stampa ( catena_agente. memoria . respingente )

Lo strumento ha modificato la cronologia aggiungendo un'altra domanda che non era stata posta originariamente. Ciò accade quando il modello comprende la domanda utilizzando a chiedersi da soli domanda. Lo strumento pensa erroneamente che venga richiesto dall'utente e lo tratta come una query separata. Quindi aggiunge alla memoria anche quella domanda aggiuntiva che può poi essere utilizzata per ottenere il contesto della conversazione:

È tutto per ora.

Conclusione

Per aggiungere memoria sia a un agente che ai suoi strumenti in LangChain, installa i moduli per ottenere le relative dipendenze e importare le librerie da essi. Successivamente, crea la memoria della conversazione, il modello linguistico, gli strumenti e l'agente per aggiungere la memoria. IL metodo consigliato per aggiungere memoria è necessario utilizzare ReadOnlyMemory per l'agente e i suoi strumenti per archiviare la cronologia della chat. L'utente può anche utilizzare il file memoria conversazionale sia per gli agenti che per gli strumenti. Ma ottengono confuso a volte e cambiare le chat in memoria.