Vorbereiten der Dokumente und der Vektordatenbank
In den nächsten Übungen baust du einen vollständigen RAG Workflow auf, um eine Konversation mit einem PDF Dokument zu führen, das das Papier RAG VS Fine-Tuning enthält: Pipelines, Tradeoffs und eine Fallstudie zur Landwirtschaft von Balaguer et al. (2024). Dazu werden die Dokumente in Stücke zerlegt, in einer Vektordatenbank gespeichert, eine Eingabeaufforderung definiert, um die abgerufenen Dokumente mit den Benutzereingaben zu verbinden, und eine Abrufkette für LLM erstellt, um auf diese externen Daten zuzugreifen.
In dieser Übung bereitest du das Dokument für die Speicherung vor und gibst es in eine Chroma-Vektordatenbank ein. Du verwendest eine RecursiveCharacterTextSplitter
, um die PDF zu chunkern und sie mit einer OpenAI Embedding-Funktion in eine Chroma-Vektordatenbank einzubringen. Wie für den Rest des Kurses brauchst du keinen eigenen OpenAI-API-Schlüssel.
Die folgenden Klassen sind bereits für dich importiert worden: RecursiveCharacterTextSplitter
, Chroma
, und OpenAIEmbeddings
.
Diese Übung ist Teil des Kurses
Entwicklung von LLM Anwendungen mit LangChain
Anleitung zur Übung
- Teile die Dokumente in
data
mit einem rekursiven Zeichensplitter mit einemchunk_size
von300
undchunk_overlap
von50
auf; lass das Argumentseparators
weg, da es standardmäßig["\n\n", "\n", " ", ""]
ist. - Definiere ein OpenAI-Embedding-Modell mit dem bereitgestellten Platzhalter
<OPENAI_API_TOKEN>
und verwende es, um die Dokumente in eine Chroma-Datenbank einzubetten und zu importieren. - Konfiguriere
vectorstore
in ein Retriever-Objekt, das die Top 3 Dokumente für die Verwendung in der endgültigen RAG Kette zurückgibt.
Interaktive Übung zum Anfassen
Probieren Sie diese Übung aus, indem Sie diesen Beispielcode ausführen.
loader = PyPDFLoader('rag_vs_fine_tuning.pdf')
data = loader.load()
# Split the document using RecursiveCharacterTextSplitter
splitter = ____
docs = splitter.____(data)
# Embed the documents in a persistent Chroma vector database
embedding_function = OpenAIEmbeddings(api_key='', model='text-embedding-3-small')
vectorstore = Chroma.____(
____,
embedding=____,
persist_directory=os.getcwd()
)
# Configure the vector store as a retriever
retriever = ____(
search_type="similarity",
search_kwargs={____}
)