- Diseñar un flujo RAG local sin enviar documentos a APIs externas.
- Separar ingesta, recuperación, generación y envío de respuesta.
- Evitar respuestas sin evidencia y fugas entre usuarios.
Mapa del flujo
Entrada: Telegram / formulario / chat interno -> n8n valida usuario y pregunta -> n8n crea embedding o llama a un servicio de embeddings -> Qdrant devuelve chunks permitidos -> Ollama genera respuesta con citas -> n8n guarda traza y envía borrador -> humano aprueba si la acción tiene impacto real
Docker compose de laboratorio
Este compose es una base local. En producción añade HTTPS, backups, usuarios, secretos fuera del repositorio y límites de red.
services:
qdrant:
image: qdrant/qdrant:latest
ports:
- "6333:6333"
volumes:
- qdrant_data:/qdrant/storage
n8n:
image: n8nio/n8n:latest
ports:
- "5678:5678"
environment:
- N8N_ENCRYPTION_KEY=change-me
- GENERIC_TIMEZONE=Europe/Madrid
volumes:
- n8n_data:/home/node/.n8n
volumes:
qdrant_data:
n8n_data:Nodos mínimos en n8n
- Trigger de chat, Telegram o webhook.
- Validación de usuario, tenant y permisos.
- Normalización de pregunta.
- Búsqueda en Qdrant con filtro por tenant.
- Llamada a Ollama con contexto y regla de “no sé”.
- Respuesta con citas y traza guardada.
Regla de respuesta: - Responde solo con el contexto recuperado. - Cita documento y sección cuando sea posible. - Si el contexto no basta, di "No tengo evidencia suficiente". - No ejecutes acciones externas sin aprobación humana.
Fuentes oficiales
Si has guardado la evidencia de esta lección, continúa con «n8n webhooks». Si no, repite la comprobación antes de avanzar.