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
- Krok 1: Instalace frameworků
- Krok 2: Nastavení prostředí
- Krok 3: Import knihoven
- Krok 4: Přidání ReadOnlyMemory
- Krok 5: Nastavení nástrojů
- Krok 6: Sestavení agenta
- Metoda 1: Použití ReadOnlyMemory
- Metoda 2: Použití stejné paměti pro agenta i nástroje
- Závěr
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 , AgentExecutorz 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.