Anpassa dokumentdelning
Implementera avancerade tekniker för textdelning, inklusive semantisk chunking och hantering av kod eller specifika datastrukturer.
Anpassa dokumentdelning är en gratis lektion i LangChain / RAG / vektordatabaser på CoddyKit. Detta är lektion 3 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 LangChain / RAG / vektordatabaser, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i LangChain / RAG / vektordatabaser innehåller totalt 4 lektioner.
Varför anpassa textuppdelningen?
När dokument förbereds för Retrieval Augmented Generation (RAG) är det avgörande hur de delas upp i chunkar. Grundläggande textsplitters är en bra början, men de räcker ofta inte till för komplext eller starkt strukturerat innehåll.
Genom att anpassa strategin för textuppdelning kan ni bevara kontextens sammanhang bättre, vilket leder till mer träffsäkra hämtningar och bättre svar från LLM:er.
Anpassa teckenbaserade splitters
LangChains CharacterTextSplitter är enkel men kraftfull. Ni kan anpassa den genom att ange specifika separator-tecken. Det är användbart när dokumenten har unika avgränsare som ni vill respektera, till exempel en specifik tagg eller ett unikt mönster för radbrytningar.
Genom att definiera egna avgränsare kan ni säkerställa logiska uppdelningar i stället för godtyckliga teckenantal.
from langchain.text_splitter import CharacterTextSplitter
class Main:
def run(self):
text = "Chapter 1: Intro.Section 1.1: Basics.Section 1.2: Advanced."
# Custom separator is "."
splitter = CharacterTextSplitter(
separator=".",
chunk_size=20,
chunk_overlap=0
)
chunks = splitter.split_text(text)
for i, chunk in enumerate(chunks):
print(f"Chunk {i+1}: {chunk}")
if __name__ == "__main__":
Main().run()Förfina rekursiva splitters
RecursiveCharacterTextSplitter försöker dela upp text med hjälp av en lista med avgränsare i ordning, samtidigt som den försöker hålla chunkarna så stora som möjligt. Ni kan anpassa listan så att den motsvarar dokumentets inneboende struktur.
Ni kan till exempel prioritera uppdelning vid dubbla radbrytningar, därefter enkla radbrytningar, sedan mellanslag och slutligen tecken.
from langchain.text_splitter import RecursiveCharacterTextSplitter
class Main:
def run(self):
text = "Hello there!\n\nThis is a paragraph.\nAnd this is another sentence."
# Custom list of separators
splitter = RecursiveCharacterTextSplitter(
separators=["\n\n", "\n", " ", ""],
chunk_size=40,
chunk_overlap=0
)
chunks = splitter.split_text(text)
for i, chunk in enumerate(chunks):
print(f"Chunk {i+1}: {chunk}")
if __name__ == "__main__":
Main().run()Introduktion till semantisk chunkning
Tänk om vi kunde dela upp text utifrån dess innebörd, i stället för att enbart förlita oss på teckenantal eller avgränsare?
Semantisk chunkning syftar till att skapa chunkar som representerar fullständiga och sammanhängande idéer eller ämnen. Metoden hjälper till att förhindra att viktiga begrepp godtyckligt delas upp mellan olika chunkar, vilket ofta händer med splitters som använder fast storlek eller enkel teckenbaserad uppdelning.
Så fungerar semantisk chunkning
Semantisk chunkning omfattar vanligtvis några steg:
- Skapa embeddingar för meningar: Varje mening eller liten textenhet omvandlas till en vektorembedding.
- Mäta likhet: Den semantiska likheten mellan intilliggande meningar eller enheter mäts med hjälp av deras embeddingar.
- Identifiera brytpunkter: Chunkar skapas där den semantiska likheten minskar betydligt, vilket visar på ett ämnesbyte eller en förändring i diskussionen.
LangChain har ingen enskild inbyggd ”semantisk splitter”, men detta är ett mönster som ni kan bygga med embeddingmodeller och anpassad logik.
Specialiserade kodsplitters
Kod har en unik struktur med funktioner, klasser, kommentarer och specifik syntax. Generiska textsplitters delar ofta upp kod på olämpliga ställen, vilket gör de resulterande chunkarna svåra att förstå eller använda som kontext för en LLM.
LangChain erbjuder specialiserade splitters för olika programmeringsspråk. Dessa splitters förstår språkets syntax och ser till att chunkarna är syntaktiskt meningsfulla, till exempel genom att hålla ihop en hel funktion eller klass.
Demonstration av Python-kodsplitter
Med metoden RecursiveCharacterTextSplitter.from_language kan ni ange ett programmeringsspråk. Därefter används språkspecifika avgränsare (till exempel klassdefinitioner och funktionsdefinitioner) för att skapa mer intelligenta chunkar.
Detta säkerställer att kodsnuttar som skickas till en LLM blir mer sammanhängande.
from langchain.text_splitter import RecursiveCharacterTextSplitter, Language
class Main:
def run(self):
python_code = """
def calculate_sum(a, b):
# This function adds two numbers
return a + b
class MyCalculator:
def __init__(self):
self.result = 0
def add(self, num):
self.result += num
if __name__ == "__main__":
total = calculate_sum(5, 3)
print(f"Sum: {total}")
calc = MyCalculator()
calc.add(10)
print(f"Calc result: {calc.result}")
"""
# Initialize splitter for Python code
python_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.PYTHON,
chunk_size=100, # Adjust chunk size to see more splits
chunk_overlap=0
)
docs = python_splitter.create_documents([python_code])
for i, doc in enumerate(docs):
print(f"--- Chunk {i+1} ---")
print(doc.page_content)
if __name__ == "__main__":
Main().run()Bortom kod: andra strukturer
LangChain erbjuder även specialiserade splitters för andra strukturerade format, inte bara kod:
MarkdownTextSplitter: Förstår Markdown-syntax (rubriker, kodblock och listor) för att skapa logiskt grupperade chunkar.LatexTextSplitter: Känner igen LaTeX-avsnitt, kapitel och miljöer och bevarar dokumentets akademiska struktur.
Dessa specialiserade splitters är ovärderliga vid bearbetning av dokument där själva formateringen förmedlar viktig strukturell information.
Skapa anpassad splitterlogik
För helt unika dokumentstrukturer eller proprietära dataformat kan ni behöva implementera en egen logik för uppdelning. LangChain låter er:
- Ärva från
TextSplitter: Skapa en ny klass som ärver frånTextSplitteroch åsidosätter dess metoder för att definiera anpassade regler för uppdelning. - Skriva en anpassad funktion: Utveckla en funktion som tar emot er text och returnerar en lista med chunkar utifrån era specifika krav på parsning.
Detta tillvägagångssätt ger maximal flexibilitet vid hantering av komplexa regex-mönster, anpassade avgränsare eller nästlade strukturer som är unika för ert dataset.
Kontrollera era kunskaper
Ni har lärt er om olika sätt att anpassa textuppdelning för olika dokumenttyper. Låt oss testa era kunskaper.
Sammanfattning: anpassad uppdelning
I den här lektionen utforskade vi hur man går längre än grundläggande textuppdelning för att hantera olika och komplexa dokumenttyper mer effektivt:
- Vi anpassade splitters för Character och Recursive Character med specifika listor över avgränsare.
- Vi introducerade begreppet semantisk chunkning för betydelsebaserad uppdelning.
- Vi lärde oss om språkspecifika splitters för kod (till exempel Python och Java) och andra strukturerade format som Markdown och LaTeX.
- Slutligen diskuterade vi kraften och flexibiliteten i att skapa helt anpassad uppdelningslogik för unika data.
Att behärska anpassade uppdelningsstrategier är ett avgörande steg när ni bygger träffsäkra och robusta RAG-applikationer.
Lär dig LangChain / RAG / vektordatabaser 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
- 48
Vanliga frågor
Är lektionen ”Anpassa dokumentdelning” gratis?
Ja – hela texten till ”Anpassa dokumentdelning” 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 LangChain / RAG / vektordatabaser, kan Ni uppgradera till CoddyKit PRO. Kursen i LangChain / RAG / vektordatabaser innehåller totalt 4 lektioner.
Vad lär jag mig i ”Anpassa dokumentdelning”?
Implementera avancerade tekniker för textdelning, inklusive semantisk chunking och hantering av kod eller specifika datastrukturer. Ni övar på LangChain / RAG / vektordatabaser 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 LangChain / RAG / vektordatabaser?
Du behöver inga förkunskaper. Utbildningen i LangChain / RAG / vektordatabaser 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 3 av 4.
Hur lång tid tar lektionen ”Anpassa dokumentdelning”?
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 LangChain / RAG / vektordatabaser-lektionen?
Ja. Varje LangChain / RAG / vektordatabaser-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
- Läsa in olika dokumenttyper
- Förstå strategier för textdelning
- Anpassa dokumentdelning
- Hantera dokumentmetadata och filtrering