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
datamit einem rekursiven Zeichentrenner, wobeichunk_sizeauf300undchunk_overlapauf50gesetzt ist. Lasse das Argumentseparatorsweg, 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
vectorstoreals 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={____}
)