Kom igångKom igång gratis

Förbered dokumenten och vektordatabasen

Under de kommande övningarna bygger du ett komplett RAG-arbetsflöde för att kunna föra en konversation med ett PDF-dokument som innehåller artikeln RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture av Balaguer m.fl. (2024). Det fungerar genom att dela upp dokumenten i fragment, lagra dem i en vektordatabas, definiera en prompt som kopplar samman de hämtade dokumenten med användarens indata, och bygga en hämtningskedja som ger LLM:en tillgång till dessa externa data.

I den här övningen förbereder du dokumentet för lagring och matar in det i en Chroma-vektordatabas. Du använder en RecursiveCharacterTextSplitter för att dela upp PDF:en i fragment och matar sedan in dem i en Chroma-vektordatabas med hjälp av en OpenAI-inbäddningsfunktion. Precis som i resten av kursen behöver du inte ange en egen OpenAI API-nyckel.

Följande klasser har redan importerats: RecursiveCharacterTextSplitter, Chroma och OpenAIEmbeddings.

Den här övningen är en del av kursen

Utveckla LLM-applikationer med LangChain

Visa kurs

Övningsinstruktioner

  • Dela upp dokumenten i data med en RecursiveCharacterTextSplitter med chunk_size satt till 300 och chunk_overlap satt till 50.
  • Använd metoden .from_documents() för att bädda in och lagra dokumenten i en Chroma-vektordatabas med den tillhandahållna OpenAI-inbäddningsfunktionen.
  • Konfigurera vectorstore till ett hämtarobjekt som returnerar de 3 mest relevanta dokumenten för användning i den slutliga RAG-kedjan.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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": ____}
)
Redigera och kör kod