LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

  • Teile die Dokumente in data mit einem rekursiven Zeichentrenner, wobei chunk_size auf 300 und chunk_overlap auf 50 gesetzt ist. Lasse das Argument separators 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={____}
)
Code bearbeiten und ausführen