Zacznij terazZacznij za darmo

Przygotowanie dokumentów i wektorowej bazy danych

W kolejnych ćwiczeniach zbudujesz kompletny przepływ pracy RAG, który umożliwi prowadzenie rozmowy z dokumentem PDF zawierającym artykuł RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture autorstwa Balaguer i in. (2024). Proces ten polega na podzieleniu dokumentów na fragmenty, zapisaniu ich w wektorowej bazie danych, zdefiniowaniu promptu łączącego pobrane dokumenty z danymi wejściowymi użytkownika oraz zbudowaniu łańcucha wyszukiwania, dzięki któremu LLM uzyska dostęp do tych zewnętrznych danych.

W tym ćwiczeniu przygotujesz dokument do przechowywania i zaindeksujesz go w wektorowej bazie danych Chroma. Użyjesz RecursiveCharacterTextSplitter, aby podzielić PDF na fragmenty, a następnie zaindeksujesz je w bazie Chroma przy użyciu funkcji osadzeń (embeddings) OpenAI. Podobnie jak w pozostałych częściach kursu, nie musisz podawać własnego klucza API OpenAI.

Następujące klasy zostały już zaimportowane: RecursiveCharacterTextSplitter, Chroma oraz OpenAIEmbeddings.

To ćwiczenie jest częścią kursu

Tworzenie aplikacji LLM z LangChain

Zobacz kurs

Instrukcje do ćwiczenia

  • Podziel dokumenty zapisane w data za pomocą RecursiveCharacterTextSplitter z parametrem chunk_size równym 300 i chunk_overlap równym 50.
  • Użyj metody .from_documents(), aby osadzić dokumenty i zaindeksować je w wektorowej bazie danych Chroma przy użyciu dostarczonej funkcji osadzeń OpenAI.
  • Skonfiguruj vectorstore jako obiekt retrievera, który zwraca 3 najbardziej trafne dokumenty do użycia w końcowym łańcuchu RAG.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

loader = PyPDFLoader('rag_vs_fine_tuning.pdf')
data = loader.load()

# Split the document using RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
    chunk_size=____,
    chunk_overlap=____)
docs = splitter.split_documents(data) 

# Embed the documents in a persistent Chroma vector database
embedding_function = OpenAIEmbeddings(api_key='', model='text-embedding-3-small')
vectorstore = Chroma.____(
    docs,
    embedding=embedding_function,
    persist_directory=os.getcwd()
)

# Configure the vector store as a retriever
retriever = vectorstore.as_retriever(
    search_type="similarity",
    search_kwargs={"k": ____}
)
Edytuj i uruchom kod