Rýchly prehľad
Tento príspevok bude demonštrovať nasledovné:
- Ako pridať pamäť do agenta a jeho nástrojov v LangChain
- Krok 1: Inštalácia rámcov
- Krok 2: Nastavenie prostredí
- Krok 3: Importovanie knižníc
- Krok 4: Pridanie ReadOnlyMemory
- Krok 5: Nastavenie nástrojov
- Krok 6: Vytvorenie agenta
- Metóda 1: Použitie ReadOnlyMemory
- Metóda 2: Použitie rovnakej pamäte pre agenta aj nástroje
- Záver
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 , AgentExecutorz 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.