mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-10-27 16:07:10 +00:00
V1.23.24 Externalisation des prompts et évolutions des collaborateurs
This commit is contained in:
+15
-53
@@ -74,6 +74,7 @@
|
||||
session_start();
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
require __DIR__ . '/db.php';
|
||||
require __DIR__ . '/moteur_prompts.php';
|
||||
|
||||
if (empty($_SESSION['USR_Code'])) {
|
||||
http_response_code(401);
|
||||
@@ -236,59 +237,20 @@ $listeActions = $actionsDisponibles
|
||||
? implode(', ', array_map(fn($a) => $a['ACT_Code'] . ' = ' . $a['ACT_Libelle'], $actionsDisponibles))
|
||||
: '(aucune action de référence configurée)';
|
||||
|
||||
$promptSysteme = <<<PROMPT
|
||||
Tu extrais des informations de contact professionnel (prospection commerciale
|
||||
d'un CRM français) à partir d'une dictée vocale libre en français, brute et
|
||||
parfois hésitante (hésitations, reprises, "euh", phrases inachevées).
|
||||
|
||||
Règles impératives :
|
||||
- N'invente RIEN. Un champ non mentionné clairement, ou ambigu, reste null.
|
||||
- Ne devine jamais une orthographe que tu ne peux pas déduire du texte fourni.
|
||||
- CNT_Statut : uniquement l'un de ces codes exacts, ou null si aucun statut
|
||||
n'est évoqué : {$listeStatuts}
|
||||
- Profession : compare ce qui est dicté à cette liste existante (id = libellé) :
|
||||
{$listeProfessions}
|
||||
Si une correspondance claire existe, renvoie profession_existante_id (et
|
||||
laisse profession_nouvelle_libelle à null). Sinon, si une profession est
|
||||
bien mentionnée mais absente de la liste, renvoie son libellé dans
|
||||
profession_nouvelle_libelle (et laisse profession_existante_id à null). Si
|
||||
aucune profession n'est mentionnée, les deux restent null.
|
||||
- CNT_Notes : tout ce qui est dit et utile au contact mais qui ne correspond
|
||||
à aucun champ structuré ci-dessus (contexte de rencontre, centres
|
||||
d'intérêt, demande explicite comme "envoyer la doc", remarques...) — un
|
||||
résumé concis en français, pas nécessairement mot pour mot. Ne recopie pas
|
||||
dans les notes une information déjà correctement placée dans un champ.
|
||||
- Un numéro de téléphone fixe va dans CNT_Tel, un mobile dans CNT_Portable ;
|
||||
si le type n'est pas précisé et qu'un seul numéro est dicté, mets-le dans
|
||||
CNT_Tel.
|
||||
- CNT_Mail : une adresse mail ne contient JAMAIS d'accent (é, è, à, ç, ï...).
|
||||
Si la transcription dictée en laisse apparaître un dans ce qui doit devenir
|
||||
une adresse mail, retire l'accent (é→e, è→e, à→a...) plutôt que de le
|
||||
recopier tel quel — ne jamais produire une adresse mail accentuée.
|
||||
- assistant_id : l'assistant explicitement nommé par la dictée, parmi cette
|
||||
liste (id = nom) : {$listeAgents}
|
||||
Ne renvoie un id que si un de ces noms (ou une de ses variantes tolérées)
|
||||
est clairement prononcé. Aucun assistant nommé → null, ne suppose JAMAIS un
|
||||
assistant par défaut.
|
||||
- actions : identifie chaque action explicitement demandée dans la dictée
|
||||
(ex. "il faut lui envoyer la doc", "envoyer une proposition de tarif",
|
||||
"ajoute ce contact"...). Compare à cette liste existante (code = libellé) :
|
||||
{$listeActions}
|
||||
Pour chaque action reconnue, renvoie action_existante_code si elle
|
||||
correspond clairement à un code de cette liste (action_nouvelle_libelle
|
||||
reste null), sinon renvoie son libellé en français dans
|
||||
action_nouvelle_libelle (action_existante_code reste null). Un tableau vide
|
||||
si aucune action n'est explicitement demandée — ne déduis jamais une action
|
||||
qui ne serait qu'implicite ou probable.
|
||||
La création/l'ajout du contact lui-même ("ajoute ce contact", "crée-le",
|
||||
"enregistre ce contact"...) est une action à part entière au même titre
|
||||
que les autres, même si elle n'a pas de code dans la liste ci-dessus —
|
||||
utilise alors exactement le libellé "Ajouter le contact" dans
|
||||
action_nouvelle_libelle (formulation fixe, pour rester comparable d'une
|
||||
dictée à l'autre). Quand elle est demandée, place-la TOUJOURS en premier
|
||||
dans le tableau actions, avant les autres actions éventuelles (envoyer une
|
||||
doc, etc.) : c'est en général la première chose voulue chronologiquement.
|
||||
PROMPT;
|
||||
// Texte sorti du code le 11 septembre 2026 — voir moteur_prompts.php pour le
|
||||
// texte par défaut/la table ASP_Prompts, bo_prompts.html pour l'édition.
|
||||
try {
|
||||
$promptSysteme = chargerPromptSysteme($pdo, 'CONTACT_IA_INTERPRETE', [
|
||||
'{{LISTE_STATUTS}}' => $listeStatuts,
|
||||
'{{LISTE_PROFESSIONS}}' => $listeProfessions,
|
||||
'{{LISTE_AGENTS}}' => $listeAgents,
|
||||
'{{LISTE_ACTIONS}}' => $listeActions,
|
||||
]);
|
||||
} catch (Throwable $e) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Prompt système indisponible : ' . $e->getMessage()]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// -------- Appel OpenAI --------
|
||||
$corpsRequete = [
|
||||
|
||||
Reference in New Issue
Block a user