Textdelare och embeddings
Bemästra tekniker för att dela upp stora dokument i hanterbara delar och generera numeriska embeddings för semantisk sökning.
Textdelare och embeddings är en gratis lektion i AI-agenter med LangChain och autonoma arbetsflöden på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för AI-agenter med LangChain och autonoma arbetsflöden, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i AI-agenter med LangChain och autonoma arbetsflöden innehåller totalt 4 lektioner.
Varför dela upp och bädda in text?
När ni arbetar med stora dokument uppstår ofta problem om ni skickar dem direkt till en Large Language Model (LLM). LLM:er har strikta gränser för hur mycket indata de kan ta emot, så kallade kontextfönster.
I den här lektionen lär ni er att förbereda stora texter för LLM:er med hjälp av två viktiga tekniker: textuppdelning och inbäddningar. Dessa är grundläggande för att bygga avancerade AI-agenter.
Problemet: långa dokument
Föreställ er att ni har ett PDF-dokument på 100 sidor. Om ni försöker ställa en fråga till en LLM om dokumentet kan ni inte bara skicka hela dokumentet.
- Begränsningar i kontextfönstret: LLM:er kan bara bearbeta en viss mängd text åt gången (till exempel 4 000 till 128 000 token).
- Kostnad: Längre indata innebär högre API-kostnader.
- Relevans: Om kontextfönstret fylls med irrelevant information kan LLM:en "glömma" de viktiga delarna.
Textuppdelning löser detta genom att dela upp dokument i mindre, hanterbara delar.
Introduktion till textuppdelare
LangChain tillhandahåller olika textuppdelare för att effektivt dela upp dokument. Målet är att hålla semantiskt relaterade textdelar tillsammans och samtidigt respektera storleksgränser.
I stället för att bara klippa texten efter godtyckliga teckenantal försöker smarta uppdelare dela texten vid logiska gränser, till exempel stycken eller meningar.
En vanlig och mångsidig uppdelare är RecursiveCharacterTextSplitter.
Rekursiv teckenbaserad textuppdelare
RecursiveCharacterTextSplitter är ett kraftfullt verktyg. Det försöker dela upp text med hjälp av en lista med tecken och testar dem i tur och ordning tills delarna är tillräckligt små.
- Först försöker den dela vid
\n\n(dubbla radbrytningar för stycken). - Om delarna fortfarande är för stora försöker den med
\n(enkel radbrytning för rader). - Därefter används blanksteg och slutligen enskilda tecken.
Detta rekursiva tillvägagångssätt hjälper till att bevara den semantiska sammanhållningen.
Kod: grundläggande demonstration av uppdelning
Nu ska vi se hur RecursiveCharacterTextSplitter fungerar. Vi delar upp en kort berättelse i delar.
from langchain_text_splitters import RecursiveCharacterTextSplitter
story = (
"Alice was beginning to get very tired of sitting by her sister on the bank, "
"and of having nothing to do: once or twice she had peeped into the book her "
"sister was reading, but it had no pictures or conversations in it, 'and what "
"is the use of a book,' thought Alice 'without pictures or conversation?'"
"So she was considering in her own mind (as well as she could, for the hot "
"day made her feel very sleepy and stupid), whether the pleasure of making "
"a daisy-chain would be worth the trouble of getting up and picking the "
"daisies, when suddenly a White Rabbit with pink eyes ran close by her."
)
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=100,
chunk_overlap=0
)
chunks = text_splitter.split_text(story)
for i, chunk in enumerate(chunks):
print(f"Chunk {i+1}: {chunk}\n")Förklaring av delstorlek och överlappning
Två viktiga parametrar för textuppdelning är chunk_size och chunk_overlap:
- Delstorlek: Det maximala antalet tecken (eller token, beroende på uppdelaren) i varje del. Välj en storlek som ryms inom LLM:ens kontextfönster.
- Överlappning mellan delar: Anger hur många tecken (eller token) som ska överlappa mellan på varandra följande delar. Överlappning hjälper till att bevara kontexten mellan uppdelningarna, så att viktig information inte går förlorad vid delarnas gränser.
Att hitta rätt balans för dessa parametrar är avgörande för effektiv informationshämtning.
Kod: uppdelning med överlappning
Nu ändrar vi vårt tidigare exempel så att det använder chunk_overlap. Lägg märke till hur delar av texten upprepas i intilliggande delar, vilket skapar kontinuitet.
from langchain_text_splitters import RecursiveCharacterTextSplitter
story = (
"Alice was beginning to get very tired of sitting by her sister on the bank, "
"and of having nothing to do: once or twice she had peeped into the book her "
"sister was reading, but it had no pictures or conversations in it, 'and what "
"is the use of a book,' thought Alice 'without pictures or conversation?'"
"So she was considering in her own mind (as well as she could, for the hot "
"day made her feel very sleepy and stupid), whether the pleasure of making "
"a daisy-chain would be worth the trouble of getting up and picking the "
"daisies, when suddenly a White Rabbit with pink eyes ran close by her."
)
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=100,
chunk_overlap=20 # Added overlap
)
chunks = text_splitter.split_text(story)
for i, chunk in enumerate(chunks):
print(f"Chunk {i+1}: {chunk}\n")Vad är textinbäddningar?
När ni har delat upp dokumenten, hur hittar ni då de delar som är mest relevanta för en användares fråga? Det är här textinbäddningar kommer in i bilden.
- En inbäddning är en numerisk representation (en vektor) av text.
- Texter med liknande betydelse har inbäddningar som ligger "närmare" varandra i ett högdimensionellt rum.
- Det gör att vi kan utföra semantisk sökning: hitta delar som begreppsmässigt liknar en fråga, inte bara delar som innehåller samma nyckelord.
Inbäddningar är grunden för Retrieval Augmented Generation (RAG).
Skapa inbäddningar med LangChain
LangChain gör det enkelt att skapa inbäddningar med hjälp av olika modeller. Ni arbetar med ett Embeddings-objekt, som döljer detaljerna kring den underliggande modellen.
Populära inbäddningsmodeller inkluderar modeller från OpenAI, Hugging Face och Cohere samt många alternativ med öppen källkod, till exempel `all-MiniLM-L6-v2`.
Vanligtvis initierar ni en inbäddningsmodell och anropar sedan dess embed_query() för en enskild text eller embed_documents() för en lista med delar.
Kod: skapa inbäddningar
Så här skapar ni en inbäddning för en enkel text med OpenAI:s inbäddningsmodell. Kom ihåg att ni behöver en OpenAI API-nyckel för att detta ska fungera.
import os
# Set your OpenAI API key as an environment variable
# os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY"
from langchain_openai import OpenAIEmbeddings
# Initialize the embedding model
# Requires OPENAI_API_KEY env var or direct pass
embeddings_model = OpenAIEmbeddings()
text_to_embed = "The quick brown fox jumps over the lazy dog."
# Generate the embedding vector
embedding_vector = embeddings_model.embed_query(text_to_embed)
print(f"Original Text: '{text_to_embed}'")
print(f"Embedding Vector (first 5 values): {embedding_vector[:5]}...")
print(f"Vector Dimension: {len(embedding_vector)}")Snabbtest: uppdelning och inbäddningar
Fundera över följande påståenden om textuppdelning och inbäddningar:
Sammanfattning: uppdelning och inbäddning för RAG
Ni har lärt er två grundläggande tekniker för att hantera stora dokument i AI-agenter:
- Textuppdelning: Att dela upp stora texter i mindre, hanterbara delar med verktyg som
RecursiveCharacterTextSplitter, styrt avchunk_sizeochchunk_overlap. - Inbäddningar: Att omvandla textdelar till numeriska vektorer med hjälp av inbäddningsmodeller (till exempel
OpenAIEmbeddings) för att möjliggöra semantisk likhetssökning.
Dessa tekniker är avgörande för att bygga effektiva system för Retrieval Augmented Generation (RAG), så att era agenter intelligent kan hitta och använda relevant information från omfattande kunskapsbaser.
Lär dig AI-agenter med LangChain och autonoma arbetsflöden med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 50
Vanliga frågor
Är lektionen ”Textdelare och embeddings” gratis?
Ja – hela texten till ”Textdelare och embeddings” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i AI-agenter med LangChain och autonoma arbetsflöden, kan Ni uppgradera till CoddyKit PRO. Kursen i AI-agenter med LangChain och autonoma arbetsflöden innehåller totalt 4 lektioner.
Vad lär jag mig i ”Textdelare och embeddings”?
Bemästra tekniker för att dela upp stora dokument i hanterbara delar och generera numeriska embeddings för semantisk sökning. Ni övar på AI-agenter med LangChain och autonoma arbetsflöden med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig AI-agenter med LangChain och autonoma arbetsflöden?
Du behöver inga förkunskaper. Utbildningen i AI-agenter med LangChain och autonoma arbetsflöden på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Textdelare och embeddings”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här AI-agenter med LangChain och autonoma arbetsflöden-lektionen?
Ja. Varje AI-agenter med LangChain och autonoma arbetsflöden-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Dokumentläsare förklarade
- Textdelare och embeddings
- Vektorlager för hämtning
- Retrievers och kontextuell komprimering