Podstawowe klasy i moduły w LangChain
Poznaj podstawowe klasy i moduły LangChain – biblioteki do budowy aplikacji opartych na LLM. Przykłady, integracje i możliwości rozwoju AI.
Artykuł przeznaczony dla programistów i osób technicznych budujących aplikacje z LLM, którzy chcą poznać podstawowe komponenty LangChain oraz sposoby integracji modeli, pamięci i źródeł danych.
Z tego artykułu dowiesz się
- Czym jest LangChain i do jakich zastosowań służy w budowie aplikacji z LLM?
- Jakie są kluczowe klasy LangChain (np. LLM, PromptTemplate, Chain, Tool, Memory, Document) i za co odpowiadają?
- Jak działają łańcuchy (Chains), integracja z modelami LLM/ChatModel oraz zarządzanie pamięcią i źródłami danych w LangChain?
Wprowadzenie do biblioteki LangChain
LangChain to otwartoźródłowa biblioteka zaprojektowana z myślą o tworzeniu zaawansowanych aplikacji wykorzystujących modele językowe (LLM). Jej głównym celem jest ułatwienie integracji modeli językowych z różnymi źródłami danych, logiką aplikacyjną oraz zewnętrznymi narzędziami w sposób modułowy i skalowalny.
W odróżnieniu od prostych interfejsów API do modeli językowych, LangChain oferuje zestaw komponentów pozwalających na budowanie złożonych struktur, takich jak łańcuchy operacji (tzw. chains), dynamiczne podejmowanie decyzji przez model oraz zarządzanie kontekstem konwersacji. Dzięki temu możliwe jest tworzenie bardziej interaktywnych i kontekstowo świadomych aplikacji.
LangChain znajduje zastosowanie w wielu scenariuszach, takich jak:
- budowa chatbotów i asystentów konwersacyjnych,
- automatyzacja przetwarzania dokumentów,
- tworzenie systemów rekomendacyjnych opartych na języku naturalnym,
- konstrukcja narzędzi do ekstrakcji wiedzy i analizy danych tekstowych.
Dzięki modularnej architekturze, LangChain pozwala programistom dostosowywać poszczególne komponenty do konkretnych potrzeb, umożliwiając łatwą rozbudowę i integrację z popularnymi modelami, bazami danych czy interfejsami użytkownika.
Podstawowe klasy i ich funkcje
LangChain to biblioteka, która ułatwia tworzenie aplikacji wykorzystujących modele językowe, oferując przy tym zestaw gotowych klas i narzędzi do zarządzania ich logiką. W tej sekcji przedstawiamy najważniejsze klasy, które stanowią fundament większości projektów opartych na LangChain. Temat tego artykułu pojawia się w niemal każdej sesji szkoleniowej Cognity – czasem w formie pytania, czasem w formie frustracji.
- LLM – klasa reprezentująca model językowy, odpowiedzialna za generowanie odpowiedzi na podstawie zadanych promptów. Umożliwia korzystanie z różnych dostawców modeli (np. OpenAI, Hugging Face) w ustandaryzowany sposób.
- PromptTemplate – służy do definiowania i zarządzania szablonami promptów, które są następnie przetwarzane przez model językowy. Umożliwia dynamiczne wypełnianie zmiennych w promptach.
- Chain – ogólna koncepcja łańcucha pozwalająca łączyć różne komponenty (np. modele, przetwarzanie tekstu, dostęp do danych) w zorganizowaną sekwencję działań.
- Tool – reprezentuje zewnętrzne narzędzie lub funkcję, z których model może korzystać podczas działania, np. wyszukiwarki, bazy danych czy API.
- Memory – klasa umożliwiająca przechowywanie i ponowne wykorzystanie informacji z wcześniejszych interakcji, wspierając tym samym kontekstową rozmowę z modelem.
- Document – struktura wykorzystywana do reprezentowania dokumentów tekstowych, które mogą być analizowane, przeszukiwane lub wykorzystywane jako źródło wiedzy dla modelu.
Każda z tych klas pełni określoną rolę w architekturze LangChain, umożliwiając modularne i elastyczne budowanie zaawansowanych aplikacji opartych na sztucznej inteligencji.
Moduły odpowiedzialne za łańcuchy zadań (Chains)
W LangChain jednym z kluczowych konceptów są łańcuchy zadań (ang. Chains), które umożliwiają tworzenie złożonych przepływów logiki przetwarzania zapytań przez modele językowe. Łańcuchy te pozwalają na łączenie wielu komponentów – takich jak modele językowe, zapytania do baz wiedzy czy funkcje użytkownika – w uporządkowane sekwencje operacji.
LangChain oferuje kilka podstawowych typów modułów do tworzenia i zarządzania łańcuchami, z których każdy ma inne zastosowanie. Poniżej przedstawiamy ich główne cechy i różnice:
| Moduł | Opis | Typowe użycie |
|---|---|---|
SimpleChain |
Najprostszy typ łańcucha, w którym dane wejściowe są przekazywane bezpośrednio do pojedynczego modelu językowego. | Podstawowe zapytania do LLM, np. generowanie streszczeń |
LLMChain |
Łańcuch oparty na szablonie promptu i modelu językowym. Umożliwia parametryzację wejść przy użyciu zmiennych. | Dynamiczne tworzenie promptów, np. generowanie odpowiedzi na podstawie danych wejściowych użytkownika |
SequentialChain |
Łańcuchy, w których wyjście jednej operacji służy jako wejście do kolejnej. | Tworzenie wieloetapowych procesów, np. najpierw analiza, potem generowanie treści |
RouterChain |
Łańcuch decyzyjny, który kieruje zapytania do różnych pod-łańcuchów w zależności od treści. | Routowanie zapytań na podstawie ich kontekstu – np. inne podejście dla pytań technicznych i biznesowych |
MultiPromptChain |
Łańcuch wykorzystujący wiele szablonów promptów i wybierający najodpowiedniejszy w danym kontekście. | Dobór stylu odpowiedzi lub podejścia zależnie od typu zadania |
Przykładowa definicja prostego łańcucha przy użyciu LLMChain może wyglądać następująco:
from langchain import LLMChain, OpenAI, PromptTemplate
prompt = PromptTemplate(
input_variables=["temat"],
template="Napisz krótkie streszczenie na temat: {temat}"
)
llm_chain = LLMChain(
llm=OpenAI(temperature=0.7),
prompt=prompt
)
wynik = llm_chain.run("sztuczna inteligencja")
Dzięki modularnej strukturze, LangChain pozwala na elastyczne łączenie powyższych modułów, co umożliwia tworzenie zarówno prostych, jak i bardzo złożonych aplikacji opartych o modele językowe. Jeśli chcesz nauczyć się ich praktycznego wykorzystania, sprawdź Kurs LangChain w praktyce – budowa chatbotów, RAG i automatyzacja z AI.
Integracja z modelami językowymi (LLM)
LangChain zaprojektowano z myślą o efektywnej współpracy z różnorodnymi modelami językowymi (LLM – Large Language Models), zarówno open-source, jak i udostępnianymi komercyjnie przez dostawców API. Biblioteka udostępnia zunifikowany interfejs do komunikacji z modelami, ułatwiając ich zamianę, konfigurację oraz integrację w szerszym kontekście aplikacyjnym.
Istnieją dwa główne sposoby integrowania modeli językowych w LangChain:
- LLM – interfejs dla modeli generujących tekst (np. GPT-4, Claude, Cohere), obsługujących wejście w postaci promptu tekstowego i zwracających generowaną odpowiedź.
- ChatModel – wariant interfejsu dostosowany do modeli dialogowych (np. OpenAI ChatGPT), który operuje na strukturze wiadomości (system/user/assistant).
LangChain ułatwia przełączanie się pomiędzy tymi podejściami, zapewniając spójność i elastyczność. Poniższa tabela przedstawia ich podstawowe różnice:
| Typ modelu | Interfejs | Idealne zastosowania | Przykład |
|---|---|---|---|
| LLM | LLM |
Generowanie tekstu na podstawie prostych promptów | Streszczanie, tłumaczenie, generacja kodu |
| Model konwersacyjny | ChatModel |
Symulacja dialogu, chatboty, systemy interaktywne | Asystent AI, czaty wsparcia technicznego |
Przykład prostego użycia modelu OpenAI (w trybie czatu):
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
chat = ChatOpenAI(temperature=0.7)
response = chat([HumanMessage(content="Jaka jest stolica Francji?")])
print(response.content)
Dzięki modularnej strukturze LangChain umożliwia także integrację z lokalnymi modelami językowymi (np. LLaMA, Mistral) oraz zewnętrznymi dostawcami (np. Azure OpenAI, Anthropic), oferując szeroki wachlarz możliwości w zależności od potrzeb projektu. Na szkoleniach Cognity pokazujemy, jak poradzić sobie z tym zagadnieniem krok po kroku – poniżej przedstawiamy skrót tych metod.
Zarządzanie pamięcią i kontekstem
Jednym z kluczowych wyzwań przy projektowaniu aplikacji opartych na dużych modelach językowych (LLM) jest efektywne zarządzanie kontekstem rozmowy oraz przechowywanie istotnych informacji między kolejnymi wywołaniami modelu. W LangChain odpowiadają za to moduły związane z pamięcią (Memory) i zarządzaniem kontekstem, które umożliwiają tworzenie bardziej spójnych i „świadomych” interakcji z użytkownikiem.
LangChain dostarcza różne implementacje pamięci, które pozwalają na przechowywanie historii rozmowy, a także odtwarzanie istotnych danych z przeszłości bez konieczności ręcznego zarządzania całością kontekstu.
Rodzaje pamięci w LangChain
| Typ pamięci | Opis | Przykładowe zastosowanie |
|---|---|---|
ConversationBufferMemory |
Przechowuje pełną historię rozmowy w buforze tekstowym. | Proste chatboty, które muszą pamiętać całą konwersację. |
ConversationSummaryMemory |
Podsumowuje wcześniejsze wiadomości przy użyciu LLM, aby zmniejszyć rozmiar kontekstu. | Długie rozmowy, gdzie liczy się ekonomia tokenów. |
ConversationKGMemory |
Tworzy graf wiedzy na podstawie rozmowy, przechowując relacje między encjami. | Systemy eksperckie, gdzie ważne są relacje semantyczne. |
VectorStoreRetrieverMemory |
Przechowuje kontekst w wektorowym repozytorium i wyszukuje istotne dane. | Aplikacje z dużą ilością danych lub dokumentów. |
Przykład użycia pamięci w LangChain
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
from langchain.chat_models import ChatOpenAI
memory = ConversationBufferMemory()
llm = ChatOpenAI()
conversation = ConversationChain(llm=llm, memory=memory)
response = conversation.predict(input="Cześć! Jak masz na imię?")
print(response)
W powyższym przykładzie użyto bufora pamięciowego, który automatycznie zapisuje całą historię dialogu. Dzięki temu model może odpowiadać w sposób uwzględniający wcześniejsze wypowiedzi użytkownika, co zwiększa naturalność i spójność odpowiedzi.
Dobór odpowiedniego typu pamięci zależy od konkretnego przypadku użycia oraz wymagań dotyczących długości kontekstu, kosztów tokenów i charakterystyki interakcji. Jeśli chcesz pogłębić wiedzę na temat efektywnego zarządzania kontekstem i nowoczesnych technik pracy z LLM, sprawdź Kurs RAG w praktyce - nowoczesne techniki wydobywania i generowania danych.
Obsługa źródeł danych i narzędzi zewnętrznych
LangChain umożliwia integrację z różnorodnymi źródłami danych oraz zewnętrznymi narzędziami, co znacząco zwiększa elastyczność i zakres jego zastosowań. Dzięki tym możliwościom użytkownicy mogą wzbogacać modele językowe o aktualne dane, dostęp do dokumentacji, baz wiedzy, a także pozwalać agentom na wykonywanie działań w środowiskach zewnętrznych.
Źródła danych
LangChain obsługuje wiele typów źródeł danych, umożliwiając pobieranie i przetwarzanie informacji z materiałów tekstowych, dokumentów, baz danych, stron internetowych czy API. W tym zakresie często wykorzystywane są tzw. Loaders – obiekty odpowiedzialne za wczytywanie danych w określonym formacie.
- Pliki lokalne – np. PDF, CSV, TXT, DOCX
- Bazy danych – np. SQLite, PostgreSQL
- Źródła online – np. strony internetowe, dokumenty w chmurze
- API – zapytania do systemów zewnętrznych (REST, GraphQL)
Narzędzia zewnętrzne
LangChain umożliwia również integrację z narzędziami (tzw. tools), które mogą być wywoływane przez agentów w celu wykonania konkretnych zadań. Narzędzia te mogą odpowiadać za wyszukiwanie informacji, wykonywanie obliczeń, interakcję z plikami czy operacje na danych.
- Wyszukiwarki – np. narzędzia do wyszukiwania w Google lub Bing
- Obliczenia – np. Python REPL do wykonywania kodu
- Interfejsy API – np. połączenia z zewnętrznymi usługami
- Systemy plików – odczyt i zapis danych w czasie rzeczywistym
Porównanie: Źródła danych vs Narzędzia
| Cecha | Źródła danych | Narzędzia zewnętrzne |
|---|---|---|
| Zadanie | Dostarczanie danych wejściowych | Wykonywanie określonych akcji |
| Przykłady | PDFLoader, WebBaseLoader | GoogleSearchTool, PythonREPLTool |
| Typ integracji | Statyczna lub okresowa synchronizacja | Dynamika w czasie działania agenta |
Przykład użycia narzędzia
from langchain.agents import Tool
def calculator_tool(query: str) -> str:
return str(eval(query))
calc_tool = Tool(
name="Calculator",
func=calculator_tool,
description="Wykonuje działania matematyczne na wyrażeniach tekstowych."
)
Powyższy kod przedstawia prosty przykład zdefiniowania własnego narzędzia, które agent może użyć do wykonywania obliczeń matematycznych na podstawie tekstowego zapytania.
Przykład wykorzystania LangChain w aplikacji
LangChain znajduje zastosowanie w wielu rzeczywistych aplikacjach, które wykorzystują modele językowe do automatyzacji procesów, analizy danych lub interakcji z użytkownikiem. Jednym z typowych przykładów jest budowa inteligentnego asystenta do przeszukiwania dokumentacji technicznej lub baz wiedzy.
W tego typu aplikacji LangChain pozwala połączyć różne komponenty, takie jak model językowy, narzędzia do ekstrakcji danych oraz pamięć kontekstową, w spójny i łatwy do zarządzania system. Dzięki bibliotece możliwe jest stworzenie rozwiązania, które nie tylko generuje odpowiedzi na pytania użytkownika, ale również potrafi pobierać informacje z dokumentów, zapamiętywać poprzednie interakcje i dynamicznie dostosowywać swoje działanie w zależności od kontekstu rozmowy.
Inne przykłady zastosowań obejmują chatboty obsługujące klientów, systemy rekomendacyjne, automatyczne podsumowywanie treści, a także aplikacje wspierające programistów np. przez analizę kodu źródłowego i udzielanie sugestii. Dzięki modularnej budowie LangChain, tworzenie takich rozwiązań jest znacznie prostsze i bardziej elastyczne niż przy użyciu tradycyjnych podejść.
Podsumowanie i dalsze kierunki rozwoju
LangChain to dynamicznie rozwijająca się biblioteka zaprojektowana z myślą o budowaniu zaawansowanych aplikacji opartych na modelach językowych. Jej architektura umożliwia elastyczne łączenie komponentów, takich jak modele LLM, źródła danych, narzędzia zewnętrzne oraz mechanizmy zarządzania pamięcią i kontekstem, tworząc spójne i funkcjonalne systemy.
Kluczową zaletą LangChain jest modularność, która pozwala twórcom aplikacji na dopasowanie rozwiązań do konkretnych potrzeb biznesowych lub badawczych. Niezależnie od tego, czy chodzi o prostą integrację z popularnym modelem językowym, czy o stworzenie złożonego łańcucha przetwarzania informacji – LangChain oferuje odpowiednie mechanizmy i interfejsy.
W miarę jak rozwijają się możliwości modeli językowych, również LangChain poszerza swoje możliwości, dodając wsparcie dla nowych funkcji, integracji oraz optymalizacji działania. Coraz większy nacisk kładzie się także na aspekt efektywnego zarządzania pamięcią i kontekstem, co jest kluczowe dla skalowalnych i responsywnych aplikacji opartych na sztucznej inteligencji.
LangChain nie tylko upraszcza techniczne aspekty integracji modeli językowych, ale także otwiera drogę do tworzenia bardziej interaktywnych, kontekstowych i inteligentnych systemów, które mogą mieć realny wpływ na rozwój wielu dziedzin – od edukacji, przez medycynę, aż po przemysł i finanse. W Cognity łączymy teorię z praktyką – dlatego ten temat rozwijamy także w formie ćwiczeń na szkoleniach.