Håndtere komplekse dokumentstrukturer
Implementer strategier for effektiv oppsplitting og gjenfinning av informasjon fra komplekse dokumenter, for eksempel tabeller eller nestede seksjoner.
Håndtere komplekse dokumentstrukturer er en gratis leksjon i LLM-applikasjoner i produksjon (RAG + vektordatabase + hurtigbufring) 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 LLM-applikasjoner i produksjon (RAG + vektordatabase + hurtigbufring), og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i LLM-applikasjoner i produksjon (RAG + vektordatabase + hurtigbufring) inneholder totalt 4 leksjoner.
Utover enkel tekst: Komplekse dokumenter
Når vi bygger RAG-systemer, arbeider vi ofte med dokumenter som ikke bare består av enkel, sammenhengende tekst. Tenk på finansrapporter, vitenskapelige artikler eller juridiske kontrakter.
Disse dokumentene inneholder ofte tabeller, nestede seksjoner (som kapitler og underkapitler) og andre intrikate strukturer. Standardmetoder for tekstoppsplitting har ofte problemer med slike strukturer, fordi de bryter opp konteksten og gjør informasjonsinnhentingen mindre effektiv.
Tabeller: En utfordring for RAG
Tabeller er et godt eksempel på komplekse strukturer. De presenterer data i et strukturert, rutenettlignende format der forholdet mellom rader og kolonner er avgjørende.
- Tapt kontekst: En enkel tegnbasert oppdeler kan dele en tabellrad i to og skille en verdi fra overskriften, slik at tekstbiten blir meningsløs.
- Dårlige embedding-er: Uten riktig kontekst representerer embedding-ene som genereres for tabellfragmenter, kanskje ikke dataene på en nøyaktig måte.
Strategier for tabellbevisst oppdeling
For å håndtere tabeller effektivt trenger vi spesifikke strategier:
- Uthenting: Identifiser og hent ut tabeller som separate enheter.
- Serialisering: Konverter tabeller til et mer LLM-vennlig tekstformat, for eksempel Markdown eller strukturert JSON, samtidig som relasjonene bevares.
- Sammenfatning: For svært store tabeller kan du generere et kort sammendrag som embeddes, med en kobling tilbake til hele tabellen.
Dette sikrer at LLM-en får hele den meningsfulle konteksten til tabellen.
Hente ut tabelldata (Python)
Her er et enkelt Python-eksempel som viser hvordan du kan behandle en tabell representert som en streng, og konvertere den til en mer strukturert liste med rader.
import csv
import io
def process_table_string(table_str):
# Use StringIO to treat the string as a file
f = io.StringIO(table_str)
reader = csv.reader(f, delimiter='|')
rows = []
for i, row in enumerate(reader):
# Strip whitespace and filter empty strings
cleaned_row = [item.strip() for item in row if item.strip()]
if cleaned_row and i > 0: # Skip header line
rows.append(cleaned_row)
return rows
if __name__ == "__main__":
data = """
Name | Age | City
-------|-----|--------
Alice | 30 | New York
Bob | 24 | London
Charlie| 35 | Paris
"""
processed_data = process_table_string(data)
for row in processed_data:
print(row)Forstå nestede dokumenter
Dokumenter har ofte et naturlig hierarki. Tenk på en bok med kapitler, seksjoner og underseksjoner. Hver del bygger videre på den forrige, og betydningen er ofte knyttet til den overordnede konteksten.
Standard oppdeling kan skille en underseksjon fra overskriften til hovedseksjonen, slik at den hentede tekstbiten blir mindre informativ eller til og med forvirrende uten riktig kontekst.
Bevare dokumenthierarkiet
For å håndtere nestede strukturer effektivt bruker vi hierarkisk oppdeling:
- Semantiske grenser: I stedet for faste tegngrenser deler vi opp teksten basert på logiske inndelinger, for eksempel overskrifter (H1, H2, H3).
- Overordnet kontekst: Inkluder tittelen på den overordnede seksjonen i den underordnede tekstbiten. En tekstbit fra «Section 2.1» kan for eksempel begynne med «Chapter 2: Introduction - Section 2.1: Subtopic».
- Metadata: Lagre hele banen eller hierarkinivået i metadataene til tekstbiten.
Dele opp etter seksjoner (Python)
Dette Python-eksempelet viser en enkel måte å dele et dokument opp i tekstbiter basert på overskrifter i Markdown-stil. Hver tekstbit vil inneholde innholdet i én seksjon.
def chunk_by_headings(document_text):
lines = document_text.split('\n')
chunks = []
current_chunk = []
current_heading = ""
for line in lines:
if line.startswith('# '): # Main heading
if current_chunk:
chunks.append({'heading': current_heading, 'content': '\n'.join(current_chunk).strip()})
current_heading = line.strip()
current_chunk = [line]
elif line.startswith('## '):
# Sub-heading, can be part of the current chunk, or signal a new sub-chunk
# For simplicity, we'll just add it to the current chunk content here
# More advanced logic might create nested chunks or separate entries
current_chunk.append(line)
else:
current_chunk.append(line)
if current_chunk:
chunks.append({'heading': current_heading, 'content': '\n'.join(current_chunk).strip()})
return chunks
if __name__ == "__main__":
doc = """
# Chapter 1: Introduction
This is the introduction text.
## Section 1.1: Background
More details about the background.
# Chapter 2: Methods
Here we describe the methods used.
## Section 2.1: Data Collection
How data was collected.
"""
document_chunks = chunk_by_headings(doc)
for i, chunk in enumerate(document_chunks):
print(f"--- Chunk {i+1} ---")
print(f"Heading: {chunk['heading']}")
print(f"Content snippet: {chunk['content'][:50]}...")
print()Metadata for rikere kontekst
Metadata er ekstra informasjon som er knyttet til en tekstbit, og som beskriver den uten å være en del av tekstbitens hovedtekst. Metadata er svært nyttig for komplekse dokumenter.
- Dokumenttittel: Hvilket kildedokument kommer denne tekstbiten fra?
- Sidenummer: Hvor i originaldokumentet ble dette funnet?
- Overordnet seksjon/kapittel: Hvilken større kontekst hører denne tekstbiten til?
- Tabell-ID: Hvis det er en tabell, hvilken tabell er det?
Metadata gjør det mulig å filtrere målrettet under informasjonsinnhentingen og gir LLM-en verdifull kontekst.
Utover vektorhenting med én vektor
For svært komplekst innhold er det ikke sikkert at enkle tekstbiter er tilstrekkelig. Flervektorhenting er en avansert teknikk der du oppretter ulike typer embedding-er for det samme innholdet.
Du kan for eksempel ha et kort og konsist sammendrag av en tabell som er embedda for rask henting, mens hele det detaljerte tabellinnholdet lagres separat. RAG-systemet henter sammendraget, og hvis det er relevant, henter det deretter hele tabellen for å sende den til LLM-en.
Test av komplekse dokumenter
Du har lært om ulike strategier for håndtering av komplekse dokumentsstrukturer i RAG. La oss teste forståelsen din.
Oppsummering: Mestre komplekse dokumenter
Gratulerer! Du har utforsket viktige strategier for håndtering av komplekse dokumentsstrukturer i RAG.
- Vi så hvordan tabeller kan miste kontekst ved standard oppdeling i tekstbiter, og lærte å trekke dem ut og serialisere dem.
- Vi diskuterte nestede dokumenter og hvor viktig hierarkisk oppdeling er for å bevare relasjoner.
- Til slutt fremhevet vi hvordan metadata kan berike tekstbiter og muliggjøre mer presis gjenfinning.
Ved å bruke disse teknikkene kan RAG-systemet ditt gi mer nøyaktige og kontekstrelevante svar, selv fra de mest komplekse dokumentene!
Lær deg LLM-applikasjoner i produksjon (RAG + vektordatabase + hurtigbufring) 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 «Håndtere komplekse dokumentstrukturer» gratis?
Ja – hele teksten i «Håndtere komplekse dokumentstrukturer» 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 LLM-applikasjoner i produksjon (RAG + vektordatabase + hurtigbufring)-kurset, kan du oppgradere til CoddyKit PRO. Kurset i LLM-applikasjoner i produksjon (RAG + vektordatabase + hurtigbufring) inneholder totalt 4 leksjoner.
Hva lærer jeg i «Håndtere komplekse dokumentstrukturer»?
Implementer strategier for effektiv oppsplitting og gjenfinning av informasjon fra komplekse dokumenter, for eksempel tabeller eller nestede seksjoner. Du øver på LLM-applikasjoner i produksjon (RAG + vektordatabase + hurtigbufring) 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 LLM-applikasjoner i produksjon (RAG + vektordatabase + hurtigbufring)?
Ingen tidligere erfaring er nødvendig. LLM-applikasjoner i produksjon (RAG + vektordatabase + hurtigbufring) 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 «Håndtere komplekse dokumentstrukturer»?
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 LLM-applikasjoner i produksjon (RAG + vektordatabase + hurtigbufring)-leksjonen?
Ja. Alle LLM-applikasjoner i produksjon (RAG + vektordatabase + hurtigbufring)-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
- Omskriving av spørringer og omrangering
- RAG-mønstre i flere trinn og med agenter
- Håndtere komplekse dokumentstrukturer
- Selvspørring og kildehenvisninger