← Retour au blog
Analyse

Après l'ajout de context compaction dans l'Agents API OpenAI le 31 octobre 2026, le JSON Schema Function Calling reste-t-il dans le contexte des longues sessions ?

Publié le 2026-11-02 Mis à jour le 2026-11-02 Environ 11 min Boîte à outils JSON

Fil de cette note

Au 02/11/2026, le guide Compaction Responses et les réglages de context compaction Agent du SDK Python 3.42.0 (31/10/2026) visent l'explosion de tokens en longue session. Erreur fréquente : « après compression le modèle se souvient du schema outil, je peux ne plus envoyer tools ». La doc dit l'inverse—les items de compaction sont chiffrés, illisibles ; ce qui garde les appels strict, c'est toujours le JSON Schema Function Calling sur la config Agent ou la racine de chaque requête. Harness : Pourquoi l'Agents API a encore plus besoin de JSON. Routage : Decisions input_json.

Après des dizaines de tours Agent, le transcript grossit ou vous activez context_management avec compact_threshold. Moins de tools après compact → les arguments du prochain function_call ressemblent encore à du JSON mais ne garantissent plus votre schema parameters—le contrat a quitté la requête.

Ce qui arrive le 31 octobre

Au 02/11/2026, deux niveaux de preuves publiques :

  • Responses API : compaction côté serveur (context_management: [{ "type": "compaction", "compact_threshold": N }]) et POST /responses/compact sans état, documentés dans le guide Compaction officiel (mis à jour en continu, pas daté seulement 31-10).
  • SDK 31/10/2026 : changelog openai-python 3.42.0 « add agent context compaction settings » ; Node 7.46.0 aligné. Les sessions Agent hébergées peuvent déclarer quand compresser le contexte—même idée que compaction Responses, pas un second format de schema.

Le même jour SDK : session review, tool settings, etc.—tool settings restent du JSON de config qui déclare noms d'outils et schema, orthogonal à la compaction.

Ce que la compaction compresse — et non

Points clés du guide Compaction :

  • Au-dessus du seuil, le serveur remplace le dialogue ancien par un item de sortie compaction avec « l'état pour continuer le raisonnement », moins de tokens.
  • Items compaction opaques : ne pas les décoder en objet parameters.
  • L'entrée /responses/compact peut inclure messages, tools et autres items ; la fenêtre renvoyée est l'entrée canonique du prochain saut ; la doc demande de ne pas prune cette sortie.
  • Le flux peut émettre une sémantique context_compacted (table du guide) : contenu ancien remplacé—pas que les définitions d'outils soient gravées dans les poids du modèle.

Une phrase. La compaction gère les tokens d'historique ; JSON Schema gère le contrat d'entrée outil. Configurez les deux explicitement.

Où fixer tools et schema

Boucle Responses auto-hébergée, deux niveaux :

  1. tools à la racine de requête : chaque responses.create garde type: "function" et parameters complets (sous-ensemble JSON Schema OpenAI ; plus strict avec strict: true). Après compaction, si vous maintenez le tableau input à la main, ne supposez pas que les définitions outil des premiers tours restent lisibles—compact + nouveaux messages seulement → tools à la racine quand même.
  2. Objet Agent Agents API : schema dans la config Agent ; les réglages compaction SDK 3.42.0 ne décident que quand résumer la session—ne remplacent pas le bloc tool. Session review lit les métadonnées de session, pas un moyen de retrouver parameters dans le JSON de review.
{
  "agent_tools_ok": {
    "tools": [
      {
        "type": "function",
        "name": "update_ticket",
        "description": "Update CRM ticket fields",
        "parameters": {
          "type": "object",
          "properties": {
            "ticket_id": { "type": "string" },
            "status": { "type": "string", "enum": ["open", "closed"] }
          },
          "required": ["ticket_id", "status"],
          "additionalProperties": false
        },
        "strict": true
      }
    ]
  },
  "compaction_item_opaque": {
    "type": "compaction",
    "note": "Do not parse this as parameters schema"
  },
  "wrong_assumption": {
    "input": ["compaction_item_only", "new_user_message"],
    "tools": []
  }
}

Si vous envoyez vraiment wrong_assumption après compact, le modèle peut inventer des noms de champs ; la validation schema locale doit refuser ces arguments.

Sessions Agents API et réglages outil

L'Agents API héberge le harness : vous soumettez le JSON outil à la création de l'Agent ; la compaction peut se déclencher côté serveur pendant les tours (selon réglages compaction configurables depuis le 31-10). Intégration :

  • Mettre à jour la liste d'outils Agent = changer le JSON de config, pas les items compaction.
  • Avec plugins MCP, côté ChatGPT reste inputSchema / payloadSchema ; voir Événements MCP. La compaction ne fusionne pas ces deux couches de schema.
  • La doc rappelle : ne mélangez pas bizarrement mise à jour de config et compaction auto dans la même historique ; si vous changez reasoning effort ou format de sortie, après compact redéclarez ce que vous avez modifié.

Vérifier le JSON après context_compacted

Après compaction, à chaque saut :

  1. Extraire arguments de function_call (ou required_action Agents) → parser en objet.
  2. Valider avec le schema parameters du même outil dans la config Agent—pas l'item compaction.
  3. Pour une réponse finale structurée, garder text.format json_schema—la compaction ne range pas le schema de sortie dans l'item opaque.

Essayer dans la Boîte à outils JSON

{
  "call_ok": {
    "name": "update_ticket",
    "arguments": "{\"ticket_id\":\"T-9\",\"status\":\"closed\"}"
  },
  "call_bad": {
    "name": "update_ticket",
    "arguments": "{\"ticket_id\":\"T-9\",\"status\":2}"
  },
  "schema_ref": "agent_tools_ok.tools[0].parameters"
}
  1. Coller agent_tools_ok avec call_ok / call_bad dans Formatage JSON.
  2. Page Function Calling pour strict et règles du sous-ensemble.
  3. Validation schema : call_ok passe ; call_bad échoue sur type/enum de status.

FAQ

La compaction supprime-t-elle le JSON Schema parameters du tableau tools ?

Elle ne « migre » pas le schema en JSON lisible ; continuez à le fournir sur l'Agent ou la racine de requête.

En chaînant avec previous_response_id seulement, faut-il encore envoyer tools ?

La config Agent ou équivalent doit le porter ; n'envoyez pas seulement des messages user sans définitions outil.

Peut-on retirer tools de la fenêtre renvoyée par POST /responses/compact avant d'envoyer ?

Ne prunez pas la sortie compact ; complétez tools à la racine de requête si besoin.

Après un événement context_compacted, faut-il encore valider arguments localement ?

Oui, à chaque appel.

Comment se répartit ce texte avec l'article Decisions API ?

Decisions : input_json/answers ; cette note : compaction Responses/Agents et schema Function Calling.

Synthèse

Au 02/11/2026, le SDK du 31/10/2026 met la compaction de contexte Agent au premier plan, alignée avec Responses context_management / /responses/compact : échanger l'ancien dialogue contre un input plus court via items compaction opaques. Le JSON Schema Function Calling ne « reste pas automatiquement dans le contexte » pour que vous puissiez l'omettre—fixez-le sur les réglages outil Agent ou tools à chaque tour. Passez la sortie compact telle quelle ; validez arguments localement. Prochaine étape : un tool call sur un Agent test avec compaction, vérifier que la validation avant/après compact utilise les mêmes parameters, pas l'item compaction.