Bouw een Chatbot Kennisbank door een Website te Scrapen: Crawlen, Chunken, Citeren

Een supportbot is slechts zo goed als wat het gevoed krijgt. Richt het op je eigen site — documentatie, FAQ's, helpcentrum — door te crawlen naar schone markdown en het op te delen voor opvraging. Hier is de pijplijn die antwoorden onderbouwd en geciteerd houdt.

Een supportchatbot is slechts zo goed als wat het gevoed krijgt, en het beste om het te voeden is meestal je eigen website — de documentatie, FAQ's en helpcentrumartikelen die je al onderhoudt. Het probleem is dat een bot een website niet kan lezen zoals een mens dat doet; het heeft schone, opgedeelde, opvraagbare tekst nodig met de bron aan elk stuk gekoppeld. Deze gids is de volledige pijplijn: crawl de site naar markdown, deel het op, embed het in een vectoropslag, en haal geciteerde context op bij vraagstelling — een onderbouwde kennisbank die accuraat blijft naarmate je site verandert.

Waarom RAG, niet een fine-tune

Je zou een model kunnen fine-tunen op je content, maar voor een supportbot is dat het verkeerde gereedschap: hertraining is traag, duur en veroudert zodra je een document aanpast. Retrieval-augmented generation (RAG) houdt de kennis buiten het model — deel je content op, embed het, en haal bij vraagstelling de meest relevante stukken op en geef die aan het model als context. Werk een document bij, her-crawl, en de kennis van de bot wordt daarmee bijgewerkt. De vraag is reëel: de chatbotmarkt wordt verwacht te groeien met een CAGR van 23,3% tot 2030, een KPMG-studie vond dat 69% van de mensen al chatbots gebruikt, en een Stanford en MIT-studie van 5.179 supportmedewerkers mat een gemiddelde productiviteitsstijging van 14% door generatieve AI-assistentie — 35% voor de nieuwste medewerkers.

Stap 1: crawl de site naar schone markdown

Het voeden van rauwe HTML in een RAG-pijplijn vergiftigt het met navigatie, cookiebanners en script-tags. Crawl in plaats daarvan direct naar markdown — het behoudt koppen, lijsten en tabellen terwijl het de presentatie-ruis verwijdert, wat precies is wat een LLM het beste opneemt. Een Scraper API met een crawlmodus loopt de site door en levert elke pagina als schone markdown op:

import requests

resp = requests.post(
    "https://api.quantumproxies.io/crawl",
    json={"url": "https://docs.example.com", "limit": 300, "format": "markdown"},
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    timeout=120,
)
pages = resp.json()["pages"]  # each: {"url": ..., "markdown": ...}

Je eigen site crawlen is eenvoudig; documentatie achter geo- of snelheidslimieten crawlen is waar het routeren via de juiste IP's ertoe doet, zodat de crawl voltooid wordt in plaats van halverwege vast te lopen. Markdown-first is hetzelfde principe achter het voeden van LLMs met verse webdata.

Stap 2: chunk op kop, behoud de bron

Embed geen hele pagina's — opvraging werkt het beste op gerichte stukken. Splits elke pagina op zijn koppen zodat elk stuk één samenhangend onderwerp is, en draag de bron-URL op elk zodat je het later kunt citeren. Dit is ook waar een goede bron-doc zich uitbetaalt: artikelen met duidelijke koppen, elk met één idee, en vragen die in de tekst worden herhaald, chunken veel beter dan een muur van tekst (een bot kan geen context afleiden zoals een mens dat zou doen):

def chunk_markdown(md, source_url):
    chunks, cur = [], {"heading": "", "text": ""}
    for line in md.splitlines():
        if line.startswith("#"):
            if cur["text"].strip():
                chunks.append({**cur, "source": source_url})
            cur = {"heading": line.lstrip("# ").strip(), "text": ""}
        else:
            cur["text"] += line + "\n"
    if cur["text"].strip():
        chunks.append({**cur, "source": source_url})
    return chunks

all_chunks = [c for p in pages for c in chunk_markdown(p["markdown"], p["url"])]
RAG-pijplijn die een website in een supportbot verandert: crawl naar markdown, chunk op kop, embed in een vectordatabase, haal op en citeer
Haal geciteerde stukken op bij vraagstelling in plaats van de hele site in de prompt te stoppen — onderbouwd en controleerbaar.

Stap 3: embed, opslaan en ophalen met citaten

Embed elk stuk in een vector en voeg het toe aan een vectordatabase met de bron-URL als metadata. Bij vraagstelling, embed de vraag van de gebruiker, haal de topmatches op, en geef hun tekst aan het model als context — en toon de bronlinks zodat het antwoord controleerbaar is, geen black box:

# index each chunk with its source as metadata
for c in all_chunks:
    vec = embed(c["heading"] + "\n" + c["text"])
    index.upsert(id=uid(c), values=vec,
                 metadata={"source": c["source"], "text": c["text"]})

# at query time: retrieve, ground, and cite
hits = index.query(embed(user_question), top_k=4)
context = "\n\n".join(h.metadata["text"] for h in hits)
citations = list({h.metadata["source"] for h in hits})
answer = llm(f"Answer using only this context:\n{context}", question=user_question)

Het model verankeren in opgehaalde context — en het vertellen alleen vanuit die context te antwoorden — is wat een supportbot ervan weerhoudt om zelfverzekerd beleid te verzinnen. De citaten hebben een dubbele functie: ze laten gebruikers verifiëren, en ze laten je zien wanneer de bot naar het verkeerde document grijpt. Voor de diepere mechanica gaat onze gids over RAG-pijplijnen die niet verouderen verder in op chunking en opvraging.

Stap 4: vernieuwen, anders rot het

Een kennisbank is een levend iets. Documenten worden herschreven, prijzen veranderen, nieuwe artikelen verschijnen — en een bot die antwoordt vanuit de crawl van vorige maand geeft verkeerde antwoorden met volle overtuiging. Plan een her-crawl, vergelijk elke pagina met zijn laatste versie, en her-embed alleen wat veranderd is zodat vernieuwen goedkoop blijft. Houd een ophaaldatum bij op elk stuk zodat je altijd weet hoe actueel de bron van het antwoord is. Als je liever een beheerde, altijd verse feed consumeert dan zelf de crawl en vernieuwing uitvoert, webdata gebouwd voor LLMs verzorgt de verzameling.

Statistieken achter kennisbankchatbots: 23,3% markt-CAGR, 69% van de mensen gebruikt chatbots, en 14-35% productiviteitswinst in support
De verschuiving naar supportbots is in volle gang; een onderbouwde, geciteerde kennisbank is wat er een betrouwbaar maakt.

Crawl elke site naar schone markdown voor je bot

Veelgestelde vragen

Hoe bouw ik een chatbot kennisbank van een website?

Crawl de site naar schone markdown, splits elke pagina in op kop gebaseerde stukken met de bron-URL eraan gekoppeld, embed de stukken in een vectordatabase, en haal bij vraagstelling de meest relevante stukken op om het antwoord van het model te onderbouwen. Plan een her-crawl om het actueel te houden. Deze RAG-aanpak betekent dat het bewerken van een document de kennis van de bot bijwerkt zonder enige hertraining.

Moet ik een model trainen op mijn content?

Nee — en voor een supportbot zou je dat niet moeten doen. Fine-tuning is traag, duur en veroudert telkens wanneer je content verandert. Retrieval-augmented generation houdt de kennis in een vectoropslag buiten het model, zodat de bot altijd antwoordt vanuit de huidige crawl. Je hoeft alleen opnieuw te crawlen en te embedden wanneer content verandert, wat veel goedkoper is dan hertraining.

Waarom crawlen naar markdown in plaats van HTML?

Ruwe HTML bevat navigatie, advertenties, cookiebanners en scripts die ruis toevoegen en je embedbudget verspillen. Markdown behoudt de betekenisvolle structuur — koppen, lijsten, tabellen — terwijl het de presentatielaag verwijdert, wat LLMs het meest schoon opnemen. Schonere input betekent relevantere opvraging en minder verwarde antwoorden. Bots kunnen ook geen afbeeldingen of video's lezen, dus houd belangrijke informatie in tekst.

Hoe houd ik de kennisbank up-to-date?

Plan periodieke her-crawls, detecteer welke pagina's zijn veranderd, en her-embed alleen die — volledige her-crawls verspillen bandbreedte en rekenkracht. Bewaar een ophaaldatum op elk stuk zodat je kunt zien hoe vers de bron van een antwoord is, en versieer de index zodat je kunt terugdraaien als een slechte crawl de opvraging verslechtert. Incrementele vernieuwing houdt de kosten in verhouding tot de werkelijke verandering.

De pijplijn is hier het product: crawl naar markdown, chunk op kop, embed met bronnen, haal op en citeer, en vernieuw dan op schema. Doe dat en je supportbot antwoordt vanuit je echte content, linkt zijn bronnen, en blijft actueel naarmate je site evolueert — het verschil tussen een bot die mensen vertrouwen en een die ze leren te omzeilen. Om een AI-agent live toegang te geven tot dezelfde data via een standaardinterface, zie onze gids voor de QuantumProxies MCP-server.

Voed je bot altijd met verse webdata