Éditeur : intégration IA — analyse critique et réécriture article #96
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Ajouter deux boutons IA dans la sidebar de l'éditeur (
/edit/{uuid}/1) pour soumettre le contenu de l'article à Claude (Anthropic) et afficher le résultat sans quitter la page.Boutons demandés :
Inspiration technique
Le projet
recup-mails(~/Projects/recup-mails/api/ai_core.php) implémente déjà un pattern réutilisable :callAi(cfg, system, userMsg): abstraction multi-provider (OpenAI, Anthropic, Claude Code CLI)api.anthropic.com/v1/messages, clé API en config DB par ownerFolio devra s'en inspirer, adapté à son architecture (pas de DB owner, clé dans
.envouSiteSettings).Architecture proposée
1. Configuration
Ajouter dans
.env(et.env.example) :Alternative : stocker dans
SiteSettings(config admin) pour pouvoir changer le modèle sans redéployer. À trancher.2. Endpoint backend
Nouvelle route :
POST /api/aiFichier :
src/Service/AiService.phpPrompts système :
critique: "Tu es un relecteur expert. Analyse cet article de blog : identifie les faiblesses argumentatives, les imprécisions, les manques de clarté, les points à développer. Réponds en markdown avec des sections claires."rewrite: "Tu es un rédacteur expert. Réécris cet article de blog en améliorant le style, la clarté et la structure, sans changer le sens ni les faits. Conserve le format markdown et les images. Réponds uniquement avec le texte réécrit."L'endpoint vérifie que l'utilisateur est authentifié (
requireAuth()) avant tout appel API.3. Frontend (sidebar éditeur)
Dans
templates/post_form.php, sectioncol-lg-4, sous les boutons Enregistrer/Annuler :JS inline (
post_form.phpouassets/js/editor.js) :#content(textarea) et#titlefetch('POST /api/ai', { action, title, content })#ai-result-panel#contentpar le texte retournéCritères d'acceptation
$action === 'edit')POST /api/aiavec{ action, title, content }.envou admin)claude-haiku-4-5-20251001pour le coût)Fichiers à créer / modifier
src/Service/AiService.phprecup-mails/api/ai_core.php)public/index.phpPOST /api/aitemplates/post_form.php.env.exampleANTHROPIC_API_KEYetAI_MODELconfig/config.phpANTHROPIC_API_KEY/AI_MODELNotes
claude-haiku-4-5-20251001(rapide, peu coûteux pour des articles de blog)confirm()JS)max_tokensgénéreux pour la réécriture (≥ 2000) ; moins pour la critique (≤ 1000)