Retrieval-Augmented Generation avec Mistral Embed + pgvector sur Supabase. Comment Residual Publish retrouve vos articles similaires et injecte ce contexte dans chaque prompt — sans alourdir la facture.
Sans mémoire, un LLM génère des articles indépendants les uns des autres. Si vous publiez 50 articles sur les restaurants parisiens, le 50ème peut répéter des points déjà couverts dans les 49 premiers — sans le savoir.
Le RAG (Retrieval-Augmented Generation) résout ce problème : avant chaque génération, Residual Publish retrouve vos articles les plus similaires et les injecte dans le contexte.
pgvector est une extension PostgreSQL pour stocker et rechercher des vecteurs numériques (embeddings). Un embedding est une représentation mathématique d'un texte dans un espace de haute dimension (1024 dimensions avec Mistral Embed).
Deux textes avec un sens similaire ont des vecteurs proches. pgvector utilise la similarité cosinus pour trouver les k-plus-proches-voisins en quelques millisecondes.
-- Recherche des 4 chunks les plus proches d'une requête
SELECT content, article_id, 1 - (embedding <=> $1) AS similarity
FROM article_embeddings
WHERE owner_id = $2
AND 1 - (embedding <=> $1) > 0.75
ORDER BY embedding <=> $1
LIMIT 4;L'index ivfflat (Inverted File with Flat quantization) accélère cette recherche même sur des milliers d'articles.
Étape 1 : Embedding à la publication
Quand un article est sauvegardé en statut "ready", Trigger.dev déclenche le job embed-article en arrière-plan :
article_embeddings avec métadonnéesÉtape 2 : Récupération avant génération
Quand vous générez un nouvel article, Residual Publish :
1. Prend les 1500 premiers caractères de votre message/données source
2. Les vectorise via Mistral Embed
3. Interroge match_articles() (RPC Supabase SECURITY DEFINER)
4. Injecte les 4 chunks les plus pertinents (max 2000 chars) dans le system prompt
// Exemple de contexte injecté
const systemPrompt = systemPromptBase + `
=== Contexte de vos articles précédents (RAG) ===
Article "Les restaurants lyonnais..." (2026-05-15):
"Le score moyen constaté sur les 50 sites était de 34/100.
Les failles les plus fréquentes étaient..."
Article "Audit plombiers Marseille" (2026-05-10):
"Contrairement aux restaurants, les artisans du BTP
montrent des problèmes de sécurité SSL plus fréquents..."
===Avant RAG : "Le score moyen des restaurants parisiens est de 38/100."
Avec RAG : "Le score des restaurants parisiens (38/100) est légèrement supérieur à celui des lyonnais (34/100) que nous avions analysé en mai, mais les failles SSL restent le point commun."
Le LLM peut maintenant faire des comparaisons entre villes, secteurs et périodes — en citant vos propres données. C'est ce qui transforme un générateur de contenu en outil d'autorité editoriale.
Le RAG est activé par défaut si APP_CONFIG.features.rag est à true. Assurez-vous d'avoir :
article_embeddings appliquée (voir specs/02-database.sql)TRIGGER_SECRET_KEY configurée sur Vercel (pour les jobs d'embedding)*Le RAG s'active automatiquement après votre premier article publié. Générer →*
Residual Publish génère, publie et score vos leads en autonomie. BYOK, RGPD, scheduling inclus. 100 crédits offerts.
Créer un compte gratuit →