Lire un export de données ChatGPT : la conversation est un arbre, pas une liste
Demandez vos données à ChatGPT et vous recevez un .zip dont le contenu utile se résume à un seul conversations.json. Ouvrez-le en vous attendant à une liste de messages et vous trouvez autre chose : un objet nommé mapping, rempli d'entrées indexées par identifiant, chacune pointant vers un parent et un ensemble d'enfants. Les messages sont bien là. La conversation dont vous vous souvenez est un chemin dans un graphe.
Cette page reconstitue ce chemin et l'écrit en Markdown. Déposez l'archive ou le JSON extrait : l'analyse se fait dans cet onglet.
Pourquoi c'est stocké sous forme de graphe
Parce que l'interface vous laisse réécrire l'histoire. Modifiez une question antérieure et le fil bifurque à partir de ce point. Régénérez une réponse et vous obtenez une variante entre lesquelles les petites flèches permettent de naviguer. Les deux versions existent toujours ; l'interface n'en affiche qu'une.
Un tableau plat ne peut pas représenter cela. L'export conserve donc chaque branche, et la transcription que vous avez réellement vue se retrouve en partant du nœud sans parent et en descendant, en choisissant à chaque étape parmi les enfants. La convention qui correspond à l'interface est de suivre le dernier enfant, puisqu'une régénération est ajoutée après la réponse qu'elle remplace. C'est ce que fait cet outil, et c'est pourquoi le résultat se lit comme la conversation que vous avez eue plutôt que comme l'entrelacement de toutes les tentatives.
Une protection contre les cycles est en place pendant le parcours. Elle ne devrait jamais se déclencher sur un export bien formé, mais une boucle infinie dans un analyseur est un résultat pire qu'une transcription tronquée.
Du contenu que vous n'avez jamais vu
L'export contient des éléments que l'interface masque, et les reproduire tels quels donne une transcription qui ne correspond pas à votre souvenir de la conversation :
- Le message système. Chaque conversation s'ouvre par des instructions que vous n'avez pas écrites et qui ne vous ont pas été montrées. Elles figurent dans le fichier comme un message de plein droit.
- Le trafic des outils. Recherches web, exécution de code et génération d'images laissent chacune leurs propres nœuds de requête et de résultat, adressés à un destinataire autre que l'utilisateur. C'est la machinerie derrière une réponse, pas le dialogue.
- Les nœuds explicitement masqués. Certains messages portent un indicateur signalant qu'ils ne sont pas affichés dans la conversation. L'export est honnête sur ce point, et l'indicateur est respecté.
Les trois sont filtrés, ce qui laisse les tours de l'utilisateur et de l'assistant.
Le contenu d'un message n'est pas toujours une chaîne
Le champ de contenu s'est étoffé avec le temps. Un tour en texte simple porte un tableau parts de chaînes. Certains types de message utilisent plutôt un champ text. Les tours multimodaux placent des objets dans le tableau parts, un par élément, l'image envoyée et la question qui l'accompagne étant des entrées distinctes. Les résultats de l'interpréteur de code arrivent encore sous une autre forme.
L'analyseur lit la forme chaîne, la forme tableau de chaînes et la forme tableau d'objets, en extrayant le texte de chacune. Les éléments non textuels n'apportent rien plutôt que de produire un repère ou une erreur, ce qui veut dire qu'une conversation contenant des images ressort sous forme des mots qui les entourent.
Pourquoi Markdown est la bonne cible
L'assistant écrit déjà en Markdown. Ses réponses contiennent des blocs de code délimités, des titres, des listes à puces et des tableaux, et ces marques sont dans l'export sous forme de caractères. Convertir en texte brut les laisserait telles quelles, accents graves et dièses littéraux — la mise en forme ni affichée ni retirée, simplement échouée là.
Garder le Markdown signifie que les blocs de code restent des blocs de code. Collez le résultat dans n'importe quelle application de notes, générateur de site statique, outil de documentation ou wiki, et cela s'affiche. Les noms des interlocuteurs sont en gras et chaque conversation reçoit un titre tiré de son intitulé : un export couvrant plusieurs années devient un document navigable plutôt qu'un flot de texte indifférencié.
Les exports sont volumineux
Deux ans d'usage régulier produisent un conversations.json de plusieurs dizaines ou centaines de mégaoctets, contenant des milliers de conversations. C'est un problème pour un éditeur de texte, qui va tenter de colorer syntaxiquement l'ensemble, et pour tout outil qui reformate le JSON avant de vous montrer quoi que ce soit.
Ici l'analyse a lieu une seule fois, en mémoire, et seule la sortie lisible est affichée. Chaque conversation devient une section sous son propre titre avec un séparateur entre les sections, si bien que vous pouvez chercher dans le résultat une formule dont vous vous souvenez à moitié plutôt que de faire défiler.
Demander votre export
Dans ChatGPT : Réglages, puis Contrôles des données, puis Exporter les données. L'archive vous est envoyée par courriel, généralement en quelques minutes, sous forme d'un lien de téléchargement qui expire. Le zip contient aussi une visionneuse HTML et divers médias ; seul le JSON est nécessaire ici, et déposer l'archive entière fonctionne très bien.
Rien n'est envoyé
Votre historique ChatGPT est un compte rendu détaillé de ce sur quoi vous travaillez, de ce qui vous préoccupe et de ce pour quoi vous demandez de l'aide. C'est l'un des fichiers les plus révélateurs que possèdent la plupart des gens. L'analyse tourne en JavaScript dans cet onglet et il n'y a pas d'étape d'envoi : aucun serveur ne le reçoit et il n'y a rien à supprimer ensuite.
Les exports Claude ont leur propre page : export Claude en Markdown. La page générale d'export de conversation prend en charge n'importe quelle plateforme supportée.