Checkpoint: Implémentation du résumé automatique généré par l'IA pour chaque article RSS (veille et AAP), marquage lu/non lu avec point bleu et fond teinté, bouton "Tout marquer comme lu", compteurs non lus dans la sidebar et dans les titres de page. Migration BDD : table article_reads + colonne iaResume dans veille_items et aap_items.
This commit is contained in:
@@ -202,6 +202,49 @@ async function classifyCategory(
|
||||
}
|
||||
}
|
||||
|
||||
// ─── Prompt 3 : Génération de résumé IA ──────────────────────────────────────────
|
||||
|
||||
const PROMPT_RESUME = `Tu es un expert des établissements et services sociaux et médico-sociaux (ESMS).
|
||||
Tu dois rédiger un résumé clair et professionnel de l'article fourni, destiné aux professionnels du secteur médico-social.
|
||||
|
||||
Consignes :
|
||||
- Rédige 3 à 5 phrases en français, en langage clair et accessible
|
||||
- Mets en avant les points clés : qui est concerné, quelle mesure ou information, quel impact pour les structures
|
||||
- Reste factuel et objectif, sans jugement de valeur
|
||||
- N'utilise pas de listes à puces, écris en prose
|
||||
- Ne commence pas par "Cet article" ou "Le texte"
|
||||
- Adapte le vocabulaire au secteur médico-social (ESMS, ARS, MDPH, etc.)
|
||||
|
||||
Réponds UNIQUEMENT avec le texte du résumé, sans introduction ni conclusion.`;
|
||||
|
||||
/**
|
||||
* Génère un résumé IA de 3-5 phrases pour un article pertinent.
|
||||
* Retourne null en cas d'échec (le résumé brut RSS sera utilisé à la place).
|
||||
*/
|
||||
export async function generateSummary(
|
||||
titre: string,
|
||||
resume: string
|
||||
): Promise<string | null> {
|
||||
const userContent = `Titre : ${titre}\n\nContenu : ${resume}`;
|
||||
|
||||
try {
|
||||
const response = await invokeLLM({
|
||||
messages: [
|
||||
{ role: "system", content: PROMPT_RESUME },
|
||||
{ role: "user", content: userContent },
|
||||
],
|
||||
});
|
||||
|
||||
const rawContent = response?.choices?.[0]?.message?.content;
|
||||
if (!rawContent) return null;
|
||||
const text = typeof rawContent === "string" ? rawContent.trim() : null;
|
||||
return text && text.length > 20 ? text : null;
|
||||
} catch (e) {
|
||||
console.error("[AI Classifier] Erreur génération résumé:", (e as Error).message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// ─── Point d'entrée principal ─────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user