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) zu laden. 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
<Kurs>Entwickeln von LLM-Anwendungen mit LangChain</Kurs>Übungsanweisungen
- Teile die Dokumente in „
data“ mit einem „RecursiveCharacterTextSplitter“ und einem „chunk_size“ von „300“ und „chunk_overlap“ von „50“. - Benutze die Methode „
.from_documents()“, um die Dokumente mit der bereitgestellten OpenAI-Embeddings-Funktion in eine Chroma-Vektordatenbank 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 praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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": ____}
)