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)

  1. Bot : « Bonjour, je suis l’assistant de [NomEntreprise]. Puis-je prendre 30s pour noter vos coordonnées afin de vous recontacter ? » (Oui/Non)
  2. Utilisateur : « Oui »
  3. Bot : « Super — votre nom de famille ? »
  4. Utilisateur : « Durand »
  5. Bot : « Votre prénom ? »
  6. Utilisateur : « Jean »
  7. Bot : « Votre e-mail ? »
    • si invalide → « L’adresse saisie ne semble pas valide, pouvez-vous confirmer ? »
  8. Bot : « Votre numéro de mobile (format +33...) ? »
  9. Bot : « Quel(s) produit(s) vous intéresse(nt) ? [Pirogue solaire] [Nanogrid] [Formation Odoo] [Autre] »
  10. Bot : « Acceptez-vous que nous vous recontactions ? (oui/non) »
  11. 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)

  1. Préparer les documents (les 4 docs ci-dessus + FAQ produit éventuelle).
  2. Indexer les docs : calculer embeddings et stocker dans un vector DB (Pinecone, Milvus, Weaviate, ou un simple SQLite + faiss local).
  3. 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.
  4. 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).
  5. Structuration finale : appeler le modèle en mode function-calling (ou demander explicitement un JSON) pour obtenir le JSON final.
  6. Stockage : sauvegarder le JSON dans votre base (Odoo, PostgreSQL, MongoDB).
  7. 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)

  1. Bot : « Bonjour, je suis l’assistant de [NomEntreprise]. Puis-je prendre 30s pour noter vos coordonnées afin de vous recontacter ? » (Oui/Non)
  2. Utilisateur : « Oui »
  3. Bot : « Super — votre nom de famille ? »
  4. Utilisateur : « Durand »
  5. Bot : « Votre prénom ? »
  6. Utilisateur : « Jean »
  7. Bot : « Votre e-mail ? »
    • si invalide → « L’adresse saisie ne semble pas valide, pouvez-vous confirmer ? »
  8. Bot : « Votre numéro de mobile (format +33...) ? »
  9. Bot : « Quel(s) produit(s) vous intéresse(nt) ? [Pirogue solaire] [Nanogrid] [Formation Odoo] [Autre] »
  10. Bot : « Acceptez-vous que nous vous recontactions ? (oui/non) »
  11. 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é).

Snippet prêt à coller pour Odoo (API call) afin de créer le lead automatiquement.



Découvrir plus