Jak dodać pamięć zarówno do agenta, jak i jego narzędzi w LangChain?

Jak Dodac Pamiec Zarowno Do Agenta Jak I Jego Narzedzi W Langchain



LangChain zapewnia wszystkie niezbędne narzędzia do budowy agentów kontrolujących proces wydobywania informacji dla użytkownika. Narzędzia te są niezbędne do zbudowania agenta, ponieważ zarządzają zadaniami za pomocą różnych narzędzi. Agenci również manipulują tymi narzędziami, aby wykonać kolejne kroki i wdrożyć wszystkie działania. Wie, jakie narzędzie jest potrzebne do danego zadania i kiedy przypisać je do konkretnego zadania.

Szybki zarys

Ten post pokaże, co następuje:

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 agenta
z 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.