0Pricing
Learn AI with Python · Lekcja

Wczytywanie, dzielenie i osadzanie dokumentów

PyPDFLoader, RecursiveCharacterTextSplitter, OpenAIEmbeddings, strategie osadzania.

Wczytywanie, dzielenie i osadzanie dokumentów to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Potok pozyskiwania danych RAG

Zanim LLM będzie mógł odpowiadać na podstawie dokumentów, należy je wczytać, podzielić i przekształcić w embeddingi. Ta lekcja omawia ten potok pozyskiwania danych, będący podstawą każdego systemu Retrieval-Augmented Generation.

pip install langchain-community pypdf langchain-openai

Wczytywanie pliku PDF

PyPDFLoader odczytuje plik PDF i zwraca listę obiektów Document, po jednym na stronę. Każdy obiekt Document zawiera page_content (tekst) oraz metadata (źródło i numer strony).

from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("handbook.pdf")
docs = loader.load()
print(len(docs), "pages")

Dlaczego dzielić dokumenty?

Całe strony często są zbyt duże, aby utworzyć dla nich embedding lub zmieścić je w prompcie. Dzielenie rozbija tekst na mniejsze fragmenty, dla których można poprawnie utworzyć embedding, a wyszukiwanie może zwrócić tylko odpowiedni fragment zamiast całej strony.

RecursiveCharacterTextSplitter

Zalecanym narzędziem do dzielenia jest RecursiveCharacterTextSplitter. Najpierw próbuje ono dzielić tekst według akapitów, następnie zdań, a na końcu słów. Dzięki temu fragmenty zachowują spójność znaczeniową, zamiast kończyć się w środku słowa.

from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)

chunk_size i chunk_overlap

chunk_size określa maksymalną liczbę znaków w jednym fragmencie, a chunk_overlap powtarza część tekstu między sąsiednimi fragmentami, aby nie utracić kontekstu na granicach. Podział 1000/200 jest często dobrym punktem wyjścia.

chunks = splitter.split_documents(docs)
print(len(chunks), "chunks")
print(chunks[0].page_content[:120])

Dostosowywanie rozmiaru fragmentów

Małe fragmenty zapewniają precyzyjne wyniki wyszukiwania, ale mogą pomijać otaczający kontekst. Duże fragmenty zachowują kontekst, lecz osłabiają trafność i zużywają więcej tokenów. Dobrym ustawieniem domyślnym jest nakładanie się fragmentów na poziomie 10–20% ich rozmiaru, aby połączyć sąsiednie granice.

Czym są embeddingi?

Embedding przekształca tekst w wektor liczb o stałej długości, który odzwierciedla jego znaczenie. Podobne teksty dają wektory położone blisko siebie. Dzięki temu można wyszukiwać na podstawie podobieństwa semantycznego, a nie słów kluczowych.

OpenAIEmbeddings

Embeddingi można tworzyć za pomocą OpenAIEmbeddings. Model text-embedding-3-small jest tani i skuteczny. embed_query tworzy embedding jednego ciągu znaków, a embed_documents — listy ciągów.

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vector = embeddings.embed_query("How do I reset my password?")
print(len(vector))  # 1536

Tworzenie embeddingów wsadowo

Wszystkie fragmenty można przekształcić w embeddingi jednocześnie. Każdy fragment stanie się wektorem, który później będzie można przechowywać w wektorowej bazie danych na potrzeby szybkiego wyszukiwania podobieństwa.

texts = [c.page_content for c in chunks]
vectors = embeddings.embed_documents(texts)
print(len(vectors), "vectors of dim", len(vectors[0]))

Szacowanie kosztu embeddingów

Embeddingi są rozliczane za token. Należy oszacować łączną liczbę tokenów we wszystkich fragmentach, a następnie pomnożyć ją przez cenę za 1K tokenów. Zliczenie tokenów przed utworzeniem embeddingów pozwala uniknąć niespodziewanych rachunków w przypadku dużych zbiorów dokumentów.

import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
total = sum(len(enc.encode(c.page_content)) for c in chunks)
price_per_1k = 0.00002
print("tokens:", total, "cost $:", total / 1000 * price_per_1k)

Podsumowanie potoku

Przepływ pozyskiwania danych wygląda następująco: wczytanie dokumentów, podział na nachodzące na siebie fragmenty, utworzenie embeddingu dla każdego fragmentu i — w następnej lekcji — ich zapisanie. Dobry podział na fragmenty oraz kontrola kosztów na tym etapie decydują o jakości i cenie całego systemu RAG.

Szybki test

Sprawdźcie Państwo swoją wiedzę na temat pozyskiwania danych.

Podsumowanie: wczytywanie, dzielenie i embeddingi

Używali Państwo PyPDFLoader do wczytywania dokumentów, RecursiveCharacterTextSplitter wraz z chunk_size i chunk_overlap do dzielenia ich na fragmenty oraz OpenAIEmbeddings do przekształcania fragmentów w wektory. Nauczyli się Państwo również szacować koszt embeddingów za token przed przetworzeniem dużego zbioru dokumentów.

Często zadawane pytania

Czy lekcja „Wczytywanie, dzielenie i osadzanie dokumentów” jest bezpłatna?

Tak — pełny tekst „Wczytywanie, dzielenie i osadzanie dokumentów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Co nauczysz się w „Wczytywanie, dzielenie i osadzanie dokumentów”?

PyPDFLoader, RecursiveCharacterTextSplitter, OpenAIEmbeddings, strategie osadzania. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?

Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wczytywanie, dzielenie i osadzanie dokumentów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?

Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Architektura LangChain i LCEL
  2. Wczytywanie, dzielenie i osadzanie dokumentów
  3. Bazy wektorowe: Chroma i FAISS
  4. Tworzenie systemu pytań i odpowiedzi RAG od początku do końca
← Powrót do Learn AI with Python