Architectuur (Vibe Coder-gids)

Diepgaande uitleg van de RAG-pipeline voor ontwikkelaars die willen begrijpen hoe het werkt.

RAG Pipeline-overzicht

LaunchChat gebruikt Retrieval Augmented Generation (RAG) om vragen te beantwoorden op basis van uw documentatie.

1. Inname

Parseren → Chunken → Embedden → Opslaan

2. Ophalen

Query → Vectorzoekopdracht → Rangschikken

3. Generatie

Context → LLM → Antwoord + Bronvermeldingen

Innamepipeline

1. Parseren

Content wordt vanuit verschillende bronnen geparseerd naar platte tekst:

  • Notion: Blok-voor-blok parseren met behoud van hiërarchie
  • DOCX: Geëxtraheerd via mammoth.js
  • Markdown: Geparseerd met remark/unified
  • Website: Gecrawld en ontdaan van navigatie/footer

2. Chunking

Tekst wordt opgesplitst in overlappende chunks voor optimaal ophalen:

{
  targetSize: 400,    // tokens per chunk
  overlap: 50,        // token overlap between chunks
  preserveHeadings: true,  // keep heading context
  minChunkSize: 100   // minimum viable chunk
}

Elke chunk behoudt de bovenliggende kopjeshiërarchie voor context.

3. Embedding

Chunks worden omgezet naar 1536-dimensionale vectoren:

Model: text-embedding-3-small
Dimensions: 1536
Provider: OpenAI (via OpenRouter)

4. Opslag

Vectoren worden opgeslagen in PostgreSQL met de pgvector-extensie:

-- content_chunks table
id: uuid
knowledge_base_id: uuid
page_id: string
page_title: string
content: text
embedding: vector(1536)
parent_heading: string

Ophaalstrategie

Hybride zoekopdracht

Wij gebruiken een tweefasig ophaalproces:

  1. Vector Search: Vectorzoekopdracht: Cosinusgelijkenis met de <=>-operator van pgvector
  2. Keyword Fallback: Trefwoord-fallback: Als vectorresultaten een lage gelijkenis hebben, voegen we trefwoord-gematchte chunks toe

Gelijkenisscoring

-- Vector similarity query
SELECT *, 1 - (embedding <=> query_embedding) as similarity
FROM content_chunks
WHERE knowledge_base_id = $1
ORDER BY embedding <=> query_embedding
LIMIT 5

Antwoordgeneratie

Betrouwbaarheidsscoring

Vóór het genereren berekenen we een betrouwbaarheidsscore:

confidence = bestSimilarity + (hasMultipleChunks ? 0.1 : 0) + 0.2
// Capped at 1.0

if (confidence < threshold) {
  return refusalMessage;  // Don't hallucinate
}

Bronvermeldingsextractie

Het LLM wordt geïnstrueerd om het [Source N]-formaat te gebruiken. We parseren deze en koppelen ze aan originele pagina's:

// Extract citations from answer
const citationPattern = /\[Source (\d+)\]/g;
const matches = answer.matchAll(citationPattern);

// Map to original pages
citations = matches.map(m => chunks[m[1] - 1])

Best practices voor documentatie

Structureer uw documentatie voor optimaal AI-ophalen:

Wel doen

  • Gebruik duidelijke, beschrijvende koppen
  • Houd secties gericht op één onderwerp
  • Voeg voorbeelden en codefragmenten toe
  • Definieer termen en afkortingen
  • Werk documentatie bij wanneer functies veranderen

Vermijden

  • Zeer lange pagina's zonder structuur
  • Dubbele content op meerdere pagina's
  • Verouderde of tegenstrijdige informatie
  • Veel afbeeldingen zonder alt-tekst
  • Pagina's die alleen navigatie bevatten

AI-promptsjabloon

Kopieer deze prompt naar Cursor, Windsurf of Claude Code om te helpen bij de integratie van LaunchChat:

I'm integrating LaunchChat, an AI-powered support widget.

Widget Setup:
1. Add to HTML: <script>window.LaunchChatConfig = {widgetId: "ID"}</script>
   <script src="https://domain.com/widget.js" async></script>

2. For React/Next.js, create a client component that:
   - Sets window.LaunchChatConfig
   - Dynamically loads widget.js
   - Cleans up on unmount

API Reference:
- window.LaunchChatWidget.open() - Open chat
- window.LaunchChatWidget.close() - Close chat
- window.LaunchChatWidget.on(event, callback) - Listen to events
- Events: 'open', 'close', 'message', 'escalate', 'feedback'

Help me integrate this into my [FRAMEWORK] app.