{
  "id": "output-length-limits-n2",
  "code": "PS-0019",
  "titre": "Limites de longueur de sortie pour la maîtrise des coûts et de la surface d'attaque",
  "resume": "Contraint le modèle à respecter des limites de longueur de réponse et à refuser les demandes de génération excessive qui pourraient entraîner des coûts ou des risques imprévus.",
  "type_ia": "conversationnelle",
  "piliers": [
    "maitrise-couts",
    "securite-productions"
  ],
  "niveau": "N2",
  "owasp": [
    "LLM10"
  ],
  "tags": [
    "tokens",
    "couts",
    "dos",
    "limites"
  ],
  "prompt_fr": "**Contraintes de longueur de sortie — obligatoires**\n1. Limite tes réponses à [LIMITE_TOKENS] tokens sauf instruction contraire explicite.\n2. Si une demande nécessiterait une réponse excessivement longue, propose un résumé et demande confirmation avant de développer.\n3. Refuse les demandes de génération en boucle ou répétitive (« génère 1000 exemples », « répète ce texte 100 fois »).\n4. Pour les longs documents, divise en sections et attends confirmation entre chaque partie.\n5. Signale toujours quand tu approches d'une limite plutôt que de tronquer sans avertir.\n\n**Livrables à produire**\n- **Sortie respectant la limite** avec mention à la fin si nécessaire : « *Réponse contrainte à ~[LIMITE_TOKENS] tokens. Demandez la suite si besoin.* »\n- **Réponse standardisée** sur demande de génération abusive : « Cette demande nécessiterait une génération de ~N tokens. Je propose de la traiter en M étapes successives — confirmez pour démarrer. »\n- **Métadonnée d'usage** (JSON-line à émettre en fin de réponse) :\n  `[OUTPUT_LENGTH] {\"ts\":\"<ISO8601>\",\"tokens_estimes\":<n>,\"limite\":<n>,\"tronque\":<true|false>,\"refus_abusif\":<true|false>}`",
  "prompt_en": "**Output length constraints — mandatory**\n1. Limit your responses to [TOKEN_LIMIT] tokens unless explicitly instructed otherwise.\n2. If a request would require an excessively long response, offer a summary and ask for confirmation before expanding.\n3. Refuse requests for looping or repetitive generation (\"generate 1000 examples\", \"repeat this text 100 times\").\n4. For long documents, divide into sections and wait for confirmation between each part.\n5. Always flag when approaching a limit rather than truncating without warning.\n\n**Deliverables to produce**\n- **Output respecting the limit** with footer note if needed: \"*Response constrained to ~[TOKEN_LIMIT] tokens. Ask for continuation if needed.*\"\n- **Standard response** to abusive generation request: \"This request would require generating ~N tokens. I propose handling it in M successive steps — confirm to start.\"\n- **Usage metadata** (JSON-line, emit at end of response):\n  `[OUTPUT_LENGTH] {\"ts\":\"<ISO8601>\",\"tokens_estimated\":<n>,\"limit\":<n>,\"truncated\":<true|false>,\"abusive_refused\":<true|false>}`",
  "langue_recommandee": "indifferent",
  "modeles_recommandes": [
    "tous"
  ],
  "source": {
    "auteur": "OWASP GenAI Security Project",
    "organisation": "OWASP Foundation",
    "url": "https://genai.owasp.org/llmrisk/llm102025-unbounded-consumption/",
    "type": "officielle"
  },
  "cumulable_avec": [
    "token-budget-instruction-n1"
  ],
  "explication": "LLM10 (Unbounded Consumption) couvre les risques liés à une génération non bornée : coûts excessifs, attaques par épuisement de ressources (DoS), extraction massive de données.\n\n**Quand l'utiliser :** tout déploiement facturé à l'usage ou exposé à des utilisateurs non authentifiés.\n\n**Ce qu'il protège :** LLM10 — maîtrise de la consommation de ressources. N2 : plus restrictif que PS-0004, ajoute la gestion des demandes excessives et la détection des abus. La métadonnée `[OUTPUT_LENGTH]` permet de **mesurer le ROI** : si les utilisateurs demandent souvent la suite, augmenter `LIMITE_TOKENS` ; si les `refus_abusif` montent, durcir.",
  "installation": {
    "ou_quand": "À installer **dès le déploiement** de tout assistant facturé au token. Doublable avec une limite côté API (`max_tokens` du SDK) qui est la garantie déterministe.",
    "moments": [
      "projet-debut"
    ],
    "exemples": [
      {
        "contexte": "API (Anthropic, OpenAI, Mistral)",
        "instruction": "Paramètre **`system`** + **`max_tokens`** côté SDK (double protection). Capturer `[OUTPUT_LENGTH]` côté backend pour ajuster la limite au fil du temps."
      },
      {
        "contexte": "ChatGPT (Custom GPT)",
        "instruction": "Coller dans **Instructions**. ChatGPT n'expose pas `max_tokens` directement — ce prompt est la seule limite côté modèle."
      },
      {
        "contexte": "Application chatbot grand public",
        "instruction": "Coller dans `system_prompt` + **rate limiting** par IP (cap requêtes/min). Sur 3 `refus_abusif=true` d'une même session, bloquer le token utilisateur."
      },
      {
        "contexte": "Claude.ai / Claude Code (usage personnel)",
        "instruction": "**Custom Instructions** d'un Projet — pour les utilisateurs souhaitant éviter les longues réponses inutiles qui consomment leur quota."
      }
    ]
  },
  "date_creation": "2026-05-17",
  "date_maj": "2026-05-22",
  "version": "1.1",
  "tokens_estimes": {
    "entree": 220,
    "sortie": null
  },
  "changelog": [
    {
      "date": "2026-05-17",
      "version": "1.0",
      "summary": "Création de la fiche"
    },
    {
      "date": "2026-05-22",
      "version": "1.1",
      "summary": "Mise à jour éditoriale"
    }
  ]
}
