DeepseekExtractor Утилита для излечения чатов из бэкапов DeepSeek

Привет, земляне! Возникла у меня тут на днях потребность выкачать текст из чата DeepSeek, копипастить было не вариант, так как чат насчитывал более 5 тысяч сообщений, зачем мне столько я рассказал в своем телеграмм канале, ссылка на него, и нет только в конце статьи, а пока читайте и не отвлекайтесь. Итак, я поиск решения привел меня к тому, что клиент позволяет скачать историю переписки в формате JSON, уже хоть что-то, осталось придумать как эти самые данные извлечь. И тут я ставлю развилку в повествовании: тем кому нужно просто извлечь полный текст из чата можете переходить сразу к ⭐Этому разделу, а я продолжу историю в хронологическом порядке.
Изучение истории переписки Deepseek
Скачал я архив с историей переписки и получил на руки файл с названием conversations.json весом почти 20 Мбайт. Дальше вопрос встал конкретный: "как разобрать содержимое и не сойти с ума?", поискал я визуализаторы для файлов JSON и остановился на JSON Craсk, аддоне для VS Code. Я его установил и попытался открыть файл с историй и он мне выдает: "Мистер Балакирев, у вас там больше 56 тысяч нод получается, немного многовато, давай только не больше 1500". Ну, что поделать, завел новый аккаунт, создал там несколько чатов и прогнал нейросеть в разных сценариях, с использование размышлений, поиска в интернете, но заранее предупреждаю, что использование прикрепленных файлов не рассматривал. Короче, тесты прогнал, скачал дамп и открыл его в VS Code и вот уже JSON Crack перестал ломаться, полученную картину показывать не буду, ибо в этом нет никакого смысла, но организация данных меня приятно удивила, в ней все минималистично и интуитивно понятно, а глубина вложенности насчитывает всего 7 уровней. Немного позднее решил заглянуть в дамп Claude так там помимо того, что он предлагает сначала скачать JSON файл с набором ссылок для скачивания, так еще в структуре переписки сам черт ногу сломит, но речь сейчас не об этом.
Разбираем структуру историю переписки
Кто-то мне может возразить: "зачем разбирать самому, если можно использовать документацию"? Только официальной документации нет или я ее не нашел, и я по своей натуре люблю разбирать все на практике и пусть данная статья будет неофициальной документацией.
Лишний раз напомню, что при подготовке тестовой истории я игнорировал использование прикрепленных файлов, поэтому не удивляйтесь, что можете их там не обнаружить. Если нужно разобрать вложения и пропатчить утилиту, о которой будет рассказано далее, то дайте знать об этом в комментариях.
Уровень 1. Список чатов
На первом уровне у нас список всех выгруженных чатов, каждый чат представляет из себя JSON-объект
[<объект чата 1>, <объект чата 2>,...<объект чата N>]Уровень 2. Объект чата
$[<индекс чата>]
Каждый чат представляет из себя JSON-объект со следующей структурой:
{
"id": "52a576dd-6f3d-4589-91a7-3b9b8d156a8d",
"title": "тут исследовать внимательно",
"inserted_at": "2026-08-09T10:31:20.766000+08:00",
"updated_at": "2026-08-09T11:05:13.415000+08:00",
"mapping": <объект с сообщениями>
}Описание полей:
id— id чатаtitle— фактический заголовок чата, которое присвоено автоматически или измененное пользователемinserted_at— дата создания чата в формате ISO 8601updated_at— дата обновления чата в формате ISO 8601mapping— объект с сообщениями
Уровень 3. Объект с сообщениями
$[<индекс чата>]["mapping"]
Каждый объект с сообщениями имеет следующую структуру:
{
"root": <объект сообщения (root)>,
"1": <объект сообщения (1)>,
"2": <объект сообщения (2)>,
"3": <объект сообщения (3)>,
...
"N": <объект сообщения (N)>,
}Каждое поле здесь представляет из себя id сообщения
Описания полей:
root- стартовое сообщение, указывает на начало чата, содержит себе указатели на дочерние объекты сообщений, так как чат имеет нелинейную, а древовидную структуру каждое сообщение хранит указатели на родительский объект и на дочерниеN- прочие объекты сообщений имеют целочисленный индекс в виде строки, как показала практика: нумерация сообщений не последовательная и может прерываться, к примеру, после 100го сообщения может идти 125е сообщение и так далее.
Уровень 4. Объект сообщения
$[<индекс чата>]["mapping"][<id сообщения>]
Структура:
{
"id": "1",
"parent": "root",
"children: [2, 3],
"message": <объект с деталями сообщения>
}Описания полей:
id— id сообщения (представлен в виде строки)parent— id родительского сообщения (представлен в виде строки)children— список id дочерних сообщений (представлены в виде целых чисел)message— объект с деталями сообщения
Уровень 5. Объект с деталями сообщения
$[<индекс чата>]["mapping"][<id сообщения>]["message"]
Структура:
{
"model": "deepseek-chat",
"inserted_at": "2026-08-09T11:03:48.278000+08:00",
"fragments": <список фрагментов сообщения>
}Описания полей:
model— имя задействованной модели нейросети, может иметь значения:"deepseek-reasoner"
"deepseek-chat"
inserted_at— дата добавления сообщения в формате ISO 8601fragments— список фрагментов с контентом сообщения
Уровень 6. Фрагменты сообщения
$[<индекс чата>]["mapping"][<id сообщения>]["message"][<индекс фрагмента>]
Структура:
{
"type": "REQUEST",
"content": "Привет"
}Либо, если фрагмент содержит результаты поиска, то он имеет следующую структуру:
{
"type": "SEARCH",
"results": <спискок объектов с результатами поиска в интернете>
}Описания полей:
type— тип фрагмента, может иметь варианты"REQUEST" - запрос пользователя
"SEARCH" или "TOOL_SEARCH" - результаты поиска в интернете
"RESPONSE" - ответ нейросети на запрос
"THINK" - "размышление" нейросети
"TOOL_OPEN" - не несет полезной информации
content— текстовое содержимое фрагментаresults— <список объектов с результатами поиска в интернете>
Уровень 7. Результаты поиска в интернете
$[<индекс чата>]["mapping"][<id сообщения>]["message"][<индекс фрагмента>][results][<индекс результата поиска>]
Структура:
{
"url": "https://old.scientificrussia.ru/articles/polnogenomnoe-issledovanie-opredelilo-sushchestvovanie-shesti-vidov-zhivyh-tigrov",
"title": "Полногеномное исследование определило существование шести видов живых тигров"
}
Описания полей:
url— url-адрес веб-страницыtitle— заголовок веб-страницы
Вот вы и познакомились со структурой переписки, дальше я представлю инструмент для комфортного извлечения текста чата.
DeepseekExtractor нам поможет
Те, кто читает мой Telegram-канал уже знают о DeepseekExtractor, так что подписаться на него полезно. А для новеньких поясню: это плагин для моего программного комплекса Pyrog. Функционал утилиты имеет только самое необходимое:
она позволяет извлечь из истории переписки ветку сообщений, выбрать для нее представление в форматах: Обычный текст без форматирования, Markdown или HTML, затем сохранить результат в файл или копировать в буфер обмена;
программа подсчитает количество токенов, слов и символов в общем и для запросов и ответов в частности;
можно "осушить" историю, выбрав только нужные чаты, а затем сохранить их в нативном формате;
есть возможность нарезать ветку на фрагменты с фиксированным количеством сообщений;
продвинутые представители человечества могут разработать собственные представления для отображения сообщений, для таких я приготовил Расширенное руководство.
Для использования надо пройти несложную процедуру по установке:
Скачайте и установите Python версией не ниже 3.13;
Скачайте файлы Pyrog и скопируйте их на свой компьютер (страница загрузки, руководство по использованию);
Скачайте файлы плагина DeepseekExtractor (страница загрузки, руководство по использованию));
Распакуйте файлы плагина в папку
…/Pyrog/manager/plugins/DeepseekExtractorЗапустите скрипт
…Pyrog\manager\Pyrog.pywи дайте согласие на установку PySide6 Да, я знаю, процесс установки не удобный, но я планирую в скором времени сделать инсталлятор или лаунчер, чтобы он делал всю скучную работу, но и без того надеюсь, что трудностей не возникло. Нет? Тогда погнали пользоваться!
Для того чтобы извлечь нужные данные для начала необходимо экспортировать историю переписки. Для этого войдите в ваш аккаунт на сайте chat.deepseek.com и в левом нижнем углу веб-клиента рядом с именем пользователя нажмите на три точки, далее Settings → Data → Export, затем нужно будет подождать некоторое время, пока не подготовятся данные, затем нажать Download, начнется скачивание zip архива.

После скачивания распакуйте файлы из архива. Теперь, все готово к работе - переходим к утилите DeepseekExtractor.

Нажмите на Загрузить данные (1), появится диалоговое окно выбора файла, затем выберите файл с данными, обычно это conversations.json. Затем в выпадающем списке (2) выберите нужный чат. Нажмите на кнопку Выбрать последнее сообщение (3), появится диалоговое окно, где представлены все сообщения в чате, выберите последнее сообщение в нужной ветке, которую нужно извлечь.

Чат Deepseek может имеет разветвленную структуру сообщений, когда вы изменяете запрос или перезапускаете генерацию ответа - создается отдельная ветка, поэтому чтобы извлечь нужную ветку необходимо выбрать последнее сообщение, начиная с которого вверх по цепочке будет произведено извлечение сообщений до самого первого.
Затем, из выпадающего списка (4) выберите представление для выбранной ветки сообщений. Всего есть три вида представлений, он указывается в круглых скобках после имени представления. Тип представления влияет на отображение текста в поле вывода ветки сообщений, на выбор 4 типа:
обычный текст - текстовые данные выводятся в их оригинальном виде;
markdown - при отображении учитывается специальный синтаксис markdown;
HTML - язык разметка гипертекста версии 4;
HTML5 - язык разметка гипертекста версии 5; Тип выбранного представления определяет формат, в котором сохраняется ветка сообщений на диске. Список представлений можно расширить, для этого необходимо иметь навыки программирования на Python, подробности описаны в Расширенном руководстве.
Сохранение данных
Чтобы произвести сохранение нажмите на кнопку с изображением гаечного ключа (7), появится список доступных операций:
Сохранить ветку сообщений в буфер обмена - копирует исходный текст ветку сообщений в буфер обмена, синтаксис markdown и HTML будет преобразован в текст.
Выбрать и экспортировать чаты - позволяет выбрать и сохранить чаты в нативном формате DeepSeek (JSON).
Сохранить ветку сообщений как - сохраняет текст ветки сообщений в формате, соответствующем выбранному типу представления.
Нарезка ветки сообщений
Эта специфичная функция добавлена в рамках моих экспериментов с клиентом. Задача была в том, чтобы загрузить объемный текст в контекст нейросети, как оказалось есть ограничения на размер запроса, а вот если это делать частями, то никаких проблем в этом нет, все ограничивается лишь общим контекстным окном.
Чтобы воспользоваться данной функцией перейдите на вкладку Нарезка.

«Нарезка» производится по количеству сообщений, в поле Сообщений на фрагмент укажите количество сообщений, которое попадет в один фрагмент и нажмите на кнопку Обновить. Заметьте, что операция работает только с представлениями типа Обычный текст. Затем нажмите на кнопку Копировать, чтобы скопировать текст фрагмента в буфер обмена, после чего поле с текстом фрагмента будет выделено зеленым цветом, повторное нажатие снимает выделение.
На этом руководство подошло к концу, для дополнительной информации обратитесь к Расширенному руководству. Спасибо, что используете Pyrog и DeepseekExtractor.
Ссылки
🏠Страничка проекта (скачать бесплатно)
🔌Другие плагины для Pyrog
🛟Пользовательское руководство по DeepseekExtractor
🛟Расширенное руководство по DeepseekExtractor
📂Git репозиторий проекта
💾Скачать Pyrog
✈Больше в Telegram-канале
📧Почтовый ящик для отзывов и предложений
👑Поддержать автора
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.