Привет, земляне! Возникла у меня тут на днях потребность выкачать текст из чата 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 8601 -
updated_at— дата обновления чата в формате ISO 8601 -
mapping— объект с сообщениями
Уровень 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 8601 -
fragments— список фрагментов с контентом сообщения
Уровень 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-канале
📧Почтовый ящик для отзывов и предложений
👑Поддержать автора
ссылка на оригинал статьи https://habr.com/ru/articles/1084424/