RAG = Retrieval-Augmented Generation. Você não confia na memória de treino do modelo; você recupera o trecho certo do seu dado e injeta no contexto. A qualidade do retrieval é o teto da qualidade da resposta: chunk errado dentro, bobagem confiante fora.
RAG, o esqueleto
func answer(q string) string {
qv := embed(q)
chunks := store.topK(qv, 3) // por cosine
ctx := join(chunks)
return llm.generate(prompt(ctx, q))
}
Eval loop
pass := 0
for _, t := range testset {
got := answer(t.q)
if judge(got, t.expected) { // LLM-as-judge ou similaridade
pass++
}
}
rate := float64(pass) / float64(len(testset))