LLM-applikationer i produktion (RAG + vektordatabase + caching) · Lektion

Håndtering af komplekse dokumentstrukturer

Implementer strategier til effektiv opdeling og hentning af information fra komplekse dokumenter som tabeller eller indlejrede sektioner.

Lektion 3 af 411 trin

Håndtering af komplekse dokumentstrukturer er en gratis LLM-applikationer i produktion (RAG + vektordatabase + caching)-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i LLM-applikationer i produktion (RAG + vektordatabase + caching), og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. LLM-applikationer i produktion (RAG + vektordatabase + caching)-kurset indeholder 4 lektioner i alt.

Ud over enkel tekst: Komplekse dokumenter

Når vi bygger RAG-systemer, arbejder vi ofte med dokumenter, der ikke kun består af almindelig, sammenhængende tekst. Tænk på finansielle rapporter, videnskabelige artikler eller juridiske kontrakter.

Disse dokumenter indeholder ofte tabeller, indlejrede sektioner (f.eks. kapitler og underkapitler) og andre indviklede strukturer. Standardmetoder til opdeling af tekst har ofte svært ved at håndtere dem, fordi de ødelægger konteksten og gør hentningen mindre effektiv.

Tabeller: En udfordring for RAG

Tabeller er et godt eksempel på komplekse strukturer. De præsenterer data i et struktureret, gitterlignende format, hvor forholdet mellem rækker og kolonner er afgørende.

  • Mistet kontekst: En enkel tegnbaseret opdelingsmetode kan dele en tabelrække, så en værdi adskilles fra sin overskrift og tekststykket dermed bliver meningsløst.
  • Dårlige embeddings: Uden den rette kontekst repræsenterer de genererede embeddings for tabeludsnit måske ikke dataene korrekt.

Strategier til tabelbevidst opdeling

For effektivt at håndtere tabeller har vi brug for specifikke strategier:

  • Udtræk: Identificer og udtræk tabeller som separate enheder.
  • Serialisering: Konverter tabeller til et mere LLM-venligt tekstformat som Markdown eller struktureret JSON, samtidig med at relationerne bevares.
  • Sammenfatning: Generer en kort opsummering, der kan embeddes, for meget store tabeller, og knyt den til den fulde tabel.

Det sikrer, at LLM'en modtager hele tabellens meningsfulde kontekst.

Udtræk af tabeldata (Python)

Her er et enkelt Python-eksempel, der viser, hvordan du kan behandle en tabel repræsenteret som en streng og konvertere den til en mere struktureret liste af rækker.

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å indlejrede dokumenter

Dokumenter har ofte et naturligt hierarki. Tænk på en bog med kapitler, sektioner og undersektioner. Hver del bygger videre på den forrige, og dens betydning er ofte knyttet til den overordnede kontekst.

En standardopdeling kan adskille en undersektion fra overskriften på dens hovedsektion, så det hentede tekststykke bliver mindre informativt eller ligefrem forvirrende uden den rette kontekst.

Bevar dokumenthierarkiet

For effektivt at håndtere indlejrede strukturer bruger vi hierarkisk opdeling:

  • Semantiske grænser: Opdel ud fra logiske inddelinger som overskrifter (H1, H2, H3) i stedet for faste tegnantal.
  • Overordnet kontekst: Inkluder titlen på den overordnede sektion i det underordnede tekststykke. Et tekststykke fra 'Sektion 2.1' kan f.eks. begynde med 'Kapitel 2: Introduktion – Sektion 2.1: Underemne'.
  • Metadata: Gem hele stien eller hierarkiniveauet i tekststykkets metadata.

Opdeling efter sektioner (Python)

Dette Python-eksempel viser en enkel måde at opdele et dokument i tekststykker baseret på overskrifter i Markdown-stil. Hvert tekststykke indeholder indholdet fra en sektion.

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 til mere kontekst

Metadata er ekstra oplysninger, der er knyttet til et tekststykke og beskriver det uden at være en del af tekststykkets hovedtekst. Det er utroligt effektivt til komplekse dokumenter.

  • Dokumenttitel: Hvilket kildedokument stammer dette tekststykke fra?
  • Sidenummer: Hvor i det oprindelige dokument blev dette fundet?
  • Overordnet sektion/kapitel: Hvilken større kontekst hører dette tekststykke til?
  • Tabel-id: Hvilken tabel er det, hvis det er en tabel?

Metadata gør det muligt at filtrere målrettet under hentningen og giver LLM'en værdifuld kontekst.

Ud over hentning med én vektor

Til meget komplekst indhold er enkle tekststykker måske ikke nok. Hentning med flere vektorer er en avanceret teknik, hvor du opretter forskellige typer embeddings for det samme indhold.

Du kan for eksempel have en lille, kort opsummering af en tabel, der er embeddes for hurtig hentning, mens hele det detaljerede tabelindhold gemmes separat. RAG-systemet henter opsummeringen og henter derefter hele tabellen, hvis den er relevant, for at sende den til LLM'en.

Test af komplekse dokumenter

Du har lært om forskellige strategier til håndtering af komplekse dokumentstrukturer i RAG. Lad os teste din forståelse.

Opsummering: Bliv fortrolig med komplekse dokumenter

Tillykke! Du har udforsket vigtige strategier til håndtering af komplekse dokumentstrukturer i RAG.

  • Vi så, hvordan tabeller kan miste kontekst ved standardopdeling, og lærte at udtrække og serialisere dem.
  • Vi gennemgik indlejrede dokumenter og vigtigheden af hierarkisk opdeling for at bevare relationerne.
  • Til sidst fremhævede vi, hvordan metadata kan berige dele og muliggøre mere præcis hentning.

Ved at anvende disse teknikker kan dit RAG-system levere mere præcise og kontekstuelt relevante svar, selv fra de mest indviklede dokumenter!

Gratis at komme i gang

Lær LLM-applikationer i produktion (RAG + vektordatabase + caching) med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Håndtering af komplekse dokumentstrukturer” gratis?

Ja — hele teksten til “Håndtering af komplekse dokumentstrukturer” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af LLM-applikationer i produktion (RAG + vektordatabase + caching)-kurset, skal du opgradere til CoddyKit PRO. LLM-applikationer i produktion (RAG + vektordatabase + caching)-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Håndtering af komplekse dokumentstrukturer”?

Implementer strategier til effektiv opdeling og hentning af information fra komplekse dokumenter som tabeller eller indlejrede sektioner. Du øver dig i LLM-applikationer i produktion (RAG + vektordatabase + caching) med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på LLM-applikationer i produktion (RAG + vektordatabase + caching)?

Der kræves ingen tidligere erfaring. LLM-applikationer i produktion (RAG + vektordatabase + caching) på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Håndtering af komplekse dokumentstrukturer”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne LLM-applikationer i produktion (RAG + vektordatabase + caching)-lektion?

Ja. Alle LLM-applikationer i produktion (RAG + vektordatabase + caching)-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Omskrivning af forespørgsler og reranking
  2. RAG-mønstre i flere trin og med agenter
  3. Håndtering af komplekse dokumentstrukturer
  4. Self-querying og kildehenvisninger
← Tilbage til LLM-applikationer i produktion (RAG + vektordatabase + caching)