RAG (OpenAI API + base documentaire à jour) lève 8RAG (OpenAI API + base documentaire à jour)

Un bon RAG (OpenAI API + base documentaire à jour) lève 80–90 % du risque de blocage sur les questions précises (tarifs, cantine, sécurité…) — à condition de soigner le fond (données fiables) et la forme (voix, latence, handoff humain). Voici la recette qui marche en prospection école 👇

A- Ce que le RAG peut vraiment résoudre

 Réponses exactes et sourcées :


  •  le bot lit vos PDFs/politiques/FAQ/tarifs mis à jour et répond avec la phrase officielle (et peut citer la source en interne).

 Personnalisation :


  •  Personnalisation : il adapte les frais et options selon niveau, campus, bourse, fratrie, etc. (via outils/fonctions branchés à Odoo).

 Cohérence de ton

 

  • Cohérence de ton : un prompt de persona “conseiller admissions chaleureux” + exemples de réponses donne un rendu pro.

B- Ce que le RAG ne suffit pas à régler (sans design vocal)

 Confiance/“chaleur”


  •  Confiance/“chaleur” : ça se joue sur la prosodie (TTS), la latence (<1 s), les relances naturelles et la capacité d’interruption (barge-in).

 Acceptabilité


 Acceptabilité : dire clairement que c’est un assistant vocal de l’école et proposer immédiatement un humain à la moindre hésitation.

 Cas sensibles

 

  • Cas sensibles (handicap, bourses, discipline) : même avec RAG, transfert humain recommandé.


C- Schéma cible (qui évite la frustration)

  1. OpenAI Realtime (voix↔LLM)
  2. Outils (function calling)
    1. get_fees(level, campus, siblings, scholarship) → Odoo
    2. book_visit(slot) → calendrier admissions
    3. send_brochure(email/WhatsApp)
  3. RAG (vecteur + FAQ/contrats/cantine/sécurité) + règles de citation interne
  4. Policies
    1. Se présente comme assistant.
    2. Se tait quand on parle (barge-in).
    3. Seuil de confiance : si < 0,75 → “Je préfère vous passer un conseiller.”
    4. 3 échanges incertains → handoff humain.
    5. Mots-clés sensibles → handoff direct.

 Bonnes pratiques (concrètes)

  • Data : unifier tarifs/horaires en tables “source unique” (Odoo) + FAQ “phrases officielles” (RAG).
  • Prompting : persona + style + gabarit de réponse court (1–2 phrases + proposition d’action).
  • Parole : TTS avec pauses/intonations; réponses < 8 s; reformulations empathiques (“je comprends”).
  • Handoff : bouton DTMF/voix “parler à un conseiller” dispo à tout moment.
  • Traçabilité : résumé + transcription + champs CRM (intérêt, niveau, prochaine action).
  • Sécurité/RGPD : consentement vocal court + bannir infos sensibles; logs chiffrés; durée de rétention définie.

 Exemple d’interaction (flux)

 

Parent : “Combien coûte l’inscription en CE2 et y a-t-il une cantine ?”

Assistant (RAG+outil) : “Pour CE2 à Campus Victor-Hugo, les frais annuels sont 2 450 € (inscription incluse). La cantine est optionnelle à 7,10 € / jour avec menu équilibré. Vous voulez que je vous envoie la brochure et proposer un créneau de visite ?”

(si parent creuse sur allergènes → fiche cantine RAG; si doute détecté → “je vous mets avec Claire, conseillère”)

Mini-checklist de mise en prod


  • Tarifs/horaires/cantine/sécurité = tables fiables + FAQ officielles.
  • Seuil de confiance + règles de transfert.
  • Barge-in activé + latence mesurée.
  • Scripts sensibles ⇒ humain.
  • Journalisation vers Odoo CRM (lead, statut, prochaine étape).
  • Message d’ouverture + consentement transparents.

Verdict


  • Oui, un RAG bien conçu enlève la plupart des blocages “contenu”.


  •  Pour la confiance, il faut voix naturelle + réactivité + handoff humain.
  • Le meilleur usage : qualification et prise de rendez-vous (avec réponses précises), puis conseiller humain pour le lien parental.


.

ANNEXES : 1) Persona (prompt système) – Assistant Admissions École

1) Persona (prompt système) – Assistant Admissions École

Vous êtes “Lina”, assistante d’admissions d’une école privée. Objectif: qualifier le parent, répondre précisément selon les données officielles (RAG + Odoo), puis proposer une action (RDV, brochure, visite). Style: chaleureux, concis, non insistant. Phrases courtes. Reformuler si incompris. Jamais d’affirmation sans source interne. Règles: - Transparence: “Je suis l’assistante vocale de l’école.” (dès l’ouverture) - Barge-in: s’arrête immédiatement si l’interlocuteur parle. - Si confiance < 0.75 ou question sensible (handicap, discipline, litige, sécurité avancée): transférer à un conseiller humain. - Toujours proposer une action suivante claire (RDV, envoi brochure, rappel…). - Ne pas inventer. Si donnée manquante: “Je préfère vous passer un conseiller.” Format de réponse (voix): [réponse principale en 1–2 phrases] + [question d’action]

2) Corpus RAG – structure minimale (à indexer)

A. Fiches “réponses officielles” (FAQ atomisées)

  • id | catégorie (Tarifs/Cantine/Sécurité/Pédagogie/Transports/Bourses…) | intitulé | réponse_officielle (≤120 mots) | sources (URL interne/nom doc) | dernière_maj (YYYY-MM-DD) | campus[] | niveaux[]
  • Exemple d’intitulés : “Tarifs CE2 campus Victor-Hugo”, “Allergènes cantine”, “Surveillance périscolaire”, “Bourses – critères”, “Pédagogie cycle 2”.

B. Tables de référence (pour outils)

  • tarifs: campus, niveau, frais_annuels, frais_inscription, mensualités, réductions_fratrie, bourses_disponibles (bool)
  • cantine: campus, prix_jour, régimes, allergènes_politique, horaires, fournisseur
  • sécurité: campus, protocoles_synthèse, accès, surveillance, contacts_urgence
  • visites: campus, créneaux_disponibles (synchro agenda)

C. Documents longs (PDF/Doc)

  • Règlement intérieur (sections balisées), Projet éducatif, Brochure, Charte sécurité, Menus types.
  • Chunking conseillé: ~800–1200 tokens, chevauchement 100–150, métadonnées = campus/niveau/version.

D. Garde-fous

  • Liste “mots/intentions sensibles” ⇒ déclenche transfert humain (handicap, harcèlement, litige, plainte, PAI détaillé, urgence…).

3) Outils (function calling) à brancher sur Odoo

(contrats d’API — JSON)

get_fees

  • input: { "campus": "Victor-Hugo", "niveau": "CE2", "enfants_fratrie": 2, "bourse_potentielle": true }
  • output: { "frais_annuels": 2450, "frais_inscription": 180, "mensualites": 245, "reduction_fratrie": 10, "devise": "EUR", "source": "tarifs_2025_v3" }

get_canteen

  • input: { "campus": "Victor-Hugo", "niveau": "CE2" }
  • output: { "prix_jour": 7.1, "regimes": ["standard","végétarien"], "politique_allergenes": "PNNS-3, protocole PAI", "horaires": "12:00–13:30" }

book_visit

  • input: { "campus": "Victor-Hugo", "parent_nom": "Dupont", "parent_tel": "+33...", "email": "x@x.fr", "créneau_souhaité": "2025-09-21T17:30:00+02:00" }
  • output: { "rdv_id": "VIS-8472", "créneau_confirmé": "2025-09-21T17:30:00+02:00", "lieu": "Hall Admissions", "ics_url": "..." }

send_brochure

  • input: { "canal": "whatsapp|email|sms", "dest": "+33...|mail", "campus": "Victor-Hugo", "niveau": "CE2", "lang": "fr" }
  • output: { "status": "sent", "message_id": "..." }

create_or_update_lead

  • input: { "source": "appel_IA", "parent_nom": "Dupont", "tel": "+33...", "email": "x@x.fr", "intérêt": {"campus":"Victor-Hugo","niveau":"CE2"}, "état": "à_qualifier", "consent_whatsapp": true }
  • output: { "lead_id": "CRM-10932", "stage": "À qualifier" }

log_call_summary

  • input: { "lead_id": "CRM-10932", "transcription_url": "...", "audio_url": "...", "résumé": "Parent intéressé CE2, visite souhaitée", "sentiment": "positif" }
  • output: { "ok": true }

Côté Odoo Online: exposez ces endpoints via un controller (Odoo.sh / Odoo Cloud + module custom) ou via Odoo RPC derrière un micro-service. Normalisez les niveaux (CP, CE1, CE2…), les IDs campus, et sécurisez par token + IP allowlist.

4) Politique de confiance & handoff (exécutable)

  • Seuil modèle: si confidence < 0.75 → “Je préfère vous mettre en relation avec un conseiller.” (puis handoff()).
  • 3 incertitudes consécutives (ex: “je ne suis pas sûr”) → handoff().
  • Intent sensible détectée → handoff() immédiat.
  • À tout moment si l’utilisateur dit “parler à quelqu’un” → handoff().

5) Cadrage vocal (qualité perçue)

  • Latence bout-en-bout (ASR→LLM→TTS): cible < 800 ms sur réponses courtes.
  • Tours de parole: < 8 s par réponse; autoriser barge-in.
  • Prosodie: pause courte avant chiffres/prix; reformulation empathique si hésitation détectée.

6) Script d’ouverture (RGPD + transparence)

“Bonjour, je suis l’assistante vocale de [Nom de l’école]. Cet appel peut être enregistré pour améliorer notre accueil. Souhaitez-vous continuer ? Vous pouvez à tout moment demander à parler à un conseiller.”

7) Exemple de flux (pseudo-code)

onCallStart -> greet() if !consent: end() ask_goal() -> intent if intent in ["tarifs","cantine","visite"]: facts = RAG.retrieve(question) if needs_live_data: facts += tool.get_*(params from slots) if confidence >= 0.75: reply(facts.short_answer + propose_next_action) if user_wants_visit: tool.book_visit(...) if user_wants_brochure: tool.send_brochure(...) tool.create_or_update_lead(...) else: handoff() else: handoff() onCallEnd -> tool.log_call_summary(...)

8) Dataset d’exemples (few-shots) – ton & précision

  • Tarifs
    Parent: “Le prix pour CE2 à Victor-Hugo ?”
    Assistant: “Pour CE2 à Victor-Hugo, c’est 2 450 € par an, inscription incluse. Souhaitez-vous un créneau de visite cette semaine ou que je vous envoie la brochure ?”
  • Allergènes cantine
    Parent: “Mon enfant est allergique aux arachides.”
    Assistant: “La cantine applique un protocole PAI et exclut les arachides des menus. Pour un dossier adapté, je peux vous passer notre conseillère santé scolaire.”

9) Check-list de mise en prod

  • FAQ atomisée + tables tarifs/cantine/sécurité fiables (source unique Odoo).
  • Indexation RAG (chunking + métadonnées campus/niveau/version).
  • Outils Odoo testés (sandbox) + contrats ci-dessus.
  • Seuils de confiance + règles de handoff en place.
  • Script RGPD et consentement vocal activés.
  • Journalisation automatique → Odoo CRM (lead, prochaine action, transcription).
  • Tests utilisateurs (10–15 appels réels) → itérations sur ton, latence, réponses.