Jak přidat paměť jak agentovi, tak jeho nástrojům v LangChain?

Jak Pridat Pamet Jak Agentovi Tak Jeho Nastrojum V Langchain



LangChain poskytuje všechny potřebné nástroje pro vytváření agentů pro řízení procesu získávání informací pro uživatele. Tyto nástroje jsou nezbytné pro vytvoření agenta, protože spravují úkoly pomocí různých nástrojů. Agenti také manipulují s těmito nástroji, aby prošli kroky a provedli všechny činnosti. Ví, který nástroj je pro danou úlohu vyžadován a kdy jej přiřadit k danému konkrétnímu úkolu.

Rychlý přehled

Tento příspěvek bude demonstrovat následující:

Jak přidat paměť jak agentovi, tak jeho nástrojům v LangChain?

Přidání paměti do agentů a nástrojů jim umožňuje lépe pracovat s možností používat historii chatu modelu. Díky paměti se agent může efektivně rozhodnout, který nástroj nasadit a kdy. Preferováno je použití „ Pamět pouze pro čtení ” pro agenty i nástroje, takže je nebudou moci upravovat. Chcete-li se naučit proces přidávání paměti k agentům i nástrojům v LangChain, projděte si uvedené kroky:







Krok 1: Instalace frameworků

Nejprve nainstalujte langchain-experimentální modul, abyste získali jeho závislosti pro vytváření jazykových modelů a nástrojů pro agenta. LangChain experimental je modul, který získává závislosti pro vytváření modelů, které se většinou používají pro experimenty a testy:



pip install langchain - experimentální



Dostaň google-search-results moduly se závislostmi OpenAI, abyste získali ty nejrelevantnější odpovědi z internetu:





pip nainstalovat openai google - Vyhledávání - Výsledek

Krok 2: Nastavení prostředí

K sestavení modelu, který získá odpovědi z internetu, je nutné nastavit prostředí pomocí OpenAI a SerpAPi klíče:



import vy
import getpass

vy. přibližně [ 'OPENAI_API_KEY' ] = getpass. getpass ( 'Klíč OpenAI API:' )
vy. přibližně [ 'SERPAPI_API_KEY' ] = getpass. getpass ( 'Serpapi API Key:' )

Krok 3: Import knihoven

Po nastavení prostředí naimportujte knihovny, abyste vytvořili nástroje pro agenta a další paměť, která se s nimi integruje. Následující kód používá agenty, paměť, llms, řetězce, výzvy a nástroje k získání požadovaných knihoven:

z langchainu. agenti import ZeroShotAgent , Nástroj , AgentExecutor
z langchainu. Paměť import ConversationBufferMemory , ReadOnlySharedMemory
z langchainu. llms import OpenAI
#získej knihovnu pro budování řetězce pomocí LangChain
z langchainu. řetězy import LLMCain
z langchainu. vyzve import PromptTemplate
#získej knihovnu pro získávání informací z internetu
z langchainu. utility import SerpAPIWrapper

Krok 4: Přidání ReadOnlyMemory

Nakonfigurujte šablonu pro agenta, aby mohl začít s prováděním úkolů, jakmile uživatel poskytne vstup. Poté přidejte 'ConversationBufferMemory()' pro uložení historie chatu modelu a inicializaci 'Pamět pouze pro čtení' pro agenty a jejich nástroje:

šablona = '' „Toto je rozhovor mezi člověkem a robotem:

{chat_history}
#nastavit strukturu pro extrahování přesného a snadného shrnutí
Shrňte chat pro {input}:
'
''

výzva = PromptTemplate ( vstupní_proměnné = [ 'vstup' , 'chat_history' ] , šablona = šablona )
Paměť = ConversationBufferMemory ( paměťový_klíč = 'chat_history' )
pamět pouze pro čtení = ReadOnlySharedMemory ( Paměť = Paměť )
#summary chain integrovat všechny komponenty pro získat shrnutí konverzace
souhrnný_řetězec = LLMCain (
llm = OpenAI ( ) ,
výzva = výzva ,
podrobný = Skutečný ,
Paměť = pamět pouze pro čtení ,
)

Krok 5: Nastavení nástrojů

Nyní nastavte nástroje, jako je vyhledávání a shrnutí, abyste získali odpověď z internetu spolu se shrnutím chatu:

Vyhledávání = SerpAPIWrapper ( )
nástroje = [
Nástroj (
název = 'Vyhledávání' ,
func = Vyhledávání. běh ,
popis = 'správné odpovědi na cílené dotazy týkající se nedávných událostí' ,
) ,
Nástroj (
název = 'Souhrn' ,
func = souhrnný_řetězec. běh ,
popis = 'užitečné pro shrnutí chatu a vstupem do tohoto nástroje by měl být řetězec představující, kdo bude tento souhrn číst' ,
) ,
]

Krok 6: Sestavení agenta

Nakonfigurujte agenta, jakmile budou nástroje připraveny provést požadované úkoly a získat odpovědi z internetu. ' předpona proměnná ” se provede předtím, než agenti přiřadí jakýkoli úkol nástrojům a přípona “ se provede poté, co nástroje extrahují odpověď:

předpona = '' 'Promluvte si s člověkem a odpovězte co nejlépe na následující otázky pomocí následujících nástrojů:' ''
přípona = '' 'Začít!'
#struktura pro aby agent začal používat nástroje při používání paměti
{ historie_chatu }
Otázka : { vstup }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure šablony výzev, abyste pochopili kontext otázky
nástroje,
prefix=předpona,
sufix=přípona,
input_variables=['
vstup ',' historie_chatu ',' agent_scratchpad '],
)

Metoda 1: Použití ReadOnlyMemory

Jakmile je agent nastaven na spouštění nástrojů, je model s ReadOnlyMemory tím přednostně způsob, jak vytvořit a spustit řetězce pro získání odpovědí, a proces je následující:

Krok 1: Budování řetězce

Prvním krokem v této metodě je sestavení řetězce a exekutora pro 'ZeroShotAgent()' se svými argumenty. The 'LLMCain()' se používá k vytvoření spojení mezi všemi chaty v jazykovém modelu pomocí argumentů llm a prompt. Agent používá llm_chain, tools a verbose jako svůj argument a vytváří agent_chain pro spouštění jak agentů, tak jeho nástrojů s pamětí:

llm_chain = LLMCain ( llm = OpenAI ( teplota = 0 ) , výzva = výzva )
činidlo = ZeroShotAgent ( llm_chain = llm_chain , nástroje = nástroje , podrobný = Skutečný )
agent_chain = AgentExecutor. from_agent_and_tools (
činidlo = činidlo , nástroje = nástroje , podrobný = Skutečný , Paměť = Paměť
)

Krok 2: Testování řetězu

Zavolej agent_chain pomocí metody run() položte otázku z internetu:

agent_chain. běh ( vstup = 'Co je LangChain' )

Agent vytáhl odpověď z internetu pomocí vyhledávacích nástrojů:

Uživatel může položit nejasnou následnou otázku, aby otestoval paměť připojenou k agentovi:

agent_chain. běh ( vstup = 'Kdo to vyvinul?' )

Agent použil předchozí chat k pochopení kontextu otázek a načetl odpovědi, jak je zobrazeno na následujícím snímku obrazovky:

Agent používá nástroj (summary_chain) k extrahování souhrnu všech dříve extrahovaných odpovědí pomocí paměti agenta:

agent_chain. běh (
vstup = 'Díky! Shrňte konverzaci, pro mých 5 let'
)

Výstup
Shrnutí dříve položených otázek bylo pro 5leté dítě zobrazeno na následujícím snímku obrazovky:

Krok 3: Testování paměti

Vytiskněte vyrovnávací paměť a extrahujte v ní uložené chaty pomocí následujícího kódu:

tisk ( agent_chain. Paměť . vyrovnávací paměť )

Chaty ve správném pořadí bez jakýchkoli úprav byly zobrazeny v následujícím úryvku:

Metoda 2: Použití stejné paměti pro agenta i nástroje

Druhým způsobem, který platforma nedoporučuje, je použití vyrovnávací paměti pro agenty i nástroje. Nástroje mohou změnit chaty uložené v paměti, což může ve velkých konverzacích vrátit falešné výstupy:

Krok 1: Budování řetězce

Použití kompletního kódu ze šablony k vytvoření nástrojů a řetězců pro agenty s malou změnou, protože ReadOnlyMemory tentokrát není přidána:

šablona = '' „Toto je rozhovor mezi člověkem a robotem:

{chat_history}

Napište shrnutí konverzace pro {input}:
'
''
#postavte strukturu chatu rozhraní pomocí šablony výzvy přidáním paměti pomocí řetězce
výzva = PromptTemplate ( vstupní_proměnné = [ 'vstup' , 'chat_history' ] , šablona = šablona )
Paměť = ConversationBufferMemory ( paměťový_klíč = 'chat_history' )
souhrnný_řetězec = LLMCain (
llm = OpenAI ( ) ,
výzva = výzva ,
podrobný = Skutečný ,
Paměť = Paměť ,
)
#postavte si nástroje ( vyhledávání a shrnutí ) pro konfigurace agentů
Vyhledávání = SerpAPIWrapper ( )
nástroje = [
Nástroj (
název = 'Vyhledávání' ,
func = Vyhledávání. běh ,
popis = 'správné odpovědi na cílené dotazy týkající se nedávných událostí' ,
) ,
Nástroj (
název = 'Souhrn' ,
func = souhrnný_řetězec. běh ,
popis = 'užitečné pro získání shrnutí chatu a pro tento nástroj potřebujete řetězec, který představuje, kdo bude tento souhrn číst' ,
) ,
]
#vysvětlete kroky pro agent používat nástroje k získávání informací pro chat
předpona = '' 'Promluvte si s člověkem a odpovězte na dotazy nejlepším možným způsobem pomocí následujících nástrojů:' ''
přípona = '' 'Začít!'
#struktura pro aby agent začal používat nástroje při používání paměti
{ historie_chatu }
Otázka : { vstup }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure šablony výzev, abyste pochopili kontext otázky
nástroje,
prefix=předpona,
sufix=přípona,
input_variables=['
vstup ',' historie_chatu ',' agent_scratchpad '],
)
#integrujte všechny komponenty při sestavování spouštěcího programu agenta
llm_chain = LLMCain(llm=OpenAI(teplota=0), prompt=prompt)
agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
agent_chain = AgentExecutor.from_agent_and_tools(
agent=agent, nástroje=nástroje, verbose=Pravda, paměť=paměť
)

Krok 2: Testování řetězu

Spusťte následující kód:

agent_chain. běh ( vstup = 'Co je LangChain' )

Odpověď se úspěšně zobrazí a uloží do paměti:

Položte doplňující otázku, aniž byste uváděli mnoho kontextu:

agent_chain. běh ( vstup = 'Kdo to vyvinul?' )

Agent použije paměť k pochopení otázky tak, že ji transformuje a poté vytiskne odpověď:

Získejte shrnutí chatu pomocí paměti připojené k agentovi:

agent_chain. běh (
vstup = 'Díky! Shrňte konverzaci, pro mých 5 let'
)

Výstup
Shrnutí bylo úspěšně extrahováno a až dosud se zdá, že je vše stejné, ale změna přichází v dalším kroku:

Krok 3: Testování paměti

Extrahování chatových zpráv z paměti pomocí následujícího kódu:

tisk ( agent_chain. Paměť . vyrovnávací paměť )

Nástroj upravil historii přidáním další otázky, která původně nebyla položena. To se stane, když model pochopí otázku pomocí a sebeotázku otázka. Nástroj se mylně domnívá, že jej uživatel žádá, a považuje jej za samostatný dotaz. Přidává tedy do paměti další otázku, která se pak použije k získání kontextu konverzace:

To je prozatím vše.

Závěr

Chcete-li přidat paměť jak agentovi, tak jeho nástrojům v LangChain, nainstalujte moduly, abyste získali jejich závislosti a importovali z nich knihovny. Poté vytvořte paměť konverzace, jazykový model, nástroje a agenta pro přidání paměti. The doporučená metoda k přidání paměti se používá ReadOnlyMemory k agentovi a jeho nástrojům pro ukládání historie chatu. Uživatel může také použít konverzační paměť pro agenty i nástroje. Ale dostanou zmatený někdy a změnit chaty v paměti.