Vorbereitung der Dokumente und der Vektordatenbank
In den nächsten Übungen wirst du einen kompletten RAG-Workflow erstellen, um mit einem PDF-Dokument zu chatten, das den folgenden Artikel enthält: RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture von Balaguer et al. (2024). Das geht so: Die Dokumente müssen in Chunks aufgeteilt und in einer Vektordatenbank gespeichert werden. Dann wird ein Prompt definiert, um die gefundenen Dokumente und die Eingaben des Nutzers zu verbinden. Abschließend ist eine Abrufkette zu erstellen, über die das LLM auf diese externen Daten zugreifen kann.
In dieser Übung bereitest du das Dokument für die Speicherung vor und legst es in einer Chroma-Vektordatenbank ab. Du wirst einen RecursiveCharacterTextSplitter
verwenden, um die PDF-Datei in einzelne Chunks zu zerlegen, und fügst diese dann mithilfe einer OpenAI-Embeddings-Funktion in eine Chroma-Vektordatenbank ein. Wie auch im Rest des Kurses musst du keinen eigenen OpenAI-API-Schlüssel angeben.
Die folgenden Klassen wurden bereits für dich importiert: RecursiveCharacterTextSplitter
, Chroma
und OpenAIEmbeddings
.
Diese Übung ist Teil des Kurses
Entwickeln von LLM-Anwendungen mit LangChain
Anleitung zur Übung
- Teile die Dokumente in
data
mit einem rekursiven Zeichentrenner, wobeichunk_size
auf300
undchunk_overlap
auf50
gesetzt ist. Lasse das Argumentseparators
weg, da es standardmäßig auf["\n\n", "\n", " ", ""]
gesetzt ist. - Definiere ein OpenAI-Embedding-Modell mit dem Platzhalter
<OPENAI_API_TOKEN>
und benutze es, um die Dokumente in eine Chroma-Datenbank einzubetten und zu importieren. - Konfiguriere
vectorstore
als ein Retriever-Objekt, das die drei am besten geeigneten Dokumente für die endgültige RAG-Kette zurückgibt.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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={____}
)