---
suivi: 1424
date: 2026-09-03
sujet: Aktor — réponses plus brèves et directes
chantier: aktor
type: fix
statut: poussé
hash: 9465a066
fichiers:
  - app/Services/Assistant/AssistantAnthropicService.php
  - tests/Unit/AssistantGroundingPromptTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - docs/suivi/SUIVI_1424_aktor_concision.md
---

## PROMPT ENVOYÉ

SUIVI #1424 — consigne de concision dans le prompt système Aktor (tous utilisateurs,
tous points d'entrée). Ne pas toucher OCR, max_tokens, quota 25, AideVisibiliteService,
ni consignes de sécurité / anti-fuite. ÉTAPE 0 mesures obligatoires avant code.

## SYNTHÈSE

### ÉTAPE 0
- Prompt : `AssistantAnthropicService::buildSystemBlocks` (heredoc `$instructions`),
  fichier `app/Services/Assistant/AssistantAnthropicService.php` (~L205–L297).
  Pas en config, pas en base.
- Longueur déjà : « direct », « Indique brièvement la provenance », « commence
  directement par la réponse » (#935) — pas de plafond 3–5 phrases.
- Modèle : `config('assistant.model')` = `claude-sonnet-4-5` ; fallback
  `claude-haiku-4-5` ; `max_tokens` = 8192 (inchangé) ; pas de `temperature`
  (défaut API).
- OCR séparé : `DepotFactureClaudeAnalysisService` / `NfHabitatClaudeExtractionService`
  ont leurs propres `system` JSON. Clé API partagée uniquement. Clause d'arrêt non
  déclenchée.
- Base prod inaccessible ici → requête de mesure fournie dans le livrable.
- Fiches lues : #1027 (prompt cadrage), #1044/#1046/#1152/#1153 (LEÇON HTTPS CLI) —
  pas de consigne longueur antérieure.

### Correctif
Bloc `CONCISION (#1424)` ajouté juste avant `GROUNDING`. Sécurité / anti-fuite /
GROUNDING / TÂCHES #922 inchangés mot pour mot. `max_tokens` 8192 conservé.
Journal utilisateur + test unitaire (assert CONCISION + anti-fuite).

## DÉPLOIEMENT / TEST

```bash
git pull origin main
php artisan view:clear
php artisan journal:sync
```

Mesure avant/après (prod, après pull) :

```sql
SHOW COLUMNS FROM assistant_messages;
SELECT AVG(CHAR_LENGTH(contenu)) AS avg_chars,
       AVG(CHAR_LENGTH(contenu)) AS avg_chars_alias,
       COUNT(*) AS n
FROM (
  SELECT contenu FROM assistant_messages
  WHERE role = 'assistant'
  ORDER BY id DESC
  LIMIT 50
) t;
```

Protocole 3 questions sur `/aktor` : simple dépôt facture ; procédure complète ;
hors périmètre (refus grounding).

## LEÇON

La brièveté Aktor se pilote dans le prompt chat (`AssistantAnthropicService`), pas
via `max_tokens` ni via un fichier partagé avec l'OCR. Le filtrage anti-fuite reste
couche 1 (retrieval / `AideVisibiliteService`) ; le prompt ne fait que rappeler le
périmètre des blocs déjà filtrés.
