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
Instrukcje do ćwiczenia
- Podziel dokumenty zapisane w
dataza pomocąRecursiveCharacterTextSplitterz parametremchunk_sizerównym300ichunk_overlaprównym50. - Użyj metody
.from_documents(), aby osadzić dokumenty i zaindeksować je w wektorowej bazie danych Chroma przy użyciu dostarczonej funkcji osadzeń OpenAI. - Skonfiguruj
vectorstorejako 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": ____}
)