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

Grundlæggende dataindlæsning og tekstopdeling

Lær at indlæse ustrukturerede data og anvende effektive strategier til tekstopdeling for optimal retrieval-ydeevne.

Lektion 2 af 411 trin

Grundlæggende dataindlæsning og tekstopdeling er en gratis LLM-applikationer i produktion (RAG + vektordatabase + caching)-lektion på CoddyKit. Dette er lektion 2 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.

Indlæsning af data til RAG

Velkommen til lektion 2! I Retrieval Augmented Generation (RAG) er det første skridt altid at gøre dine data klar. Det betyder, at du indlæser dine oplysninger og forbereder dem til den store sprogmodel (LLM).

De fleste data fra den virkelige verden er ustrukturerede, hvilket betyder, at de ikke passer pænt ind i rækker og kolonner som i et regneark. Det kan for eksempel være dokumenter, websider eller bøger.

Almindelige kilder til ustrukturerede data

RAG-systemer kan arbejde med mange typer ustrukturerede data. Her er nogle almindelige eksempler:

  • Tekstfiler (.txt): Simple dokumenter med ren tekst.
  • PDF-filer (.pdf): Indeholder ofte tekst, billeder og komplekse layout.
  • Word-dokumenter (.docx): Righoldig tekst med formatering.
  • Websider (.html): Indhold fra websteder.
  • Databaser/API'er: Tekst udtrukket fra forskellige felter.

Målet er at udtrække det rå tekstindhold fra disse kilder.

Grundlæggende indlæsning af tekstfiler

Lad os begynde med den enkleste form: at indlæse en tekstfil med ren tekst. I Python kan du nemt læse hele indholdet af en fil ind i en streng.

Dette eksempel opretter en lille sample.txt og læser derefter indholdet.

import os

def load_text_file(filepath):
    with open(filepath, 'r', encoding='utf-8') as f:
        return f.read()

if __name__ == "__main__":
    # Create a dummy file for demonstration
    file_content = "This is the first line.\nThis is the second line.\nAnd a final line of text."
    with open("sample.txt", "w", encoding="utf-8") as f:
        f.write(file_content)
    
    # Load and print the content
    loaded_data = load_text_file("sample.txt")
    print("--- Loaded Content ---")
    print(loaded_data)

    # Clean up the dummy file
    os.remove("sample.txt")

Hvorfor opdeling i tekststykker er afgørende

Når du har indlæst dine data, kan du normalt ikke sende en hel bog eller et langt dokument direkte til en LLM. Hvorfor ikke?

  • Begrænsninger i kontekstvinduet: LLM'er har en maksimal mængde tekst, som de kan behandle på én gang.
  • Omkostninger: Det er dyrt at sende meget lange tekster, fordi du typisk betaler pr. token.
  • Relevans: Kortere tekststykker med et tydeligt fokus er ofte mere relevante ved informationssøgning.

Det er her, opdeling i tekststykker kommer ind i billedet.

Forståelse af kontekstvinduet

Kontekstvinduet fungerer som LLM'ens korttidshukommelse. Det er det maksimale antal tokens (ord eller dele af ord), som modellen kan tage i betragtning, når den genererer et svar.

  • Hvis din inputtekst er for lang, bliver den afkortet.
  • LLM'en kan kun "se" det, der er i dens kontekstvindue.

Opdeling i tekststykker opdeler dit store dokument i mindre, håndterbare dele, der kan være i dette vindue.

Grundlæggende opdeling: fast størrelse

Den enkleste strategi til opdeling i tekststykker er opdeling i tekststykker med fast størrelse. Du definerer et bestemt antal tegn eller tokens og opdeler derefter dokumentet i tekststykker med netop denne størrelse.

Hvis du for eksempel har et dokument på 1.000 tegn og en tekststørrelse på 100, får du 10 tekststykker.

  • Fordele: Nem at implementere.
  • Ulemper: Kan skære sætninger eller afsnit over på midten, så kontekst går tabt.

Opdeling i tekststykker med fast størrelse i praksis

Her er et Python-eksempel, der viser opdeling i tekststykker med fast størrelse. Bemærk, hvordan teksten ganske enkelt skæres over med regelmæssige mellemrum, hvilket nogle gange kan dele ord eller sætninger.

def fixed_size_chunker(text, chunk_size):
    chunks = []
    for i in range(0, len(text), chunk_size):
        chunks.append(text[i : i + chunk_size])
    return chunks

if __name__ == "__main__":
    sample_text = "Large language models are powerful tools for text generation and understanding. However, they have limitations, especially with very long inputs due to their context window size."
    
    chunk_size = 40
    chunks = fixed_size_chunker(sample_text, chunk_size)
    
    print(f"Original text length: {len(sample_text)}")
    print(f"Chunk size: {chunk_size}")
    print("--- Chunks ---")
    for i, chunk in enumerate(chunks):
        print(f"Chunk {i+1} ({len(chunk)} chars): '{chunk}'")

Forbedring af kontekst med overlap

Opdeling i tekststykker med fast størrelse kan give problemer, hvis vigtig kontekst deles mellem to tekststykker. For at afhjælpe dette bruger vi overlappende tekststykker.

Ved overlap begynder hvert nyt tekststykke lidt før det foregående sluttede. Det sikrer, at noget af teksten optræder i flere tekststykker, så sammenhængen bevares.

  • En almindelig overlapstørrelse er 10-20 % af tekststykkets størrelse.
  • Det hjælper LLM'en med at forbinde idéer, selv når de går på tværs af grænserne mellem tekststykker.

Eksempel på opdeling med overlap

Se, hvordan et overlap hjælper med at bevare konteksten. Begyndelsen af hvert nyt tekststykke indeholder noget tekst fra slutningen af det foregående.

def overlapping_chunker(text, chunk_size, overlap_size):
    chunks = []
    start = 0
    while start < len(text):
        end = start + chunk_size
        chunk = text[start:end]
        chunks.append(chunk)
        start += chunk_size - overlap_size
        if start < 0: # Handle cases where overlap > chunk_size initially
            start = 0
    return chunks

if __name__ == "__main__":
    text_data = "The quick brown fox jumps over the lazy dog. Dogs are mammals and often friendly animals."
    
    chunk_size = 30
    overlap_size = 10
    chunks = overlapping_chunker(text_data, chunk_size, overlap_size)
    
    print(f"Original text length: {len(text_data)}")
    print(f"Chunk size: {chunk_size}, Overlap size: {overlap_size}")
    print("--- Overlapping Chunks ---")
    for i, chunk in enumerate(chunks):
        print(f"Chunk {i+1} ({len(chunk)} chars): '{chunk}'")

Test din forståelse

Du har lært om indlæsning af data og grundlæggende strategier til opdeling i tekststykker. Nu skal du teste din viden!

Opsummering: Indlæsning af data og opdeling i tekststykker

Godt gået! I denne lektion gennemgik vi de grundlæggende trin i forberedelsen af data til RAG-programmer:

  • Indlæsning af data: Udtrækning af rå tekst fra forskellige ustrukturerede kilder som tekstfiler, PDF-filer og websider.
  • Opdeling i tekststykker: Den nødvendige proces, hvor lange dokumenter opdeles i mindre, håndterbare dele.
  • Kontekstvindue: Forståelse af LLM'ens begrænsning for inputtekstens længde, målt i tokens.
  • Strategier til opdeling: Vi gennemgik grundlæggende opdeling med fast størrelse samt den forbedrede metode med overlap, der bevarer konteksten.

I næste lektion ser vi, hvordan disse tekststykker bruges til at opbygge et enkelt RAG-procesforløb!

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 “Grundlæggende dataindlæsning og tekstopdeling” gratis?

Ja — hele teksten til “Grundlæggende dataindlæsning og tekstopdeling” 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 “Grundlæggende dataindlæsning og tekstopdeling”?

Lær at indlæse ustrukturerede data og anvende effektive strategier til tekstopdeling for optimal retrieval-ydeevne. 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 2 af 4.

Hvor lang tid tager lektionen “Grundlæggende dataindlæsning og tekstopdeling”?

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. Valg af LLM-udbyder
  2. Grundlæggende dataindlæsning og tekstopdeling
  3. Opbygning af en enkel RAG-pipeline
  4. Test og evaluering af Deres RAG-app
← Tilbage til LLM-applikationer i produktion (RAG + vektordatabase + caching)