LangChain / RAG / vektordatabaser · leksjon

Lagring og uthenting av embeddinger

Implementer prosessen med å generere embeddinger fra dokumentbiter og lagre dem i en vektordatabase for senere uthenting.

Leksjon 3 av 411 trinn

Lagring og uthenting av embeddinger er en gratis leksjon i LangChain / RAG / vektordatabaser på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i LangChain / RAG / vektordatabaser, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i LangChain / RAG / vektordatabaser inneholder totalt 4 leksjoner.

Lagring og henting av embeddings

Velkommen til leksjon 3! I denne leksjonen skal vi knytte tekstutdrag sammen med vektordatabaser.

De lærer hvordan De genererer numeriske representasjoner (embeddings) fra dokumentutdragene Deres, og deretter lagrer dem effektivt i en vektordatabase for rask og nøyaktig henting.

Oppsummering: utdrag og embeddings

Før vi går videre, tar vi en rask oppsummering. Fra tidligere leksjoner vet De at:

  • Dokumentutdrag: Store dokumenter deles opp i mindre, håndterbare deler for å passe inn i LLM-enes kontekstvinduer og forbedre detaljnivået i hentingen.
  • Tekst-embeddings: Dette er numeriske vektorer som fanger opp den semantiske betydningen i tekst. Lignende tekster har lignende embeddings.

Målet vårt nå er å gjøre disse utdragene om til embeddings og gjøre dem søkbare!

Flyten for lagring og henting

Her er den typiske arbeidsflyten for å gjøre dataene Deres klare for RAG:

  1. Last inn og del opp: Les inn ubehandlede dokumenter og del dem opp i utdrag.
  2. Opprett embedding: Konverter hvert tekstutdrag til en embedding-vektor ved hjelp av en embedding-modell.
  3. Lagre: Lagre disse embedding-vektorene (sammen med de opprinnelige tekstutdragene og metadataene) i en vektordatabase.
  4. Hent: Når en bruker stiller et spørsmål, oppretter De en embedding av spørringen, søker i vektordatabasen etter lignende embeddings og henter de mest relevante utdragene.

Initialisere en embedding-modell

Først trenger vi en embedding-modell. LangChain tilbyr grensesnitt for mange modeller, inkludert modeller fra OpenAI, Cohere og lokale modeller som de fra Hugging Face.

I dette eksempelet bruker vi en lokal Hugging Face-modell for å unngå behovet for en API-nøkkel. Denne modellen gjør tekst om til en vektor med tall.

from langchain_community.embeddings import HuggingFaceEmbeddings

# Initialize a local embedding model
# This might download the model the first time
embeddings_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")

print("Embedding model initialized successfully!")

Generere embeddings fra tekst

Når embedding-modellen er klar, kan vi gi den tekstutdrag. Modellen vil deretter produsere en liste med tall (embedding-vektoren vår) for hvert utdrag.

Det er disse vektorene vektordatabasen bruker til å finne lignende informasjonsbiter.

from langchain_community.embeddings import HuggingFaceEmbeddings

embeddings_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")

texts_to_embed = [
    "The quick brown fox jumps over the lazy dog.",
    "A canine named Fido is taking a nap."
]

# Generate embeddings for the texts
vectors = embeddings_model.embed_documents(texts_to_embed)

print(f"Number of vectors generated: {len(vectors)}")
print(f"Dimension of each vector: {len(vectors[0])}")
# print(f"First vector (partial): {vectors[0][:5]}...") # Too long for mobile

Introduksjon til vektorlager

Et vektorlager er en spesialisert database som er utviklet for effektiv lagring av og spørring mot høydimensjonale vektorer. Det er laget for raskt å finne vektorer som er «nær» en gitt spørringsvektor.

Tenk på det som en supersnabb indeks for semantisk betydning. Når De søker, leter det ikke etter nøkkelord; det leter etter betydning.

LangChain støtter mange vektorlager, fra enkle lager i minnet som FAISS til robuste skytjenester som Pinecone eller Chroma.

Lagre embeddings med FAISS

La oss bruke FAISS, et vektorlager i minnet, for å demonstrere lagring. Vi tar tekstutdragene og embeddingene deres og legger dem til i FAISS. FAISS håndterer indekseringen for raskt søk.

I en virkelig applikasjon ville De først lastet inn utdrag fra dokumenter, deretter opprettet embeddings av dem og til slutt lagret dem. Her oppretter vi enkle dokumenter direkte.

from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_core.documents import Document

embeddings_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")

# Create some example documents (text chunks with optional metadata)
documents = [
    Document(page_content="The capital of France is Paris.", metadata={"source": "geo"}),
    Document(page_content="Eiffel Tower is a landmark in Paris.", metadata={"source": "tourism"}),
    Document(page_content="Python is a popular programming language.", metadata={"source": "tech"}),
    Document(page_content="Coding with Python is fun and versatile.", metadata={"source": "tech"})
]

# Create a FAISS vector store from the documents and embeddings model
vectorstore = FAISS.from_documents(documents, embeddings_model)

print("Documents successfully stored in FAISS vector store!")

Utføre et likhetssøk

Nå som dokumentene våre er gjort om til embeddings og lagret, kan vi spørre vektorlaget for å finne dokumentene som semantisk ligner mest på spørsmålet vårt.

Vektorlaget oppretter en embedding av spørringen Deres, sammenligner vektoren med alle lagrede vektorer og returnerer de «k» beste (for eksempel de 4 beste) dokumentene med størst likhet.

from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_core.documents import Document

embeddings_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")

documents = [
    Document(page_content="The capital of France is Paris.", metadata={"source": "geo"}),
    Document(page_content="Eiffel Tower is a landmark in Paris.", metadata={"source": "tourism"}),
    Document(page_content="Python is a popular programming language.", metadata={"source": "tech"}),
    Document(page_content="Coding with Python is fun and versatile.", metadata={"source": "tech"})
]
vectorstore = FAISS.from_documents(documents, embeddings_model)

query = "What is the main city of France?"

# Perform a similarity search
retrieved_docs = vectorstore.similarity_search(query, k=2)

print(f"Query: '{query}'\n")
print("Top 2 retrieved documents:")
for i, doc in enumerate(retrieved_docs):
    print(f"{i+1}. Content: '{doc.page_content}' (Source: {doc.metadata['source']})")

Metadata er Deres venn

Legg merke til at vi inkluderte metadata sammen med dokumentene i det forrige eksempelet. Dette er utrolig kraftig!

  • Filtrering: De kan filtrere søk basert på metadata (for eksempel bare søke i dokumenter fra en bestemt forfatter eller dato).
  • Kontekst: Metadata hjelper LLM-en med å forstå kilden til og relevansen av det hentede utdraget, noe som forbedrer kvaliteten på svaret.
  • Feilsøking: Det blir enklere å spore hvor informasjonen kom fra.

Vurder alltid hvilke metadata det er nyttig å lagre sammen med tekstutdragene Deres.

Rask kontroll

De har lært om trinnene for å klargjøre dataene Deres for et RAG-system. Hva er riktig rekkefølge for lagring og henting av informasjon?

Oppsummering: lagring og henting

Godt jobbet! I denne leksjonen har De fått kontroll på de viktigste trinnene for å klargjøre dataene Deres for et RAG-system:

  • Initialisere en embedding-modell for å konvertere tekst til numeriske vektorer.
  • Forstå rollen til et vektorlager for effektiv lagring og likhetssøk.
  • Implementere prosessen med å generere embeddings og lagre dem (for eksempel ved hjelp av FAISS).
  • Utføre likhetssøk for å hente relevante dokumentutdrag basert på en spørring.
  • Forstå betydningen av metadata for rikere kontekst og filtrering.

Disse ferdighetene er grunnleggende for å bygge effektive RAG-applikasjoner!

Gratis å komme i gang

Lær deg LangChain / RAG / vektordatabaser med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Lagring og uthenting av embeddinger» gratis?

Ja – hele teksten i «Lagring og uthenting av embeddinger» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av LangChain / RAG / vektordatabaser-kurset, kan du oppgradere til CoddyKit PRO. Kurset i LangChain / RAG / vektordatabaser inneholder totalt 4 leksjoner.

Hva lærer jeg i «Lagring og uthenting av embeddinger»?

Implementer prosessen med å generere embeddinger fra dokumentbiter og lagre dem i en vektordatabase for senere uthenting. Du øver på LangChain / RAG / vektordatabaser med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med LangChain / RAG / vektordatabaser?

Ingen tidligere erfaring er nødvendig. LangChain / RAG / vektordatabaser på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Lagring og uthenting av embeddinger»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne LangChain / RAG / vektordatabaser-leksjonen?

Ja. Alle LangChain / RAG / vektordatabaser-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Forstå tekstembeddinger
  2. Introduksjon til vektordatabaser
  3. Lagring og uthenting av embeddinger
  4. Måle likhet mellom embeddinger
← Tilbake til LangChain / RAG / vektordatabaser