Ako pridať pamäť do agenta a jeho nástrojov v LangChain?

Ako Pridat Pamat Do Agenta A Jeho Nastrojov V Langchain



LangChain poskytuje všetky potrebné nástroje na zostavenie agentov na riadenie procesu získavania informácií pre používateľa. Tieto nástroje sú potrebné na zostavenie agenta, pretože riadia úlohy pomocou rôznych nástrojov. Agenti tiež manipulujú s týmito nástrojmi, aby prešli krokmi a implementovali všetky aktivity. Vie, ktorý nástroj je potrebný pre danú úlohu a kedy ho priradiť k danej konkrétnej úlohe.

Rýchly prehľad

Tento príspevok bude demonštrovať nasledovné:

Ako pridať pamäť do agenta a jeho nástrojov v LangChain?

Pridanie pamäte do agentov a nástrojov im umožňuje lepšie pracovať s možnosťou používať históriu chatu modelu. Vďaka pamäti sa agent môže efektívne rozhodnúť, ktorý nástroj a kedy nasadí. Uprednostňuje sa použitie „ Pamäť iba na čítanie pre agentov aj nástroje, takže ich nebudú môcť upravovať. Ak sa chcete naučiť proces pridávania pamäte k agentom aj nástrojom v LangChain, postupujte podľa uvedených krokov:







Krok 1: Inštalácia rámcov

Najprv nainštalujte langchain-experimentálne modul na získanie jeho závislostí na vytváranie jazykových modelov a nástrojov pre agenta. LangChain experimental je modul, ktorý získava závislosti pre vytváranie modelov, ktoré sa väčšinou používajú na experimenty a testy:



pip install langchain - experimentálne



Dostať google-search-results moduly so závislosťami OpenAI na získanie najrelevantnejších odpovedí z internetu:





pip install openai google - Vyhľadávanie - výsledky

Krok 2: Nastavenie prostredí

Na vytvorenie modelu, ktorý získava odpovede z internetu, je potrebné nastaviť prostredia pomocou OpenAI a SerpAPi kľúče:



importovať vy
importovať getpass

vy. približne [ 'OPENAI_API_KEY' ] = getpass. getpass ( 'OpenAI API Key:' )
vy. približne [ 'SERPAPI_API_KEY' ] = getpass. getpass ( 'Serpapi API Key:' )

Krok 3: Importovanie knižníc

Po nastavení prostredí importujte knižnice, aby ste vytvorili nástroje pre agenta a dodatočnú pamäť na integráciu s nimi. Nasledujúci kód používa agentov, pamäť, llms, reťazce, výzvy a pomocné programy na získanie požadovaných knižníc:

z langchainu. agentov importovať ZeroShotAgent , Nástroj , AgentExecutor
z langchainu. Pamäť importovať ConversationBufferMemory , ReadOnlySharedMemory
z langchainu. llms importovať OpenAI
#získaj knižnicu pre budovanie reťazca pomocou LangChain
z langchainu. reťaze importovať LLMCain
z langchainu. výzvy importovať PromptTemplate
#získaj knižnicu pre získavanie informácií z internetu
z langchainu. komunálne služby importovať SerpAPIWrapper

Krok 4: Pridanie ReadOnlyMemory

Nakonfigurujte šablónu pre agenta, aby mohol začať vykonávať úlohy hneď, ako používateľ poskytne vstup. Potom pridajte 'ConversationBufferMemory()' uložiť históriu chatu modelu a inicializovať 'Pamäť iba na čítanie' pre agentov a ich nástroje:

šablóna = '' „Toto je rozhovor medzi človekom a robotom:

{chat_history}
#nastaviť štruktúru na extrahovanie presného a jednoduchého súhrnu
Zhrňte rozhovor pre {input}:
'
''

výzva = PromptTemplate ( vstupné_premenné = [ 'vstup' , 'chat_history' ] , šablóna = šablóna )
Pamäť = ConversationBufferMemory ( pamäťový_kľúč = 'chat_history' )
pamäť iba na čítanie = ReadOnlySharedMemory ( Pamäť = Pamäť )
#súhrnný reťazec na integráciu všetkých komponentov pre získanie súhrnu konverzácie
Summary_chain = LLMCain (
llm = OpenAI ( ) ,
výzva = výzva ,
podrobný = Pravda ,
Pamäť = pamäť iba na čítanie ,
)

Krok 5: Nastavenie nástrojov

Teraz si nastavte nástroje, ako je vyhľadávanie a súhrn, aby ste spolu so súhrnom rozhovoru získali odpoveď z internetu:

Vyhľadávanie = SerpAPIWrapper ( )
nástrojov = [
Nástroj (
názov = 'Vyhľadávanie' ,
func = Vyhľadávanie. behať ,
popis = 'správne odpovede na cielené otázky o nedávnych udalostiach' ,
) ,
Nástroj (
názov = 'zhrnutie' ,
func = Summary_chain. behať ,
popis = 'užitočné na zhrnutie rozhovoru a vstupom do tohto nástroja by mal byť reťazec predstavujúci, kto bude čítať tento súhrn' ,
) ,
]

Krok 6: Vytvorenie agenta

Nakonfigurujte agenta hneď, ako budú nástroje pripravené na vykonávanie požadovaných úloh a získajte odpovede z internetu. ' predpona premenná ' sa vykoná predtým, ako agenti priradia nástrojom akúkoľvek úlohu a ' prípona “ sa vykoná po tom, čo nástroje extrahujú odpoveď:

predpona = '' „Porozprávajte sa s človekom a odpovedzte čo najlepšie na nasledujúce otázky pomocou nasledujúcich nástrojov:“ ''
prípona = '' 'Začať!'
#štruktúra pre aby agent začal používať nástroje pri používaní pamäte
{ chat_history }
Otázka : { vstup }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure šablóny výziev na pochopenie kontextu otázky
nástroje,
predpona=predpona,
prípona = prípona,
input_variables=['
vstup ',' chat_history ',' agent_scratchpad '],
)

Metóda 1: Použitie ReadOnlyMemory

Keď je agent nastavený na spúšťanie nástrojov, model s ReadOnlyMemory je model preferovaný spôsob, ako vytvoriť a spustiť reťazce na získanie odpovedí, a postup je nasledujúci:

Krok 1: Budovanie reťazca

Prvým krokom v tejto metóde je zostavenie reťazca a vykonávateľa pre 'ZeroShotAgent()' so svojimi argumentmi. The 'LLMCain()' sa používa na vytvorenie spojenia medzi všetkými chatmi v jazykovom modeli pomocou argumentov llm a prompt. Agent používa reťazec llm_chain, nástroje a podrobné informácie ako svoj argument a vytvára reťazec agenta na spúšťanie agentov aj ich nástrojov s pamäťou:

llm_chain = LLMChain ( llm = OpenAI ( teplota = 0 ) , výzva = výzva )
agent = ZeroShotAgent ( llm_chain = llm_chain , nástrojov = nástrojov , podrobný = Pravda )
agent_chain = AgentExecutor. from_agent_and_tools (
agent = agent , nástrojov = nástrojov , podrobný = Pravda , Pamäť = Pamäť
)

Krok 2: Testovanie reťaze

Zavolajte na agent_chain pomocou metódy run() položte otázku z internetu:

agent_chain. behať ( vstup = 'Čo je LangChain' )

Agent vytiahol odpoveď z internetu pomocou vyhľadávacích nástrojov:

Používateľ môže položiť nejasnú doplňujúcu otázku na testovanie pamäte pripojenej k agentovi:

agent_chain. behať ( vstup = 'Kto to vyvinul?' )

Agent použil predchádzajúci rozhovor na pochopenie kontextu otázok a získal odpovede, ako je zobrazené na nasledujúcej snímke obrazovky:

Agent používa nástroj (summary_chain) na extrahovanie súhrnu všetkých odpovedí extrahovaných predtým pomocou pamäte agenta:

agent_chain. behať (
vstup = 'Ďakujem! Zhrňte rozhovor, pre moje 5-ročné dieťa'
)

Výkon
Zhrnutie predtým položených otázok sa pre 5-ročné dieťa zobrazilo na nasledujúcej snímke obrazovky:

Krok 3: Testovanie pamäte

Vytlačte vyrovnávaciu pamäť a extrahujte v nej uložené rozhovory pomocou nasledujúceho kódu:

vytlačiť ( agent_chain. Pamäť . vyrovnávacej pamäte )

Rozhovory v správnom poradí bez akejkoľvek úpravy boli zobrazené v nasledujúcom úryvku:

Metóda 2: Použitie rovnakej pamäte pre agenta aj nástroje

Druhá metóda, ktorú platforma neodporúča, je použitie vyrovnávacej pamäte pre agentov aj nástroje. Nástroje môžu zmeniť chaty uložené v pamäti, čo môže vrátiť falošné výstupy vo veľkých konverzáciách:

Krok 1: Budovanie reťazca

Použitie úplného kódu zo šablóny na vytvorenie nástrojov a reťazcov pre agentov s malou zmenou, pretože ReadOnlyMemory tentoraz nie je pridaná:

šablóna = '' „Toto je rozhovor medzi človekom a robotom:

{chat_history}

Napíšte zhrnutie konverzácie pre {input}:
'
''
#vytvorte štruktúru chatu rozhranie pomocou šablóny výzvy pridaním pamäte s reťazou
výzva = PromptTemplate ( vstupné_premenné = [ 'vstup' , 'chat_history' ] , šablóna = šablóna )
Pamäť = ConversationBufferMemory ( pamäťový_kľúč = 'chat_history' )
Summary_chain = LLMChain (
llm = OpenAI ( ) ,
výzva = výzva ,
podrobný = Pravda ,
Pamäť = Pamäť ,
)
#postav si nástroje ( vyhľadávanie a zhrnutie ) pre konfigurácia agentov
Vyhľadávanie = SerpAPIWrapper ( )
nástrojov = [
Nástroj (
názov = 'Vyhľadávanie' ,
func = Vyhľadávanie. behať ,
popis = 'správne odpovede na cielené otázky o nedávnych udalostiach' ,
) ,
Nástroj (
názov = 'zhrnutie' ,
func = Summary_chain. behať ,
popis = 'užitočné na získanie súhrnu rozhovoru a potrebujete reťazec vstupu do tohto nástroja predstavujúci, kto bude čítať tento súhrn' ,
) ,
]
#vysvetlite kroky pre agenta použiť nástroje na extrahovanie informácií pre chat
predpona = '' „Porozprávajte sa s človekom a odpovedzte na otázky najlepším možným spôsobom pomocou nasledujúcich nástrojov:“ ''
prípona = '' 'Začať!'
#štruktúra pre aby agent začal používať nástroje pri používaní pamäte
{ chat_history }
Otázka : { vstup }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure šablóny výziev na pochopenie kontextu otázky
nástroje,
predpona=predpona,
prípona = prípona,
input_variables=['
vstup ',' chat_history ',' agent_scratchpad '],
)
#integrujte všetky komponenty pri vytváraní spúšťača agentov
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: Testovanie reťaze

Spustite nasledujúci kód:

agent_chain. behať ( vstup = 'Čo je LangChain' )

Odpoveď sa úspešne zobrazí a uloží do pamäte:

Opýtajte sa doplňujúcu otázku bez toho, aby ste uviedli veľa kontextu:

agent_chain. behať ( vstup = 'Kto to vyvinul?' )

Agent používa pamäť na pochopenie otázky tak, že ju transformuje a potom vytlačí odpoveď:

Získajte súhrn rozhovoru pomocou pamäte pripojenej k agentovi:

agent_chain. behať (
vstup = 'Ďakujem! Zhrňte rozhovor, pre moje 5-ročné dieťa'
)

Výkon
Súhrn bol úspešne extrahovaný a zatiaľ sa zdá, že je všetko rovnaké, ale zmena prichádza v ďalšom kroku:

Krok 3: Testovanie pamäte

Extrahovanie chatových správ z pamäte pomocou nasledujúceho kódu:

vytlačiť ( agent_chain. Pamäť . vyrovnávacej pamäte )

Nástroj upravil históriu pridaním ďalšej otázky, ktorá pôvodne nebola položená. To sa deje, keď model pochopí otázku pomocou a sebaopýtanie otázka. Nástroj sa mylne domnieva, že sa ho pýta používateľ, a považuje ho za samostatný dopyt. Pridáva teda do pamäte aj ďalšiu otázku, ktorá sa potom použije na získanie kontextu rozhovoru:

To je zatiaľ všetko.

Záver

Ak chcete pridať pamäť agentovi aj jeho nástrojom v LangChain, nainštalujte moduly, aby ste získali ich závislosti a importovali z nich knižnice. Potom vytvorte pamäť konverzácie, jazykový model, nástroje a agenta na pridanie pamäte. The odporúčaná metóda na pridanie pamäte sa používa ReadOnlyMemory pre agenta a jeho nástroje na ukladanie histórie chatu. Používateľ môže tiež použiť konverzačná pamäť pre agentov aj nástroje. Ale dostanú zmätený niekedy a zmeniť chaty v pamäti.