Szybki zarys
Ten post pokaże, co następuje:
- Jak dodać pamięć zarówno do agenta, jak i jego narzędzi w LangChain
- Krok 1: Instalowanie frameworków
- Krok 2: Konfigurowanie środowisk
- Krok 3: Importowanie bibliotek
- Krok 4: Dodawanie pamięci ReadOnly
- Krok 5: Konfiguracja narzędzi
- Krok 6: Budowa agenta
- Metoda 1: Używanie ReadOnlyMemory
- Metoda 2: Używanie tej samej pamięci dla agenta i narzędzi
- Wniosek
Jak dodać pamięć zarówno do agenta, jak i jego narzędzi w LangChain?
Dodanie pamięci do agentów i narzędzi umożliwia im lepszą pracę dzięki możliwości wykorzystania historii czatów modelu. Dzięki pamięci agent może efektywnie decydować, które narzędzie i kiedy wdrożyć. Preferowane jest użycie „ Pamięć tylko do odczytu ” zarówno dla agentów, jak i narzędzi, więc nie będą mogli go modyfikować. Aby poznać proces dodawania pamięci zarówno do agentów, jak i narzędzi w LangChain, wykonaj poniższe kroki:
Krok 1: Instalowanie frameworków
Przede wszystkim zainstaluj langchain-eksperymentalny moduł, aby uzyskać jego zależności do budowania modeli językowych i narzędzi dla agenta. LangChain eksperymentalny to moduł pobierający zależności do budowy modeli najczęściej używanych w eksperymentach i testach:
pip zainstaluj langchain - eksperymentalny
Uzyskać wyniki-wyszukiwania google moduły z zależnościami OpenAI, aby uzyskać najbardziej trafne odpowiedzi z Internetu:
pip zainstaluj Openai Google - szukaj - wyniki
Krok 2: Konfigurowanie środowisk
Aby zbudować model pobierający odpowiedzi z Internetu, wymagane jest skonfigurowanie środowisk za pomocą OpenAI I SerpAPi Klucze:
import Ty
import przejść dalej
Ty. około [ „OPENAI_API_KEY” ] = przejść dalej. przejść dalej ( „Klucz API OpenAI:” )
Ty. około [ „KLUCZ_SERPAPI_API” ] = przejść dalej. przejść dalej ( „Klucz API Serpapi:” )
Krok 3: Importowanie bibliotek
Po skonfigurowaniu środowisk zaimportuj biblioteki, aby zbudować narzędzia dla agenta i dodatkową pamięć w celu integracji z nimi. Poniższy kod wykorzystuje agenty, pamięć, llms, łańcuchy, podpowiedzi i narzędzia w celu pobrania wymaganych bibliotek:
z Langchaina. agenci import Agent ZeroShot , Narzędzie , Wykonawca agentaz Langchaina. pamięć import Pamięć bufora konwersacji , Tylko do odczytu pamięć współdzielona
z Langchaina. llms import OpenAI
#pobierz bibliotekę Do budowanie łańcucha przy użyciu LangChain
z Langchaina. więzy import LLMCain
z Langchaina. monity import Szablon podpowiedzi
#pobierz bibliotekę Do pozyskiwanie informacji z Internetu
z Langchaina. narzędzia import SerpAPIWrapper
Krok 4: Dodawanie pamięci ReadOnly
Skonfiguruj szablon dla agenta, aby rozpocząć wykonywanie zadań zaraz po wprowadzeniu danych przez użytkownika. Następnie dodaj „Bufor konwersacjiPamięć()” do przechowywania historii czatów modelu i inicjalizacji 'Pamięć tylko do odczytu' dla agentów i ich narzędzi:
szablon = „” „To jest rozmowa człowieka z botem:{Historia czatu}
#ustaw strukturę do wyodrębniania precyzyjnego i łatwego podsumowania
Podsumuj czat dla {input}:
' „”
podpowiedź = Szablon podpowiedzi ( zmienne_wejściowe = [ 'wejście' , 'Historia czatu' ] , szablon = szablon )
pamięć = Pamięć bufora konwersacji ( klucz_pamięci = 'Historia czatu' )
pamięć tylko do odczytu = Tylko do odczytu pamięć współdzielona ( pamięć = pamięć )
#łańcuch podsumowania do integracji wszystkich komponentów Do uzyskanie podsumowania rozmowy
łańcuch_streszczenia = LLMCain (
llm = OpenAI ( ) ,
podpowiedź = podpowiedź ,
gadatliwy = PRAWDA ,
pamięć = pamięć tylko do odczytu ,
)
Krok 5: Konfiguracja narzędzi
Teraz skonfiguruj narzędzia takie jak wyszukiwanie i podsumowanie, aby uzyskać odpowiedź z Internetu wraz z podsumowaniem czatu:
szukaj = SerpAPIWrapper ( )narzędzia = [
Narzędzie (
nazwa = 'Szukaj' ,
funk = szukaj. uruchomić ,
opis = „właściwe odpowiedzi na ukierunkowane zapytania dotyczące ostatnich wydarzeń” ,
) ,
Narzędzie (
nazwa = 'Streszczenie' ,
funk = łańcuch_streszczenia. uruchomić ,
opis = „przydatne w podsumowaniu czatu, a danymi wejściowymi tego narzędzia powinien być ciąg znaków określający, kto będzie czytał to podsumowanie” ,
) ,
]
Krok 6: Budowa agenta
Skonfiguruj agenta, gdy tylko narzędzia będą gotowe do wykonania wymaganych zadań i uzyskania odpowiedzi z Internetu. „ prefiks ” jest wykonywana zanim agenci przydzielą jakiekolwiek zadanie narzędziom, a zmienna „ przyrostek ” jest wykonywany po wyodrębnieniu przez narzędzia odpowiedzi:
prefiks = „” „Porozmawiaj z człowiekiem, odpowiadając najlepiej jak potrafisz na następujące pytania, korzystając z następujących narzędzi:” „”przyrostek = „” 'Zaczynać!'
#Struktura Do aby agent zaczął korzystać z narzędzi podczas korzystania z pamięci
{ Historia czatu }
Pytanie : { wejście }
{ agent_scratchpad } „” '
zachęta = ZeroShotAgent.create_prompt(
#skonfiguruj szablony podpowiedzi, aby zrozumieć kontekst pytania
narzędzia,
przedrostek=przedrostek,
przyrostek=przyrostek,
zmienne_wejściowe=[' wejście „”, „ Historia czatu „”, „ agent_scratchpad „],
)
Metoda 1: Używanie ReadOnlyMemory
Gdy agent jest skonfigurowany do wykonywania narzędzi, model z ReadOnlyMemory jest modelem preferowane sposób budowania i wykonywania łańcuchów w celu pobrania odpowiedzi, a proces wygląda następująco:
Krok 1: Budowa łańcucha
Pierwszym krokiem w tej metodzie jest zbudowanie łańcucha i modułu wykonującego dla „Agent ZeroShot()” z jego argumentami. The „LLMCain()” służy do budowania połączenia pomiędzy wszystkimi czatami w modelu językowym przy użyciu argumentów llm i Prompt. Agent używa parametrów llm_chain, Tools i Verbose jako argumentów i buduje agent_chain w celu wykonania zarówno agentów, jak i ich narzędzi z pamięcią:
llm_chain = LLMCain ( llm = OpenAI ( temperatura = 0 ) , podpowiedź = podpowiedź )agent = Agent ZeroShot ( llm_chain = llm_chain , narzędzia = narzędzia , gadatliwy = PRAWDA )
łańcuch_agenta = Wykonawca agenta. from_agent_and_tools (
agent = agent , narzędzia = narzędzia , gadatliwy = PRAWDA , pamięć = pamięć
)
Krok 2: Testowanie łańcucha
Zadzwoń do łańcuch_agenta używając metody run() do zadania pytania z Internetu:
łańcuch_agenta. uruchomić ( wejście = „Co to jest LangChain” )Agent pobrał odpowiedź z Internetu za pomocą narzędzi wyszukiwania:
Użytkownik może zadać niejasne pytanie uzupełniające, aby przetestować pamięć podłączoną do agenta:
łańcuch_agenta. uruchomić ( wejście = „Kto to opracował?” )Agent wykorzystał poprzedni czat, aby zrozumieć kontekst pytań i uzyskał odpowiedzi, jak pokazano na poniższym zrzucie ekranu:
Agent używa narzędzia (summary_chain) do wyodrębnienia podsumowania wszystkich odpowiedzi wyodrębnionych wcześniej przy użyciu pamięci agenta:
łańcuch_agenta. uruchomić (wejście = „Dzięki! Podsumuj rozmowę, dla mojego 5-latka”
)
Wyjście
Podsumowanie zadanych wcześniej pytań zostało wyświetlone dla 5-latka na poniższym zrzucie ekranu:
Krok 3: Testowanie pamięci
Wydrukuj pamięć buforową, aby wyodrębnić zapisane w niej czaty, używając następującego kodu:
wydrukować ( łańcuch_agenta. pamięć . bufor )Czaty we właściwej kolejności, bez żadnych modyfikacji, zostały wyświetlone w następującym fragmencie:
Metoda 2: Używanie tej samej pamięci dla agenta i narzędzi
Drugą metodą, która nie jest zalecana przez platformę, jest wykorzystanie pamięci buforowej zarówno dla agentów, jak i narzędzi. Narzędzia mogą zmieniać czaty przechowywane w pamięci, co może zwracać fałszywe wyniki w dużych rozmowach:
Krok 1: Budowa łańcucha
Użycie całego kodu z szablonu do zbudowania narzędzi i łańcuchów dla agentów z niewielką zmianą, ponieważ tym razem nie dodano pamięci ReadOnlyMemory:
szablon = „” „To jest rozmowa człowieka z botem:{Historia czatu}
Napisz podsumowanie rozmowy dla {input}:
' „”
#zbuduj strukturę czatu interfejs korzystając z szablonu podpowiedzi, dodając pamięć z łańcuchem
podpowiedź = Szablon podpowiedzi ( zmienne_wejściowe = [ 'wejście' , 'Historia czatu' ] , szablon = szablon )
pamięć = Pamięć bufora konwersacji ( klucz_pamięci = 'Historia czatu' )
łańcuch_streszczenia = LLMCain (
llm = OpenAI ( ) ,
podpowiedź = podpowiedź ,
gadatliwy = PRAWDA ,
pamięć = pamięć ,
)
#zbuduj narzędzia ( wyszukiwanie i podsumowanie ) Do konfigurowanie agentów
szukaj = SerpAPIWrapper ( )
narzędzia = [
Narzędzie (
nazwa = 'Szukaj' ,
funk = szukaj. uruchomić ,
opis = „właściwe odpowiedzi na ukierunkowane zapytania dotyczące ostatnich wydarzeń” ,
) ,
Narzędzie (
nazwa = 'Streszczenie' ,
funk = łańcuch_streszczenia. uruchomić ,
opis = „przydatne przy uzyskiwaniu podsumowania czatu i potrzebne jest wprowadzenie ciągu znaków do tego narzędzia reprezentującego osobę, która przeczyta to podsumowanie” ,
) ,
]
#wyjaśnij kroki Do agentowi możliwość wykorzystania narzędzi do wydobywania informacji Do czat
prefiks = „” „Rozmawiaj z człowiekiem, odpowiadając na pytania w najlepszy możliwy sposób, korzystając z następujących narzędzi:” „”
przyrostek = „” 'Zaczynać!'
#Struktura Do aby agent zaczął korzystać z narzędzi podczas korzystania z pamięci
{ Historia czatu }
Pytanie : { wejście }
{ agent_scratchpad } „” '
zachęta = ZeroShotAgent.create_prompt(
#skonfiguruj szablony podpowiedzi, aby zrozumieć kontekst pytania
narzędzia,
przedrostek=przedrostek,
przyrostek=przyrostek,
zmienne_wejściowe=[' wejście „”, „ Historia czatu „”, „ agent_scratchpad „],
)
#zintegruj wszystkie komponenty podczas tworzenia modułu wykonującego agenta
llm_chain = LLMChain(llm=OpenAI(temperatura=0), zachęta=podpowiedź)
agent = ZeroShotAgent(llm_chain=llm_chain, narzędzia=narzędzia, gadatliwy=True)
agent_chain = AgentExecutor.from_agent_and_tools(
agent=agent, narzędzia=narzędzia, gadatliwy=prawda, pamięć=pamięć
)
Krok 2: Testowanie łańcucha
Uruchom następujący kod:
łańcuch_agenta. uruchomić ( wejście = „Co to jest LangChain” )Odpowiedź została pomyślnie wyświetlona i zapisana w pamięci:
Zadaj pytanie uzupełniające, nie podając zbyt wiele kontekstu:
łańcuch_agenta. uruchomić ( wejście = „Kto to opracował?” )Agent wykorzystuje pamięć, aby zrozumieć pytanie, przekształcając je, a następnie wypisuje odpowiedź:
Uzyskaj podsumowanie czatu korzystając z pamięci dołączonej do agenta:
łańcuch_agenta. uruchomić (wejście = „Dzięki! Podsumuj rozmowę, dla mojego 5-latka”
)
Wyjście
Podsumowanie zostało pomyślnie wyodrębnione i do tej pory wszystko wydaje się być takie samo, ale zmiana następuje w następnym kroku:
Krok 3: Testowanie pamięci
Wyodrębnianie wiadomości czatu z pamięci przy użyciu następującego kodu:
wydrukować ( łańcuch_agenta. pamięć . bufor )Narzędzie zmodyfikowało historię dodając kolejne pytanie, które nie zostało pierwotnie zadane. Dzieje się tak, gdy model rozumie pytanie za pomocą a zapytaj siebie pytanie. Narzędzie błędnie myśli, że zadaje je użytkownik i traktuje je jako osobne zapytanie. Dodaje więc do pamięci to dodatkowe pytanie, które następnie można wykorzystać, aby uzyskać kontekst rozmowy:
To wszystko na teraz.
Wniosek
Aby dodać pamięć zarówno do agenta, jak i jego narzędzi w LangChain, zainstaluj moduły, aby uzyskać ich zależności i zaimportować z nich biblioteki. Następnie zbuduj pamięć konwersacji, model języka, narzędzia i agenta, aby dodać pamięć. The zalecana metoda aby dodać pamięć, używa ReadOnlyMemory do agenta i jego narzędzi do przechowywania historii czatów. Użytkownik może także skorzystać z pamięć konwersacyjna zarówno dla agentów, jak i narzędzi. Ale dostają zdezorientowany czasami i zmieniaj czaty w pamięci.