RAG-starterkit: vragen over documenten met hybride zoeken en gecontroleerde bronnen

Onze projecten voor vragen over documenten en kennisassistenten beginnen met deze starterkit. Hij regelt de ingestie, hybride retrieval, een agent die alleen uit je documenten antwoordt en een broncheck die bij twijfel het antwoord blokkeert (fail-closed).

Wat erin zit.

Hoe het in elkaar zit.

  1. 01

    Uploaden

    De Next.js-frontend stuurt een bestand naar de FastAPI-backend, die het opslaat in R2 en een ingestietaak in de wachtrij zet.

  2. 02

    Verwerken

    Een Celery-worker haalt de tekst eruit, splitst die in chunks met hun positie in het document, maakt embeddings en schrijft ze naar Postgres met een full-text-index.

  3. 03

    Ophalen en antwoorden

    Bij elke vraag roept de agent hybride zoeken aan. Dat draait vector- en keyword-zoeken parallel, voegt de rankings samen en voegt aangrenzende chunks toe voor context.

  4. 04

    Valideren

    Voordat het antwoord teruggaat, controleert de validator elke bronverwijzing tegen de chunks die in die beurt zijn opgehaald. Mislukte checks worden gelogd en vervangen door een veilig antwoord.

Een blik op de code.

Een vereenvoudigde broncheck: kan één verwijzing niet worden herleid tot opgehaalde tekst, dan wordt het hele antwoord afgewezen.

Python
import re
from dataclasses import dataclass

MARKER = re.compile(r"\[(\d+)\]")

@dataclass
class Citation:
    index: int
    chunk_id: str
    excerpt: str

def normalise(text: str) -> str:
    return " ".join(text.split()).lower()

def validate(answer: str, citations: list[Citation], retrieved: dict[str, str]) -> bool:
    """Fail closed: no citations, or one we cannot verify, rejects the answer."""
    used = {int(n) for n in MARKER.findall(answer)}
    by_index = {c.index: c for c in citations}
    for n in used:
        c = by_index.get(n)
        if c is None or c.chunk_id not in retrieved:
            return False
        if normalise(c.excerpt) not in normalise(retrieved[c.chunk_id]):
            return False
    return bool(used)

Gebouwd met.

Alle technologie

Hoor het zodra hij openbaar is.

We maken de RAG-starterkit klaar voor publicatie. Je krijgt één e-mail zodra hij beschikbaar is, en af en toe onze notities.

Af en toe een e-mail, je kunt je altijd afmelden. Lees onze privacyverklaring.

Werk samen met Vantion.