Com afegir memòria tant a un agent com a les seves eines a LangChain?

Com Afegir Memoria Tant A Un Agent Com A Les Seves Eines A Langchain



LangChain proporciona totes les eines necessàries per construir els agents per controlar el procés d'extracció de la informació per a l'usuari. Aquestes eines són necessàries per construir l'agent, ja que gestionen les tasques mitjançant diferents eines. Els agents també manipulen aquestes eines per treballar els passos i implementar totes les activitats. Sap quina eina és necessària per a la feina i quan assignar-la a aquesta tasca específica.

Esquema ràpid

Aquesta publicació demostrarà el següent:

Com afegir memòria tant a un agent com a les seves eines a LangChain?

Afegir memòria als agents i eines els permet treballar millor amb la possibilitat d'utilitzar l'historial de xat del model. Amb la memòria, l'agent pot decidir de manera eficient quina eina desplegar i quan. És preferible utilitzar el ' ReadOnlyMemory ” tant per als agents com per a les eines perquè no el puguin modificar. Per conèixer el procés d'afegir memòria tant als agents com a les eines a LangChain, seguiu els passos indicats:







Pas 1: instal·lació de marcs

En primer lloc, instal·leu el langchain-experimental mòdul per obtenir les seves dependències per construir models de llenguatge i eines per a l'agent. LangChain experimental és el mòdul que obté les dependències per construir models que s'utilitzen principalment per a experiments i proves:



pip install langchain - experimental



Obtenir la resultats de la cerca de Google mòduls amb les dependències d'OpenAI per obtenir les respostes més rellevants d'Internet:





pip install openai google - cerca - resultats

Pas 2: Configuració d'entorns

Per construir el model que obté respostes d'Internet, cal configurar els entorns mitjançant el OpenAI i SerpAPi claus:



importar vostè
importar getpass

vostè. aproximadament [ 'OPENAI_API_KEY' ] = getpass. getpass ( 'Clau de l'API OpenAI:' )
vostè. aproximadament [ 'SERPAPI_API_KEY' ] = getpass. getpass ( 'Clau de l'API Serpapi:' )

Pas 3: importació de biblioteques

Després de configurar els entorns, importeu les biblioteques per crear les eines per a l'agent i la memòria addicional per integrar-hi. El codi següent utilitza els agents, la memòria, els llms, les cadenes, les indicacions i les utilitats per obtenir les biblioteques necessàries:

de langchain. agents importar ZeroShotAgent , Eina , AgentExecutor
de langchain. memòria importar ConversationBufferMemory , ReadOnlySharedMemory
de langchain. llms importar OpenAI
#aconsegueix la biblioteca per construir la cadena amb LangChain
de langchain. cadenes importar LLMChain
de langchain. indicacions importar PromptTemplate
#aconsegueix la biblioteca per obtenir la informació d'Internet
de langchain. utilitats importar SerpAPIWrapper

Pas 4: afegir ReadOnlyMemory

Configureu la plantilla perquè l'agent comenci a realitzar tasques tan bon punt l'usuari proporcioni l'entrada. Després d'això, afegiu el 'ConversationBufferMemory()' per emmagatzemar l'historial de xat del model i inicialitzar el 'ReadOnlyMemory' per als agents i les seves eines:

plantilla = '' 'Aquesta és una conversa entre un humà i un bot:

{chat_history}
#establir l'estructura per extreure el resum precís i fàcil
Resumeix el xat per a {input}:
'
''

prompte = PromptTemplate ( variables_entrada = [ 'entrada' , 'historial_xat' ] , plantilla = plantilla )
memòria = ConversationBufferMemory ( clau_memoria = 'historial_xat' )
lectura només memòria = ReadOnlySharedMemory ( memòria = memòria )
#cadena de resum per integrar tots els components per obtenint el resum de la conversa
cadena_resum = LLMChain (
llm = OpenAI ( ) ,
prompte = prompte ,
verbosa = És cert ,
memòria = lectura només memòria ,
)

Pas 5: Configuració d'eines

Ara, configureu eines com la cerca i el resum per obtenir la resposta d'Internet juntament amb el resum del xat:

cerca = SerpAPIWrapper ( )
eines = [
Eina (
nom = 'Cerca' ,
func = cerca. correr ,
descripció = 'respostes adequades a les consultes dirigides sobre els esdeveniments recents' ,
) ,
Eina (
nom = 'Resum' ,
func = cadena_resum. correr ,
descripció = 'És útil per resumir el xat i l'entrada a aquesta eina hauria de ser una cadena, que representi qui llegirà aquest resum' ,
) ,
]

Pas 6: Creació de l'agent

Configureu l'agent tan aviat com les eines estiguin a punt per realitzar les tasques necessàries i extreure les respostes d'Internet. El ' prefix La variable s'executa abans que els agents assignin qualsevol tasca a les eines i la variable “ sufix ” s'executa després que les eines hagin extret la resposta:

prefix = '' 'Converseu amb un humà, responent les preguntes següents de la millor manera possible accedint a les eines següents:' ''
sufix = '' 'Comença!'
#estructura per l'agent per començar a utilitzar les eines mentre utilitza la memòria
{ xat_historial }
Pregunta : { entrada }
{ agent_scratchpad } '' '

prompte = ZeroShotAgent.create_prompt(
#configure plantilles de sol·licitud per entendre el context de la pregunta
eines,
prefix=prefix,
sufix = sufix,
variables_entrada=['
entrada ', ' xat_historial ', ' agent_scratchpad '],
)

Mètode 1: utilitzant ReadOnlyMemory

Una vegada que l'agent està configurat per executar les eines, el model amb ReadOnlyMemory és el preferit manera de construir i executar les cadenes per obtenir respostes i el procés és el següent:

Pas 1: Construir la cadena

El primer pas d'aquest mètode és construir la cadena i l'executor per al 'ZeroShotAgent()' amb els seus arguments. El 'LLMCain()' s'utilitza per construir la connexió entre tots els xats del model d'idioma utilitzant els arguments llm i prompt. L'agent utilitza llm_chain, tools i verbose com a argument i crea agent_chain per executar tant els agents com les seves eines amb la memòria:

llm_cadena = LLMChain ( llm = OpenAI ( temperatura = 0 ) , prompte = prompte )
agent = ZeroShotAgent ( llm_cadena = llm_cadena , eines = eines , verbosa = És cert )
cadena_agent = AgentExecutor. des de_agent_i_eines (
agent = agent , eines = eines , verbosa = És cert , memòria = memòria
)

Pas 2: prova de la cadena

Truqueu al cadena_agent utilitzant el mètode run() per fer la pregunta des d'Internet:

cadena_agent. correr ( entrada = 'Què és LangChain' )

L'agent ha extret la resposta d'Internet mitjançant les eines de cerca:

L'usuari pot fer la pregunta de seguiment poc clara per provar la memòria connectada a l'agent:

cadena_agent. correr ( entrada = 'Qui el va desenvolupar?' )

L'agent ha utilitzat el xat anterior per entendre el context de les preguntes i ha obtingut les respostes tal com es mostra a la captura de pantalla següent:

L'agent utilitza l'eina (summary_chain) per extreure un resum de totes les respostes extretes anteriorment utilitzant la memòria de l'agent:

cadena_agent. correr (
entrada = 'Gràcies! Resumeix la conversa, per als meus 5 anys'
)

Sortida
El resum de les preguntes anteriors s'ha mostrat per a un nen de 5 anys a la següent captura de pantalla:

Pas 3: prova de la memòria

Imprimiu la memòria intermèdia per extreure els xats emmagatzemats en ella mitjançant el codi següent:

imprimir ( cadena_agent. memòria . tampó )

Els xats en el seu ordre correcte sense cap modificació s'han mostrat al fragment següent:

Mètode 2: Ús de la mateixa memòria tant per a l'agent com per a les eines

El segon mètode que la plataforma no recomana és utilitzar la memòria intermèdia tant per als agents com per a les eines. Les eines poden canviar els xats emmagatzemats a la memòria que poden retornar sortides falses en converses grans:

Pas 1: Construir la cadena

Utilitzar el codi complet de la plantilla per crear les eines i les cadenes per als agents amb un petit canvi ja que ReadOnlyMemory no s'afegeix aquesta vegada:

plantilla = '' 'Aquesta és una conversa entre un humà i un bot:

{chat_history}

Escriu un resum de la conversa per a {input}:
'
''
#construeix l'estructura del xat interfície utilitzant la plantilla de sol·licitud afegint la memòria amb la cadena
prompte = PromptTemplate ( variables_entrada = [ 'entrada' , 'historial_xat' ] , plantilla = plantilla )
memòria = ConversationBufferMemory ( clau_memoria = 'historial_xat' )
cadena_resum = LLMChain (
llm = OpenAI ( ) ,
prompte = prompte ,
verbosa = És cert ,
memòria = memòria ,
)
#construeix les eines ( cerca i resum ) per configuració dels agents
cerca = SerpAPIWrapper ( )
eines = [
Eina (
nom = 'Cerca' ,
func = cerca. correr ,
descripció = 'respostes adequades a les consultes dirigides sobre els esdeveniments recents' ,
) ,
Eina (
nom = 'Resum' ,
func = cadena_resum. correr ,
descripció = 'És útil per obtenir el resum del xat i necessitar l'entrada de cadena a aquesta eina que representa qui llegirà aquest resum' ,
) ,
]
#explica els passos per l'agent a utilitzar les eines per extreure informació per el xat
prefix = '' 'Converseu amb un humà, responent les consultes de la millor manera possible accedint a les següents eines:' ''
sufix = '' 'Comença!'
#estructura per l'agent per començar a utilitzar les eines mentre utilitza la memòria
{ xat_historial }
Pregunta : { entrada }
{ agent_scratchpad } '' '

prompte = ZeroShotAgent.create_prompt(
#configure plantilles de sol·licitud per entendre el context de la pregunta
eines,
prefix=prefix,
sufix = sufix,
variables_entrada=['
entrada ', ' xat_historial ', ' agent_scratchpad '],
)
#integrar tots els components mentre es construeix l'executor de l'agent
llm_chain = LLMChain (llm = OpenAI (temperatura = 0), prompt = prompt)
agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
cadena_agent = AgentExecutor.from_agent_and_tools(
agent=agent, eines=eines, verbose=true, memòria=memòria
)

Pas 2: prova de la cadena

Executeu el codi següent:

cadena_agent. correr ( entrada = 'Què és LangChain' )

La resposta es mostra correctament i s'emmagatzema a la memòria:

Feu la pregunta de seguiment sense donar gran part del context:

cadena_agent. correr ( entrada = 'Qui el va desenvolupar?' )

L'agent utilitza la memòria per entendre la pregunta transformant-la i després imprimeix la resposta:

Obteniu el resum del xat mitjançant la memòria adjunta a l'agent:

cadena_agent. correr (
entrada = 'Gràcies! Resumeix la conversa, per als meus 5 anys'
)

Sortida
El resum s'ha extret amb èxit, i fins ara tot sembla ser igual, però el canvi arriba en el següent pas:

Pas 3: prova de la memòria

Extraient els missatges de xat de la memòria mitjançant el codi següent:

imprimir ( cadena_agent. memòria . tampó )

L'eina ha modificat l'historial afegint una altra pregunta que no es va fer originalment. Això passa quan el model entén la pregunta mitjançant a preguntar-se pregunta. L'eina pensa erròniament que la demana l'usuari i la tracta com una consulta independent. Així que afegeix aquesta pregunta addicional a la memòria que després s'utilitzarà per obtenir el context de la conversa:

Això és tot per ara.

Conclusió

Per afegir memòria tant a un agent com a les seves eines a LangChain, instal·leu els mòduls per obtenir les seves dependències i importar-ne biblioteques. Després d'això, creeu la memòria de conversa, el model de llenguatge, les eines i l'agent per afegir la memòria. El mètode recomanat per afegir la memòria és utilitzar ReadOnlyMemory a l'agent i les seves eines per emmagatzemar l'historial de xat. L'usuari també pot utilitzar el memòria conversacional tant per a agents com per a eines. Però, aconsegueixen confós de vegades i canviar els xats a la memòria.