Konwerter eksportu ChatGPT na Markdown — za darmo

Zamień conversations.json z eksportu ChatGPT w czytelny Markdown. Podąża za gałęzią, która faktycznie była widoczna, i pomija ukryty prompt systemowy.

Eksport danych z ChatGPT na Markdown: rozmowa to drzewo, nie lista

Poproś ChatGPT o swoje dane, a dostaniesz .zip, którego użyteczną zawartością jest jeden conversations.json. Otwórz go w oczekiwaniu na listę wiadomości, a znajdziesz coś innego: obiekt o nazwie mapping, pełen wpisów kluczowanych identyfikatorem, z których każdy wskazuje na rodzica i zbiór dzieci. Wiadomości tam są. Rozmowa, którą pamiętasz, to jedna ścieżka przez graf.

Ta strona odtwarza tę ścieżkę i zapisuje ją jako Markdown. Upuść archiwum albo rozpakowany JSON — parsowanie idzie w tej karcie przeglądarki.

Dlaczego to jest przechowywane jako graf

Bo interfejs pozwala przepisywać historię. Edytujesz wcześniejszy prompt i wątek rozwidla się od tego miejsca. Generujesz odpowiedź ponownie i dostajesz alternatywę, między którymi przełączasz się małymi strzałkami. Obie wersje nadal istnieją; interfejs po prostu pokazuje jedną.

Płaska tablica nie potrafi tego wyrazić. Eksport przechowuje więc każdą gałąź, a transkrypcję, którą naprawdę widziałeś, odzyskuje się, startując z węzła bez rodzica i schodząc w dół, wybierając na każdym kroku spośród dzieci. Konwencja zgodna z interfejsem to podążać za ostatnim dzieckiem, bo przegenerowanie dopisywane jest po odpowiedzi, którą zastąpiło. Tak właśnie robi to narzędzie i dlatego wynik czyta się jak rozmowa, którą odbyłeś, a nie jak przeplot wszystkich prób.

Na czas przechodzenia założone jest zabezpieczenie przed cyklem. Przy poprawnym eksporcie nie powinno nigdy zadziałać, ale nieskończona pętla w parserze to gorszy wynik niż ucięta transkrypcja.

Treść, której nigdy nie widziałeś

Eksport zawiera materiał, który interfejs ukrywa, a odtworzenie go dosłownie daje transkrypcję niezgodną z twoją pamięcią rozmowy:

  • Wiadomość systemowa. Każda rozmowa otwiera się instrukcjami, których nie napisałeś i których ci nie pokazano. W pliku występuje jako pełnoprawna wiadomość.
  • Ruch narzędziowy. Wyszukiwania w sieci, wykonania kodu i generowanie obrazów zostawiają własne węzły żądania i wyniku, adresowane do odbiorcy innego niż użytkownik. To maszyneria stojąca za odpowiedzią, a nie część dialogu.
  • Węzły jawnie ukryte. Część wiadomości niesie flagę oznaczającą je jako niepokazane w rozmowie. Eksport jest pod tym względem uczciwy, a flaga jest respektowana.

Wszystkie trzy są odfiltrowywane, zostają tury użytkownika i asystenta.

Treść wiadomości nie zawsze jest łańcuchem znaków

Pole treści rozrastało się z czasem. Tura z czystym tekstem niesie tablicę parts z łańcuchami znaków. Część typów wiadomości używa zamiast tego pola text. Tury multimodalne wkładają do tablicy parts obiekty, po jednym na element, gdzie wgrany obraz i towarzyszące mu pytanie są osobnymi wpisami. Wyniki interpretera kodu przychodzą znów we własnym kształcie.

Parser czyta postać łańcuchową, postać tablicy łańcuchów i postać tablicy obiektów, wyciągając tekst z każdej z nich. Części nietekstowe nie wnoszą nic, zamiast produkować zastępnik albo błąd, co znaczy, że rozmowa ze zdjęciami przechodzi jako słowa wokół nich.

Dlaczego Markdown jest właściwym celem

Asystent i tak pisze Markdownem. Jego odpowiedzi zawierają bloki kodu w ogrodzeniu, nagłówki, listy punktowane i tabele, a te znaki siedzą w eksporcie jako znaki. Konwersja na czysty tekst zostawiłaby je tam jako dosłowne odwrotne apostrofy i kratki — formatowanie ani wyrenderowane, ani usunięte, po prostu osierocone.

Zachowanie Markdowna oznacza, że bloki kodu zostają blokami kodu. Wklej wynik do dowolnej aplikacji do notatek, generatora stron statycznych, narzędzia do dokumentacji albo wiki i wyrenderuje się. Nazwy mówiących są pogrubiane, a każda rozmowa dostaje nagłówek ze swojego tytułu, więc wieloletni eksport staje się dokumentem, po którym da się nawigować, a nie nieróżnicowanym ciągiem tekstu.

Eksporty są duże

Kilka lat regularnego używania produkuje conversations.json ważący dziesiątki albo setki megabajtów i mieszczący tysiące rozmów. To problem dla edytora tekstu, który spróbuje pokolorować składnię całości, i dla każdego narzędzia, które najpierw formatuje plik, zanim cokolwiek ci pokaże.

Tutaj parsowanie dzieje się raz, w pamięci, a renderowany jest wyłącznie czytelny wynik. Każda rozmowa staje się sekcją pod własnym tytułem, z separatorem między sekcjami, więc możesz przeszukać wynik pod kątem zwrotu, który mgliście pamiętasz, zamiast przewijać.

Jak poprosić o eksport

W ChatGPT: Settings, potem Data Controls, potem Export Data. Archiwum przychodzi mailem, zwykle w ciągu kilku minut, jako link do pobrania, który wygasa. Zip zawiera też przeglądarkę HTML i różne media; tutaj potrzebny jest wyłącznie JSON, a upuszczenie całego archiwum działa bez problemu.

Nic nie jest wysyłane

Twoja historia z ChatGPT to szczegółowy zapis tego, nad czym pracowałeś, czym się martwiłeś i o co prosiłeś o pomoc. To jeden z bardziej odsłaniających plików, jakie większość ludzi posiada. Parsowanie działa w JavaScripcie w tej karcie i nie ma kroku wysyłki, więc żaden serwer tego nie dostaje i nie ma potem czego kasować.

Eksporty Claude'a mają własną stronę: eksport Claude na Markdown, a ogólna strona eksportu czatów obsługuje dowolną wspieraną platformę.