Preparazione dei documenti e del database vettoriale
Nei prossimi esercizi, costruirai un workflow RAG completo per conversare con un documento PDF che contiene l'articolo RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture di Balaguer et al. (2024). Il processo funziona suddividendo i documenti in chunk, archiviandoli in un database vettoriale, definendo un prompt per collegare i documenti recuperati all'input dell'utente e creando una retrieval chain per consentire all'LLM di accedere a questi dati esterni.
In questo esercizio, preparerai il documento per l'archiviazione e lo importerai in un database vettoriale Chroma. Userai un RecursiveCharacterTextSplitter per suddividere il PDF in chunk e importerai i risultati in un database vettoriale Chroma usando una funzione di OpenAI per le embeddings. Come per il resto del corso, non devi fornire la tua OpenAI API key.
Le seguenti classi sono già state importate per te: RecursiveCharacterTextSplitter, Chroma e OpenAIEmbeddings.
Questo esercizio fa parte del corso
Sviluppare applicazioni LLM con LangChain
Istruzioni dell'esercizio
- Suddividi i documenti in
datausando unRecursiveCharacterTextSplitterconchunk_sizepari a300echunk_overlappari a50. - Usa il metodo
.from_documents()per generare le embeddings e importare i documenti in un database vettoriale Chroma con la funzione OpenAI embeddings fornita. - Configura
vectorstorein un oggetto retriever che restituisca i primi 3 documenti da usare nella RAG chain finale.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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": ____}
)