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:
| Fel | Mått | Åtgärd |
|---|---|---|
| Rätt passage hämtades aldrig | recall@k | chunkning, embeddings, hybrid, omrankning |
| Rätt passage hämtades men användes inte | context precision / utnyttjande | omrankning, färre chunkar, prompt |
| Svaret stöds inte av passagerna | grundning | citatkrav, avstå-instruktion, verifieringssteg |
| Svaret är grundat men besvarar inte frågan | answer relevance | prompt, 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
- arXiv — RAGAS: Automated Evaluation of RAG — arXiv (öppen åtkomst; licens per artikel)
- arXiv — Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks — arXiv (öppen åtkomst; licens per artikel)