Architecture (Guide Vibe Coder)
Plongée détaillée dans le pipeline RAG pour les développeurs qui veulent comprendre le fonctionnement interne.
Vue d'ensemble du pipeline RAG
LaunchChat utilise la génération augmentée par récupération (RAG) pour répondre aux questions à partir de votre documentation.
1. Ingestion
Analyse → Découpage → Embedding → Stockage
2. Récupération
Requête → Recherche vectorielle → Classement
3. Génération
Contexte → LLM → Réponse + Citations
Pipeline d'ingestion
1. Analyse
Le contenu est analysé depuis différentes sources en texte brut :
- Notion: Notion : Analyse bloc par bloc en préservant la hiérarchie
- DOCX: DOCX : Extraction via mammoth.js
- Markdown: Markdown : Analyse avec remark/unified
- Website: Site web : Exploration et nettoyage de la navigation/pied de page
2. Découpage
Le texte est découpé en chunks avec chevauchement pour une récupération optimale :
{
targetSize: 400, // tokens per chunk
overlap: 50, // token overlap between chunks
preserveHeadings: true, // keep heading context
minChunkSize: 100 // minimum viable chunk
}Chaque chunk conserve la hiérarchie de ses titres parents pour le contexte.
3. Embedding
Les chunks sont convertis en vecteurs de 1536 dimensions :
Model: text-embedding-3-small
Dimensions: 1536
Provider: OpenAI (via OpenRouter)4. Stockage
Les vecteurs sont stockés dans PostgreSQL avec l'extension pgvector :
-- content_chunks table
id: uuid
knowledge_base_id: uuid
page_id: string
page_title: string
content: text
embedding: vector(1536)
parent_heading: stringStratégie de récupération
Recherche hybride
Nous utilisons un processus de récupération en deux étapes :
- Vector Search: Recherche vectorielle : Similarité cosinus avec l'opérateur <=> de pgvector
- Keyword Fallback: Recherche par mots-clés : Si les résultats vectoriels ont une faible similarité, nous ajoutons des chunks correspondant par mots-clés
Score de similarité
-- Vector similarity query
SELECT *, 1 - (embedding <=> query_embedding) as similarity
FROM content_chunks
WHERE knowledge_base_id = $1
ORDER BY embedding <=> query_embedding
LIMIT 5Génération de réponse
Score de confiance
Avant la génération, nous calculons un score de confiance :
confidence = bestSimilarity + (hasMultipleChunks ? 0.1 : 0) + 0.2
// Capped at 1.0
if (confidence < threshold) {
return refusalMessage; // Don't hallucinate
}Extraction des citations
Le LLM est instruit d'utiliser le format [Source N]. Nous analysons ces citations et les relions aux pages d'origine :
// 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])Bonnes pratiques documentaires
Structurez vos docs pour une récupération IA optimale :
À faire
- Utilisez des titres clairs et descriptifs
- Gardez les sections centrées sur un seul sujet
- Incluez des exemples et des extraits de code
- Définissez les termes et acronymes
- Mettez à jour les docs quand les fonctionnalités changent
À éviter
- Pages très longues sans structure
- Contenu dupliqué entre les pages
- Informations obsolètes ou contradictoires
- Usage intensif d'images sans texte alternatif
- Pages de navigation uniquement
Modèle de prompt IA
Copiez ce prompt dans Cursor, Windsurf ou Claude Code pour faciliter l'intégration de 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.