ChatGPT のデータエクスポートを読む:会話はリストではなく木である
ChatGPT にデータを請求すると .zip が届き、その中で実際に役立つのは conversations.json ひとつです。メッセージの一覧を期待して開くと、出てくるのは別のものです。mapping という名前のオブジェクトに識別子をキーとしたエントリが並び、それぞれが親と子の集合を指しています。メッセージは確かにその中にあります。あなたが覚えている会話は、そのグラフを通る一本の経路です。
このページはその経路を復元し、Markdown として書き出します。アーカイブでも展開した JSON でも、置けばこのブラウザタブの中で解析されます。
なぜグラフとして保存されているのか
画面の側で履歴を書き換えられるからです。前のプロンプトを編集すればスレッドはそこで分岐します。回答を再生成すれば、小さな矢印で行き来できる別案が増えます。どちらのバージョンも残っていて、画面が片方だけを見せているにすぎません。
平坦な配列ではそれを表せません。そこでエクスポートはすべての分岐を保存し、実際に見た文字起こしのほうは、親のないノードから出発して下へたどり、各段階で子の中から一つを選ぶことで取り出します。画面と一致する慣習は最後の子をたどることです。再生成された回答は、置き換えた回答の後ろに追加されるからです。このツールもそうしているので、出力はすべての試行が織り交ざったものではなく、実際に交わした会話として読めます。
たどるあいだ、循環に対する保護をかけてあります。正しい形のエクスポートでは発火しないはずですが、パーサーが無限ループに入るのは文字起こしが途中で切れるより悪い結果です。
見たことのない内容
エクスポートには画面が隠していた材料も含まれます。そのまま再現すると、記憶している会話と一致しない文字起こしができあがります。
- システムメッセージ。どの会話も、あなたが書いたのでも見せられたのでもない指示から始まります。ファイルの中では一人前のメッセージとして置かれています。
- ツールのやり取り。ウェブ検索、コード実行、画像生成はそれぞれ自分の要求ノードと結果ノードを残し、宛先はユーザーではありません。これは回答の裏側にある機構であって、対話の一部ではありません。
- 明示的に隠されたノード。会話に表示しないという印の付いたメッセージがあります。エクスポートはその点について正直で、この印は尊重されます。
三つとも取り除き、ユーザーとアシスタントのやり取りだけを残します。
メッセージの内容は常に文字列とは限らない
content フィールドは年月とともに育ってきました。素のテキストのやり取りは文字列の配列 parts を持ちます。メッセージの種類によっては代わりに text フィールドを使います。マルチモーダルなやり取りは parts 配列にオブジェクトを要素ごとに入れ、アップロードした画像とそれに添えた質問は別々のエントリになります。コードインタープリターの結果はまた別の形で届きます。
パーサーは文字列の形、文字列の配列の形、オブジェクトの配列の形をすべて読み、それぞれからテキストを取り出します。テキストでない部分はプレースホルダーもエラーも出さず、単に何も寄与しません。つまり画像を含む会話は、その周りの言葉として出てきます。
なぜ Markdown が正しい変換先なのか
アシスタントはもともと Markdown で書いています。その回答にはフェンス付きのコードブロック、見出し、箇条書き、表が入っていて、その記号はエクスポートの中に文字として存在します。プレーンテキストに変換すると、記号だけがそこに残ります。バッククォートとシャープが字面のまま、描画もされず取り除かれもせずに取り残されるわけです。
Markdown のままにしておけば、コードブロックはコードブロックのままです。結果をメモアプリ、静的サイトジェネレーター、ドキュメントツール、wiki のどれに貼っても描画されます。話者名は太字になり、会話ごとにそのタイトルから見出しが作られるので、何年分ものエクスポートが、のっぺりした文字の連なりではなく辿れる文書になります。
エクスポートは大きい
数年ふつうに使っていれば、conversations.json は数十から数百メガバイトになり、数千の会話を抱えます。これはテキストエディタにとって厄介です。全体に構文強調をかけようとするからです。表示の前に整形するタイプのツールにとっても同じことが起きます。
ここでの解析は一度だけ、メモリ上で行い、描画するのは読める出力だけです。会話ごとに自分のタイトルの下の一節になり、節と節のあいだには区切りが入るので、うろ覚えの一文をスクロールではなく検索で探せます。
エクスポートを請求する
ChatGPT では、設定からデータ管理、そしてデータをエクスポートすると進みます。アーカイブはたいてい数分でメールに届き、期限付きのダウンロードリンクの形をとります。zip には HTML のビューアーや各種メディアも入っていますが、ここで必要なのは JSON だけです。アーカイブごと置いても問題なく動きます。
何もアップロードされない
ChatGPT の履歴は、あなたが何に取り組み、何を心配し、何について助けを求めてきたかの詳細な記録です。たいていの人にとって、自分が持っているファイルの中でもかなり露出度の高いものです。解析はこのタブの JavaScript で行われ、アップロードの工程がないので、サーバーがそれを受け取ることはなく、あとから削除するものもありません。
Claude のエクスポートには専用のページがあります。Claude のエクスポートを Markdown にをご覧ください。チャット履歴の共通エクスポートページは、対応しているすべてのプラットフォームを扱います。