Petit RAG (contenu, schéma, prompt template et procédure) > bot > coordonnées d’un prospect (nom, prénom, mobile, e-mail + intérêt produit).
ci-dessous un petit RAG prêt à l’emploi (contenu, schéma, prompt template et procédure) en français pour créer un bot qui récupère les coordonnées d’un prospect (nom, prénom, mobile, e-mail + intérêt produit).
Exemple de dialogue type (flow)
- Bot : « Bonjour, je suis l’assistant de [NomEntreprise]. Puis-je prendre 30s pour noter vos coordonnées afin de vous recontacter ? » (Oui/Non)
- Utilisateur : « Oui »
- Bot : « Super — votre nom de famille ? »
- Utilisateur : « Durand »
- Bot : « Votre prénom ? »
- Utilisateur : « Jean »
-
Bot : « Votre e-mail ? »
- si invalide → « L’adresse saisie ne semble pas valide, pouvez-vous confirmer ? »
- Bot : « Votre numéro de mobile (format +33...) ? »
- Bot : « Quel(s) produit(s) vous intéresse(nt) ? [Pirogue solaire] [Nanogrid] [Formation Odoo] [Autre] »
- Bot : « Acceptez-vous que nous vous recontactions ? (oui/non) »
- Bot : renvoie JSON final & message de remerciement.
> exemple d’implémentation simple (Python)
> exemple d’implémentation simple (Python) utilisant la logique RAG + OpenAI (embeddings + chat) et une option recommandée : function-calling pour récupérer un JSON structuré. Vous pouvez copier-coller et adapter.
1) Contenu minimal du RAG (documents à ingérer)
Ce sont de courts documents statiques que l’indexeur va stocker et rendre récupérables par similarité.
Document 1 — Formulaire : champs & validations
Titre: Champs Prospect Contenu: - nom (string, obligatoire) - prenom (string, obligatoire) - email (string, obligatoire, must contain @) - mobile (string, obligatoire, format international recommandé +33 ou 00) - produit_interet (enum: ['Pirogue solaire', 'Nanogrid', 'Formation Odoo', 'Autre']) - consentement_marketing (boolean) Notes: Si mobile manquant, demander; si e-mail invalide, redemander.
Document 2 — Script d’introduction
Titre: Script d'accueil Contenu: - Salutation polie, présentation brève: qui nous sommes et pourquoi on appelle/email. - Exemples: "Bonjour, je suis l’assistant de [NomEntreprise]. Puis-je prendre 30s pour vos coordonnées afin de vous recontacter concernant [produit] ?"
Document 3 — Consentement & RGPD
Titre: Consentement Contenu: - Phrase type: "En partageant vos coordonnées, vous acceptez que [NomEntreprise] vous contacte par téléphone et e-mail pour vous proposer des informations liées à nos produits. Vous pouvez vous désinscrire à tout moment." - Durée conservation: 3 ans (configurable).
Document 4 — Produits (libellés & mini-infos)
Titre: Produits Contenu: - Pirogue solaire : navire solaire, autonomie X heures. - Nanogrid : kit PV + batterie + onduleur, puissance modulable. - Formation Odoo : 3 jours, contenu CRM & Workflow. - Autre : préciser.
2) Schéma de sortie (JSON) — à stocker
{ "nom": "string", "prenom": "string", "email": "string", "mobile": "string", "produit_interet": "string", "commentaire": "string (optionnel)", "consentement_marketing": true, "source": "web/phone/walkin", "timestamp": "2025-09-22T12:34:56Z" }
3) Prompt template (système + récupération RAG)
Utilisez la récupération pour insérer le contexte (extraits des docs RAG) dans le prompt système.
System prompt (exemple) :
Vous êtes un assistant conversationnel professionnel dont la mission est de collecter les coordonnées d'un prospect. - Être poli, bref et clair. - Priorisez la validation des champs obligatoires: nom, prénom, email, mobile, produit_interet, consentement. - Si l'email ou le mobile semble invalide, demandez confirmation. - Proposez une liste pour "produit_interet" si l'utilisateur ne sait pas répondre. - À la fin, retournez uniquement un JSON strict correspondant au schéma fourni (ne pas ajouter d'autres textes) ou utilisez la fonction "save_prospect" si function-calling est activée. Contexte utile (RAG) : {retrieved_documents}
User prompt (runtime):
Collectez les informations du prospect. Commencez par vous présenter et demander l'autorisation de poser 4 questions rapides.
4) Processus complet (étapes pratiques)
- Préparer les documents (les 4 docs ci-dessus + FAQ produit éventuelle).
- Indexer les docs : calculer embeddings et stocker dans un vector DB (Pinecone, Milvus, Weaviate, ou un simple SQLite + faiss local).
-
Flux conversationnel :
- Bot demande permission → si accord → bot pose questions une à une (nom, prénom, email, mobile, produit d’intérêt, consentement).
- À chaque réponse, valider format (regex pour e-mail, téléphone).
- Si manque, redemander le champ manquant.
- Récupération RAG : avant ou pendant la conversation, interroger le vector DB (top-k) et injecter le petit contexte utile dans le prompt (ex : la phrase d’accueil, les libellés produits, la clause RGPD).
- Structuration finale : appeler le modèle en mode function-calling (ou demander explicitement un JSON) pour obtenir le JSON final.
- Stockage : sauvegarder le JSON dans votre base (Odoo, PostgreSQL, MongoDB).
- Confirmations : envoyer un message récapitulatif (optionnel) et un e-mail de consentement si nécessaire.
5) Exemple d’implémentation (Python pseudocode, OpenAI style)
Remplacez OPENAI_API_KEY, vector DB, et noms des fonctions selon votre stack.
# pip install openai import re import openai from datetime import datetime openai.api_key = "OPENAI_API_KEY" # 1) fonction simple de validation def is_valid_email(e): return re.match(r"[^@]+@[^@]+\.[^@]+", e) is not None def is_valid_phone(p): return re.match(r"^\+?\d{8,15}$", p) is not None # 2) Exemple minimal de prompt + function-calling system_prompt = """Vous êtes un assistant... (voir template précédent)""" # function schema for structured output functions = [ { "name": "save_prospect", "description": "Sauvegarde d'un prospect", "parameters": { "type": "object", "properties": { "nom": {"type": "string"}, "prenom": {"type": "string"}, "email": {"type": "string"}, "mobile": {"type": "string"}, "produit_interet": {"type": "string"}, "commentaire": {"type": "string"}, "consentement_marketing": {"type": "boolean"} }, "required": ["nom","prenom","email","mobile","produit_interet","consentement_marketing"] } } ] # 3) Exemple d'appel (après collecte / ou pour demander tout) response = openai.ChatCompletion.create( model="gpt-5-thinking-mini", messages=[ {"role":"system","content":system_prompt}, {"role":"user","content":"Bonjour, je veux enregistrer un prospect. Donnez-moi l'intro."} ], functions=functions, function_call="auto", # permet au modèle d'appeler save_prospect et retourner un JSON max_tokens=400 ) # 4) gérer la function_call if response.choices[0].finish_reason == "function_call": func_args = response.choices[0].message["function_call"]["arguments"] # func_args est un JSON string ; transformez-le en dict et sauvegardez import json prospect = json.loads(func_args) prospect["timestamp"] = datetime.utcnow().isoformat()+"Z" # validations supplémentaires if not is_valid_email(prospect["email"]): # relancer une question au prospect (ex: email invalide) pass # ensuite sauvegarde en base # save_to_db(prospect) print("Prospect prêt à sauvegarder :", prospect)
Remarque : function_call="auto" laisse le modèle décider d'appeler la fonction. Si vous préférez contrôler strictement, vous pouvez récupérer la réponse texte et la parser vous-même.
6) Tips d’UX & bonnes pratiques
- Posez une question par message (évite confusions).
- Utilisez choix multiples pour produit_interet (boutons/quick replies) : augmente le taux de réponse correcte.
- Validez les formats immédiatement (email, portable) pour éviter données erronées.
- Conservez la trace du consentement (texte, timestamp) pour RGPD.
- Limiter l’info demandée : plus c’est court, plus le taux de complétion est élevé.
- Fallback humain : si l’utilisateur insiste pour parler à une personne, transférer vers un CRM (ex : fiche lead dans Odoo).
7) Exemple de dialogue type (flow)
- Bot : « Bonjour, je suis l’assistant de [NomEntreprise]. Puis-je prendre 30s pour noter vos coordonnées afin de vous recontacter ? » (Oui/Non)
- Utilisateur : « Oui »
- Bot : « Super — votre nom de famille ? »
- Utilisateur : « Durand »
- Bot : « Votre prénom ? »
- Utilisateur : « Jean »
-
Bot : « Votre e-mail ? »
- si invalide → « L’adresse saisie ne semble pas valide, pouvez-vous confirmer ? »
- Bot : « Votre numéro de mobile (format +33...) ? »
- Bot : « Quel(s) produit(s) vous intéresse(nt) ? [Pirogue solaire] [Nanogrid] [Formation Odoo] [Autre] »
- Bot : « Acceptez-vous que nous vous recontactions ? (oui/non) »
- Bot : renvoie JSON final & message de remerciement.
8) Points d’intégration (idées)
- Vector DB : indexez les docs RAG (script d’ingestion quotidien si contenu change).
- Webhook : après réception du JSON, poster dans Odoo via son API (création de lead).
- Logs & audit : conservez l’historique conversationnel et la version du modèle utilisé.
- Localisation : proposer FR/MG si besoin (vous l’avez souvent demandé).