Hoppa till innehållet
AI-grafen
F· AI engineeringrag-informationssokning· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-20

Utvärdering av RAG-svar

Kunna mäta grundning, korrekthet och källhänvisning i RAG-svar.

Förkunskaper

Intuition

Ett RAG-svar kan fela på fyra olika sätt, och de kräver olika åtgärder:

FelMåttÅtgärd
Rätt passage hämtades aldrigrecall@kchunkning, embeddings, hybrid, omrankning
Rätt passage hämtades men användes intecontext precision / utnyttjandeomrankning, färre chunkar, prompt
Svaret stöds inte av passagernagrundningcitatkrav, avstå-instruktion, verifieringssteg
Svaret är grundat men besvarar inte frågananswer relevanceprompt, frågeförståelse

Mät alla fyra. Ett enda «kvalitetsmått» döljer vilken av dem som är problemet — och därmed vilken åtgärd som hjälper.

Kod

import json

GRUNDNING = """Dela SVARET i enskilda påståenden. För varje: stöds det av KONTEXTEN?
Svara JSON: {"pastaenden": [{"text": "...", "stods": true|false}]}"""

RELEVANS = """Besvarar SVARET frågan? Bedöm bara relevans, inte korrekthet.
Svara JSON: {"relevans": 0|1, "motivering": "..."}"""

def utvardera_rag(llm, fall, kedja):
    ut = []
    for f in fall:                                   # f: {fraga, facit_chunk_ids, facit_svar}
        traffar, svar = kedja(f["fraga"])
        hamtade = [t["id"] for t in traffar]
        kontext = "\n".join(t["text"] for t in traffar)

        g = json.loads(llm(f"{GRUNDNING}\nKONTEXT:\n{kontext}\nSVAR:\n{svar}", temperature=0, json_mode=True))
        r = json.loads(llm(f"{RELEVANS}\nFRÅGA: {f['fraga']}\nSVAR: {svar}", temperature=0, json_mode=True))
        p = g["pastaenden"]

        ut.append({
            "recall": float(any(c in hamtade for c in f["facit_chunk_ids"])),
            "grundning": sum(x["stods"] for x in p) / max(len(p), 1),
            "relevans": float(r["relevans"]),
            "korrekt": float(bedom_mot_facit(svar, f["facit_svar"])),
        })
    return {k: round(sum(r[k] for r in ut) / len(ut), 3) for k in ut[0]}

# {'recall': 0.91, 'grundning': 0.74, 'relevans': 0.96, 'korrekt': 0.68}
# → retrieval är bra, grundningen är problemet: modellen fyller i från förkunskap

Testsetet avgör allt: 50–100 verkliga frågor ur loggarna, med rätt passage utpekad av en människa. Frågor du hittar på själv är välformulerade på ett sätt verkliga frågor inte är — och ger ett system som ser bra ut i test och sämre i drift.

Behärskning innebär

  • Mäter grundning, korrekthet och källhänvisning separat
  • Bygger ett testset ur verkliga frågor
  • Lokaliserar fel till retrieval eller generering

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser