Lagring og uthenting av embeddinger
Implementer prosessen med å generere embeddinger fra dokumentbiter og lagre dem i en vektordatabase for senere uthenting.
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:
- Last inn og del opp: Les inn ubehandlede dokumenter og del dem opp i utdrag.
- Opprett embedding: Konverter hvert tekstutdrag til en embedding-vektor ved hjelp av en embedding-modell.
- Lagre: Lagre disse embedding-vektorene (sammen med de opprinnelige tekstutdragene og metadataene) i en vektordatabase.
- 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!
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
- Forstå tekstembeddinger
- Introduksjon til vektordatabaser
- Lagring og uthenting av embeddinger
- Måle likhet mellom embeddinger