Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Splits de documenten in data met een RecursiveCharacterTextSplitter met een chunk_size van 300 en chunk_overlap van 50.
  • 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 vectorstore als 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": ____}
)
Code bewerken en uitvoeren