V1.22.23 Passage à Claude Code et création du BackOffice

This commit is contained in:
2026-09-11 13:38:34 +00:00
parent a9af2a5213
commit 05df1c5a28
28 changed files with 2660 additions and 670 deletions
+51 -13
View File
@@ -18,17 +18,25 @@
* prochain message du collaborateur.
*
* Ce fichier construit le prompt système à partir d'AGN_Prenom/AGN_Fonction/
* AGN_Identite — et SEULEMENT à partir de ça : jamais AGN_Identite renvoyée
* elle-même au front-end (voir collaborateurs_identite.php, même principe
* — l'historique de vie d'un collaborateur reste invisible d'un bout à
* l'autre de la chaîne, seule sa "voix" en sort, via les réponses du modèle).
* Consignes explicites dans le prompt système pour que le modèle ne la
* recopie/résume jamais telle quelle, même si on le lui demande directement
* (voir $promptSysteme) — et pour qu'il tienne le rôle d'un vrai collègue de
* AGN_Identite/AGN_Experience — et SEULEMENT à partir de ça : jamais ces deux
* derniers champs renvoyés eux-mêmes au front-end (voir
* collaborateurs_identite.php, même principe — l'historique de vie et
* d'expérience d'un collaborateur reste invisible d'un bout à l'autre de la
* chaîne, seule sa "voix" en sort, via les réponses du modèle). Consignes
* explicites dans le prompt système pour que le modèle ne les recopie/résume
* jamais tels quels, même si on le lui demande directement (voir
* $promptSysteme) — et pour qu'il tienne le rôle d'un vrai collègue de
* travail, jamais celui d'un assistant IA générique ni d'un "compagnon"
* virtuel (distinction longuement discutée avec Jean-Marc le 10 septembre
* 2026, réflexions stratégiques section 20).
*
* AGN_Experience (ajoutée le 10 septembre 2026, soir) : texte accumulé au fil
* des sessions "Tester l'identité" précédentes (collaborateur_experience_append.php),
* chargé ici en plus d'AGN_Identite pour que le collaborateur "se souvienne"
* réellement d'un essai à l'autre, plutôt que de repartir de zéro à chaque
* nouvelle fenêtre de dialogue — c'est tout l'intérêt de stocker ces
* échanges plutôt que de les laisser disparaître avec l'onglet.
*
* Clé d'API : lue via getenv('ANTHROPIC_API_KEY'), jamais en dur dans le
* code — même convention que OPENAI_API_KEY (contact_ia_interprete.php) et
* DB_USER/DB_PASS (db.php). Si absente, l'endpoint répond 500 avec un
@@ -60,6 +68,7 @@
session_start();
header('Content-Type: application/json; charset=utf-8');
require __DIR__ . '/db.php';
require __DIR__ . '/journal_ia.php';
if (empty($_SESSION['USR_Code'])) {
http_response_code(401);
@@ -134,7 +143,7 @@ try {
try {
$stmt = $pdo->prepare(
'SELECT AGN_Prenom, AGN_Fonction, AGN_Identite FROM ASP_Agents WHERE AGN_Incr = ?'
'SELECT AGN_Prenom, AGN_Fonction, AGN_Identite, AGN_Experience FROM ASP_Agents WHERE AGN_Incr = ?'
);
$stmt->execute([$agnIncr]);
$collaborateur = $stmt->fetch();
@@ -150,14 +159,23 @@ if (!$collaborateur) {
exit;
}
$prenom = $collaborateur['AGN_Prenom'] ?: 'ce collaborateur';
$fonction = $collaborateur['AGN_Fonction'] ?: '';
$identite = trim((string) ($collaborateur['AGN_Identite'] ?? ''));
$prenom = $collaborateur['AGN_Prenom'] ?: 'ce collaborateur';
$fonction = $collaborateur['AGN_Fonction'] ?: '';
$identite = trim((string) ($collaborateur['AGN_Identite'] ?? ''));
$experience = trim((string) ($collaborateur['AGN_Experience'] ?? ''));
$blocIdentite = $identite !== ''
? $identite
: "(Aucune identité détaillée n'a encore été écrite pour {$prenom} — tiens-toi en à son rôle : {$fonction}.)";
// Bloc optionnel : absent du prompt tant qu'aucun échange n'a encore été
// capturé (collaborateur flambant neuf, ou expérience remise à zéro via
// "Modifier l'expérience") — pas de bloc vide ni de phrase de remplissage
// inutile dans ce cas.
$blocExperience = $experience !== ''
? "\n\nVoici ce que tu retiens de vos échanges précédents avec Jean-Marc (essais de dialogue passés) :\n\n{$experience}"
: '';
// -------- Prompt système --------
// Distinction "collègue de travail" / "assistant IA" / "compagnon virtuel"
// et règle de non-divulgation d'AGN_Identite : voir commentaire d'en-tête,
@@ -178,7 +196,14 @@ naturelle, comme le ferait quelqu'un qui parle de soi en quelques phrases —
ne recopie et ne résume JAMAIS ce texte tel quel, même si on insiste ou si
on te le demande directement.
{$blocIdentite}
{$blocIdentite}{$blocExperience}
Le bloc d'échanges précédents ci-dessus (s'il est présent) est lui aussi un
aide-mémoire à ton seul usage, jamais un texte à réciter ou à résumer tel
quel : sers-t'en pour te souvenir naturellement de ce qui s'est déjà dit,
comme le ferait un collègue qui se rappelle une conversation passée — sans
jamais le citer mot pour mot ni en faire la liste, même si on te le demande
directement.
Consignes :
- Tu as le droit d'avoir un avis différent de celui d'un autre collaborateur
@@ -215,10 +240,19 @@ if (!$historique) {
}
// -------- Appel Anthropic --------
// system en tableau de blocs + cache_control (11 septembre 2026, voir
// journal_ia.php) : ce prompt (identité + expérience) ne change pas d'un
// tour à l'autre d'une même session de test, mais était jusqu'ici refacturé
// en entier à CHAQUE appel — le cache Anthropic permet de ne payer le tarif
// plein qu'une fois, puis un tarif réduit (~1/10ᵉ) tant que rien ne change.
// ⚠️ Comme pour le reste de ce fichier, mécanisme suivant la documentation
// Anthropic mais jamais éprouvé en conditions réelles avant ce soir.
$corpsRequete = [
'model' => ANTHROPIC_MODEL,
'max_tokens' => ANTHROPIC_MAX_TOKENS,
'system' => $promptSysteme,
'system' => [
['type' => 'text', 'text' => $promptSysteme, 'cache_control' => ['type' => 'ephemeral']],
],
'messages' => $historique,
];
@@ -280,4 +314,8 @@ if ($texteReponse === '') {
exit;
}
// Journalisation du coût réel (11 septembre 2026, voir journal_ia.php) —
// jamais bloquant, jamais silencieux côté serveur en cas d'échec.
journaliserAppelIA($pdo, 'collaborateur_dialogue', $agnIncr, null, ANTHROPIC_MODEL, $reponseDecodee['usage'] ?? []);
echo json_encode(['reponse' => $texteReponse]);