IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Suddividi i documenti in data usando un RecursiveCharacterTextSplitter con chunk_size pari a 300 e chunk_overlap pari a 50.
  • 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 vectorstore in 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": ____}
)
Modifica ed esegui il codice