Arquitectura (Guía para Vibe Coders)
Análisis detallado del pipeline RAG para desarrolladores que quieren entender cómo funciona.
Visión general del pipeline RAG
LaunchChat utiliza generación aumentada por recuperación (RAG) para responder preguntas basándose en tu documentación.
1. Ingesta
Parsear → Fragmentar → Embeber → Almacenar
2. Recuperación
Consulta → Búsqueda vectorial → Clasificar
3. Generación
Contexto → LLM → Respuesta + Citas
Pipeline de ingesta
1. Parseo
El contenido se parsea desde diversas fuentes a texto plano:
- Notion: Parseo bloque por bloque preservando la jerarquía
- DOCX: Extraído mediante mammoth.js
- Markdown: Parseado con remark/unified
- Website: Sitio web: Rastreado y limpiado de navegación/pie de página
2. Fragmentación
El texto se divide en fragmentos con solapamiento para una recuperación óptima:
{
targetSize: 400, // tokens per chunk
overlap: 50, // token overlap between chunks
preserveHeadings: true, // keep heading context
minChunkSize: 100 // minimum viable chunk
}Cada fragmento preserva la jerarquía de encabezados de su elemento padre para mantener el contexto.
3. Embedding
Los fragmentos se convierten en vectores de 1536 dimensiones:
Model: text-embedding-3-small
Dimensions: 1536
Provider: OpenAI (via OpenRouter)4. Almacenamiento
Los vectores se almacenan en PostgreSQL con la extensión pgvector:
-- content_chunks table
id: uuid
knowledge_base_id: uuid
page_id: string
page_title: string
content: text
embedding: vector(1536)
parent_heading: stringEstrategia de recuperación
Búsqueda híbrida
Utilizamos un proceso de recuperación en dos etapas:
- Vector Search: Búsqueda vectorial: Similitud coseno usando el operador <=> de pgvector
- Keyword Fallback: Respaldo por palabras clave: Si los resultados vectoriales tienen baja similitud, agregamos fragmentos coincidentes por palabras clave
Puntuación de similitud
-- Vector similarity query
SELECT *, 1 - (embedding <=> query_embedding) as similarity
FROM content_chunks
WHERE knowledge_base_id = $1
ORDER BY embedding <=> query_embedding
LIMIT 5Generación de respuestas
Puntuación de confianza
Antes de generar, calculamos una puntuación de confianza:
confidence = bestSimilarity + (hasMultipleChunks ? 0.1 : 0) + 0.2
// Capped at 1.0
if (confidence < threshold) {
return refusalMessage; // Don't hallucinate
}Extracción de citas
Se instruye al LLM para usar el formato [Fuente N]. Parseamos estas citas y las enlazamos a las páginas originales:
// 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])Mejores prácticas para documentación
Estructura tus docs para una recuperación óptima por IA:
Recomendado
- Usa encabezados claros y descriptivos
- Mantén las secciones enfocadas en un solo tema
- Incluye ejemplos y fragmentos de código
- Define términos y acrónimos
- Actualiza los docs cuando cambien las funcionalidades
Evitar
- Páginas muy largas sin estructura
- Contenido duplicado entre páginas
- Información desactualizada o contradictoria
- Uso excesivo de imágenes sin texto alternativo
- Páginas que solo contienen navegación
Plantilla de prompt para IA
Copia este prompt en Cursor, Windsurf o Claude Code para facilitar la integración 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.