Hoppa till innehållet
AI-grafen
EUniversitetProjekt· ca 75 min· sandlåda på servern

Slutprov: bygg ett spårbart RAG-flöde

Bygg en liten dokumentassistent som delar dokument utan att tappa källa, hämtar relevanta stycken, ger ett ordagrant belagt svar och avstår när underlag saknas. Efter godkänt kodprov kan du testa hur en riktig AI-modell svarar med valda källor.

Teori

Ett pålitligt RAG-flöde kan bedömas i fyra led: dokument → källmärkta stycken → relevant träff → svar med kontrollerbar källa. Mät retrieval separat från svarskvalitet. Ett svar utan belägg ska avstå.

Deluppgifter

  1. Bevara källan vid chunkning — chunk_documents(documents, max_words) returnerar stycken med source_id och text. Varje ord bevaras i ordning, inget stycke blandar källor och inget stycke har fler än max_words ord.
  2. Hitta relevant underlag — retrieve(query, chunks, k) returnerar högst k stycken i relevansordning. Ignorera vanliga frågeord; returnera tom lista om innehållsord saknar träff. evaluate_retrieval(cases, chunks, k) mäter andel frågor där rätt källa finns bland träffarna.
  3. Svara med spårbar källa — answer_with_evidence(query, hits) returnerar {answer, citations}. Svaret ska vara ett ordagrant meningsutdrag ur en träff. Varje citation är {source_id, quote} där quote är exakt samma utdrag. Om inget relevant utdrag finns, returnera answer: "Jag hittar inget stöd i underlaget." och tom citations-lista.

Godkänt när: recall >= 0.8

Startkoden

körs i en isolerad sandlåda på servern
"""RAG-slutprov. Ändra funktionerna nedan; testerna bedömer beteende på nya dokument."""

ABSTAIN = "Jag hittar inget stöd i underlaget."


def chunk_documents(documents, max_words=30):
    """documents: [{id, text}] -> [{source_id, text}], i ursprunglig ordning."""
    # TODO: dela varje dokuments ord i stycken utan att blanda källor.
    raise NotImplementedError


def retrieve(query, chunks, k=2):
    """Returnera de mest relevanta källmärkta styckena; [] om inget innehållsord matchar."""
    # TODO: rangordna med en reproducerbar lexikal poäng; undvik träffar på bara frågeord.
    raise NotImplementedError


def answer_with_evidence(query, hits):
    """Returnera {answer: str, citations: [{source_id, quote}]} eller ett belagt avstående."""
    # TODO: välj ett relevant meningsutdrag från träffarna och citera exakt den källan.
    raise NotImplementedError


def evaluate_retrieval(cases, chunks, k=2):
    """cases: [{query, source_id}] -> recall@k som flyttal mellan 0 och 1."""
    # TODO: använd retrieve och räkna hur ofta rätt källa finns bland de k första träffarna.
    raise NotImplementedError

Du skriver koden, tester du inte ser avgör om den håller. Skapa ett gratis konto för att köra labben.

Prova diagnosenSkapa konto gratis

Förväntade resultat

Alla tester och recall@2 ≥ 0,8. Servern kör även dolda fall med andra dokument, källor och frågor. Kursen blir klar först efter en verifierad helkörning av slutprovet och alla kunskapssteg.

Vanliga fel

Tappar source_id när dokument delas. Returnerar de första styckena oavsett fråga. Skapar en källa som inte finns i träffarna. Gissar ett svar när ingen källa stöder det. Kör bara en deluppgift; kursen kräver helkörning med Alla.