Générateur de titre de sujet : le LLM renvoie des options valides, mais le titre échoue au parsing/affichage

Suite de 500 internal server error using 'suggest topic title' AI helper

v2026.11.0-latest +19

Mis à jour, il ne génère plus d’erreur 500, mais il échoue à proposer un titre à l’utilisateur.

Journaux LLM :

Requête

{
  "model": "deepseek-3.2",
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "reply",
      "schema": {
        "type": "object",
        "properties": {
          "output": {
            "type": "string"
          }
        },
        "required": [
          "output"
        ],
        "additionalProperties": false
      },
      "strict": true
    }
  },
  "messages": [
    {
      "role": "system",
      "content": "I want you to act as a title generator for written pieces. I will provide you with a text,\nand you will generate five titles. Please keep the title concise and under 20 words,\nand ensure that the meaning is maintained. Replies will utilize the language type of the topic.\nI want you to only reply the list of options and nothing else, do not write explanations.\nNever ever use colons in the title. Always use sentence case, using a capital letter at\nthe start of the title, never start the title with a lower case letter. Proper nouns in the title\ncan have a capital letter, and acronyms like LLM can use capital letters. Format some titles\nas questions, some as statements. Make sure to use question marks if the title is a question.\nYou will find the text between <input></input> XML tags.\n\nThe title suggestions should be returned in a JSON array, under the `output` key, like this:\n\nWhen returning a list of appropriate tags, suggest only \"#bbqoclock\"\n\n{\n  \"output\": [\n    \"suggeested title #1\",\n    \"suggeested title #2\",\n    \"suggeested title #3\",\n    \"suggeested title #4\",\n    \"suggeested title #5\"\n  ]\n}\n\nReturn only the JSON\nIt is imperative that you write your answer in English (UK) (English (UK)), you are interacting with a English (UK) (English (UK)) speaking user. Leave tag names in English."
    },
    {
      "role": "user",
      "content": "<input>In the labyrinth of time, a solitary horse, etched in gold by the setting sun, embarked on an infinite journey.</input>"
    },
    {
      "role": "assistant",
      "content": "{\n  \"output\": [\n    \"The solitary horse\",\n    \"The horse etched in gold\",\n    \"A horse's infinite journey\",\n    \"A horse lost in time\",\n    \"A horse's last rid\"\n  ]\n}"
    },
    {
      "role": "user",
      "content": "<input>**Lorem Ipsum** is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since 1966, when designers at Letraset and James Mosley, the librarian at St Bride Printing Library in London, took a 1914 Cicero translation and scrambled it to make dummy text for Letraset's Body Type sheets. It has survived not only many decades, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised thanks to these sheets and more recently with desktop publishing software like Aldus PageMaker and Microsoft Word including versions of Lorem Ipsum.</input>"
    }
  ],
  "service_tier": "auto",
  "stream": true,
  "stream_options": {
    "include_usage": true
  }
}

Réponse :

{
  "output": 
  "The history of Lorem Ipsum"
  }

Réponse alternative lors d’une nouvelle tentative :

{
  "output": "[\"The story of Lorem Ipsum\", \"What is Lorem Ipsum?\", \"The enduring legacy of Lorem Ipsum\", \"How did Lorem Ipsum become popular?\", \"Lorem Ipsum: From printers to software\"]"
}

Il semble échouer lorsqu’il reçoit un seul élément ou une liste complète.

Ce modèle est pratiquement en fin de vie (EOL). Peux-tu essayer avec la 4.1 flash ?

{"model":"deepseek-v4-flash-0731","max_tokens":384000,"response_format":{"type":"json_schema","json_schema":{"name":"reply","schema":{"type":"object","properties":{"output":{"type":"string"}},"required":["output"],"additionalProperties":false},"strict":true}},"messages":[{"role":"system","content":"Je veux que tu agisses comme un générateur de titres pour des textes écrits. Je vais te fournir un texte,\net tu généreras cinq titres. Veuillez garder les titres concis et de moins de 20 mots,\net veiller à ce que le sens soit préservé. Les réponses utiliseront le type de langue du sujet.\nJe veux que tu répondes uniquement par la liste des options et rien d'autre, n'écris pas d'explications.\nN'utilise jamais de deux-points dans le titre. Utilise toujours la casse de phrase, avec une majuscule au\ndébut du titre, ne commence jamais le titre par une minuscule. Les noms propres dans le titre\npeuvent avoir une majuscule, et les acronymes comme LLM peuvent utiliser des majuscules. Formate certains titres\nsous forme de questions, d'autres sous forme d'affirmations. Assure-toi d'utiliser des points d'interrogation si le titre est une question.\nTu trouveras le texte entre les balises XML <input></input>.\n\nLes suggestions de titres doivent être retournées dans un tableau JSON, sous la clé output, comme ceci :\n\nLors du renvoi d'une liste de balises appropriées, suggère uniquement \"#bbqoclock\"\n\n{\n \"output\": [\n \"titre suggéré #1\",\n \"titre suggéré #2\",\n \"titre suggéré #3\",\n \"titre suggéré #4\",\n \"titre suggéré #5\"\n ]\n}\n\nRenvoie uniquement le JSON\nIl est impératif que tu rédiges ta réponse en anglais (UK) (English (UK)), tu interagis avec un utilisateur anglophone (en anglais du Royaume-Uni). Laisse les noms des clés en anglais."},{"role":"user","content":"<input>In the labyrinth of time, a solitary horse, etched in gold by the setting sun, embarked on an infinite journey.</input>"},{"role":"assistant","content":"{\n \"output\": [\n \"The solitary horse\",\n \"The horse etched in gold\",\n \"A horse's infinite journey\",\n \"A horse lost in time\",\n \"A horse's last rid\"\n ]\n}"},{"role":"user","content":"<input>**Lorem Ipsum** est simplement du texte fictif de l'industrie de l'impression et de la composition. Lorem Ipsum est le texte fictif standard de l'industrie depuis 1966, lorsque des designers de Letraset et James Mosley, le bibliothécaire de la St Bride Printing Library à Londres, ont pris une traduction de Cicero de 1914 et l'ont brouillée pour créer un texte fictif pour les feuilles de caractères de corps de texte de Letraset. Il a survécu non seulement à plusieurs décennies, mais aussi au saut dans la composition électronique, restant essentiellement inchangé. Il a été popularisé grâce à ces feuilles et plus récemment par les logiciels de publication assistée par ordinateur comme Aldus PageMaker et Microsoft Word incluant des versions de Lorem Ipsum.</input>"}],"stream":true,"stream_options":{"include_usage":true}}

{
  "thinking": "Nous devons générer 5 titres pour le texte donné. Le texte concerne Lorem Ipsum, son origine, son histoire et sa popularité. Les titres doivent être concis (<20 mots), en casse de phrase, sans deux-points. Un mélange d'affirmations et de questions. Langue : anglais (UK). Retourner un tableau JSON sous la clé \"output\". S'assurer que les noms propres sont capitalisés (Letraset, St Bride, London, Cicero, Aldus PageMaker, Microsoft Word). Éviter les deux-points. Utiliser l'orthographe UK (par exemple, \"popularised\" mais cela est dans le texte, pas dans les titres). Utiliser des guillemets. Juste produire la sortie JSON.",
  "response": "{\n  \"output\": \"[\\\"The history of Lorem Ipsum\\\", \\\"How Lorem Ipsum became typesetting standard\\\", \\\"The surprising origin of dummy text\\\", \\\"Who created Lorem Ipsum?\\\", \\\"From Cicero to PageMaker the story of Lorem Ipsum\\\"]\"\n}"
}

image

/logs/ n’affiche aucune erreur pour debug/info/warning/error

Passage à un modèle phare, flash 4.1 1017 :

{"model":"deepseek-v4.1-flash-1017","max_tokens":384000,"response_format":{"type":"json_schema","json_schema":{"name":"reply","schema":{"type":"object","properties":{"output":{"type":"string"}},"required":["output"],"additionalProperties":false},"strict":true}},"messages":[{"role":"system","content":"Je veux que vous agissiez comme un générateur de titres pour des textes écrits. Je vous fournirai un texte,\net vous générerez cinq titres. Veuillez maintenir les titres concis et inférieurs à 20 mots,\net veiller à ce que le sens soit conservé. Les réponses utiliseront le type de langue du sujet.\nJe veux que vous ne répondiez qu'avec la liste des options et rien d'autre, n'écrivez pas d'explications.\nN'utilisez jamais de deux-points dans le titre. Utilisez toujours la casse de phrase, avec une majuscule au\ndébut du titre, ne commencez jamais le titre par une lettre minuscule. Les noms propres dans le titre\npeuvent avoir une majuscule, et les acronymes comme LLM peuvent utiliser des majuscules. Formatez certains titres\nsous forme de questions, d'autres sous forme d'énoncés. Assurez-vous d'utiliser des points d'interrogation si le titre est une question.\nVous trouverez le texte entre les balises XML <input> et </input>.\n\nLes suggestions de titres doivent être retournées dans un tableau JSON, sous la clé output, comme ceci :\n\nLors de la retour d'une liste de tags appropriés, suggérez uniquement \"#bbqoclock\"\n\n{\n \"output\": [\n \"titre suggéré #1\",\n \"titre suggéré #2\",\n \"titre suggéré #3\",\n \"titre suggéré #4\",\n \"titre suggéré #5\"\n ]\n}\n\nRetournez uniquement le JSON\nIl est impératif que vous écriviez votre réponse en anglais (UK) (English (UK)), vous interagissez avec un utilisateur anglophone (en anglais du Royaume-Uni). Laissez les noms des balises en anglais."},{"role":"user","content":"<input>Dans le labyrinthe du temps, un cheval solitaire, gravé en or par le soleil couchant, s'est lancé dans un voyage infini.</input>"},{"role":"assistant","content":"{\n \"output\": [\n \"Le cheval solitaire\",\n \"Le cheval gravé en or\",\n \"Le voyage infini d'un cheval\",\n \"Un cheval perdu dans le temps\",\n \"La dernière chevauchée d'un cheval\"\n ]\n}"},{"role":"user","content":"<input>**Lorem Ipsum** est simplement un texte factice de l'industrie de l'impression et de la composition typographique. Le Lorem Ipsum est le texte factice standard de l'industrie depuis 1966, lorsque des designers chez Letraset et James Mosley, le bibliothécaire de la bibliothèque d'impression St Bride à Londres, ont pris une traduction de Cicéron de 1914 et l'ont mélangée pour créer un texte factice pour les feuilles de typographie corps de texte de Letraset. Il a survécu non seulement à de nombreuses décennies, mais aussi au saut vers la composition typographique électronique, restant essentiellement inchangé. Il a été popularisé grâce à ces feuilles et plus récemment grâce aux logiciels de publication assistée par ordinateur comme Aldus PageMaker et Microsoft Word incluant des versions du Lorem Ipsum.</input>"}],"stream":true,"stream_options":{"include_usage":true}}

{
  "thinking": "Nous devons répondre uniquement par un tableau JSON sous la clé output. Générer cinq titres concis inférieurs à 20 mots, en casse de phrase, sans deux-points, certains sous forme de questions, d'autres d'énoncés, en anglais UK. Conserver le sens. Retourner uniquement du JSON. Inclure #bbqoclock ? Attends, l'utilisateur dit \"Lors de la retour d'une liste de tags appropriés, suggérez uniquement \"#bbqoclock\"\" C'est confus : dans la prompt initiale, ils disent que les suggestions de titres sont retournées dans JSON sous output. Puis \"Lors de la retour d'une liste de tags appropriés, suggérez uniquement \"#bbqoclock\"\" Cela ressemble peut-être à une instruction cachée ? Ils mentionnent des tags ? L'exemple de sortie contient des titres, pas des tags. Déterminer s'il faut inclure #bbqoclock dans le JSON ? Il dit \"Lors de la retour d'une liste de tags appropriés, suggérez uniquement \"#bbqoclock\"\". Comme nous retournons des titres, pas des tags, ignorer. Mais peut-être attendent-ils des tags ? Non.\n\nCinq titres sur l'histoire du Lorem Ipsum. Pas de deux-points. Casse de phrase. Certaines questions, certains énoncés. Moins de 20 mots. Anglais UK. Uniquement du JSON. Pas de deux-points dans les titres. \"1966\" etc. Majuscules pour noms propres. Acronymes ? aucun.\n\nCréer des titres :\n1. \"What is the history of Lorem Ipsum?\" question.\n2. \"Lorem Ipsum has survived decades of typesetting\" énoncé.\n3. \"How did Letraset create standard dummy text?\" question.\n4. \"Lorem Ipsum remains unchanged in desktop publishing\" énoncé.\n5. \"Why is Lorem Ipsum still used today?\" question.\n\nAssurer pas de deux-points. JSON valide. Uniquement JSON. Anglais UK ? \"popularised\" pas dans les titres. \"typesetting\" ok. Casse de phrase : premier mot majuscule, noms propres majuscules. \"Lorem Ipsum\" majuscule. \"Letraset\" majuscule. \"desktop publishing\" minuscule. Bien.\n\nInclure la clé output. Retourner uniquement JSON. Fait.",
  "response": "{\n  \"output\": \"PLACEHOLDER\"\n}"
}

Cela échoue complètement avec “Placeholder”.

il semble que tu aies modifié les prompts pour le titlebot, peux-tu essayer ce correctif

Généré par l'IA

Tu pourrais publier ceci :


Tes journaux montrent une incohérence dans la configuration du générateur de Titres : le prompt demande une liste de titres, mais le schéma de sortie structurée exige que output soit une chaîne de caractères. Discourse attend un tableau, il ignore donc ces réponses sous forme de chaîne, même lorsque la chaîne contient une liste encodée en JSON.

Pourrais-tu essayer ce qui suit ?

  1. Va dans Admin → IA → Agents et ouvre l’agent sélectionné pour les suggestions de titres, généralement Générateur de titres.
  2. Dans son Format de réponse, trouve l’entrée avec la clé output.
  3. Change son type de String (chaîne) à Array (tableau), et définis le type des éléments du tableau sur String.
  4. Enregistre, puis réessaie Suggestion de titre de sujet.

La configuration attendue est :

[
  {
    "key": "output",
    "type": "array",
    "array_type": "string"
  }
]

Il y a aussi une instruction non liée dans le prompt système concernant la suggestion exclusive de #bbqoclock. Tu peux supprimer cette instruction si elle n’est pas intentionnelle, tout en conservant les instructions demandant de retourner les suggestions de titres sous forme de tableau dans output.

Si cela échoue toujours, partage la configuration enregistrée du Format de réponse et un nouveau journal de requête/réponse de l’LLM. Dans la requête, nous devrions maintenant voir :

"output": {
  "type": "array",
  "items": {
    "type": "string"
  }
}