De documenten en de vector database voorbereiden
In de komende paar oefeningen bouw je een volledige RAG-workflow om in gesprek te gaan met een PDF van het paper RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture van Balaguer et al. (2024). Dit werkt door de documenten in stukken te splitsen, ze op te slaan in een vector database, een prompt te definiëren om de opgehaalde documenten te koppelen aan gebruikersinvoer, en een retrieval chain te bouwen zodat de LLM toegang heeft tot deze externe data.
In deze oefening bereid je het document voor op opslag en laad je het in een Chroma vector database. Je gebruikt een RecursiveCharacterTextSplitter om de PDF in stukken te verdelen en laadt deze in een Chroma vector database met een OpenAI-embedfuntie. Net als in de rest van de cursus hoef je je eigen OpenAI API-sleutel niet op te geven.
De volgende classes zijn al voor je geïmporteerd: RecursiveCharacterTextSplitter, Chroma en OpenAIEmbeddings.
Deze oefening maakt deel uit van de cursus
LLM-toepassingen ontwikkelen met LangChain
Oefeninstructies
- Splits de documenten in
datamet eenRecursiveCharacterTextSplittermet eenchunk_sizevan300enchunk_overlapvan50. - Gebruik de methode
.from_documents()om de documenten te embedden en in te laden in een Chroma vector database met de meegeleverde OpenAI-embedfuntie. - Configureer
vectorstoreals een retrieverobject dat de beste 3 documenten teruggeeft voor gebruik in de uiteindelijke RAG-keten.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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": ____}
)