chat-river

Chat River 🌊

Твоя переписка Telegram — как река: интерактивные визуализации твоей жизни из твоего собственного экспорта. Всё считается локально — ни одно сообщение не покидает твой компьютер.

Из полного экспорта Telegram ты получаешь четыре страницы:

Артефакт Что показывает
Ngram Viewer (out/ngram-viewer.html) частота любого слова в твоей речи по месяцам за все годы; рождение и смерть слов
Река общения (out/river.html) с кем текла твоя переписка: русла-люди, подсветка, твои реплики из прошлого при наведении, «температура» отношений, режим «слабые связи», экспорт постера
Эмоциональная дуга (out/emo-arc.html) средний эмоциональный тон твоих сообщений месяц за месяцем через все годы + состав эмоций; требует опционального LLM-шага
Языковой двойник Big5 (out/big5.html) твой личностный тест против 10+ лет твоего реального языка: что сходится, что нет
Слабые связи (out/weak-ties.html) долгоживущие тонкие контакты по Грановеттеру: пунктиры из бусин, кто жив на орбите и чей пунктир оборвался — кандидаты на возрождение

Хочешь сначала посмотреть, как это выглядит? Живые примеры из полностью синтетического корпуса (вымышленные люди, сгенерированные тексты) — открывай прямо в браузере: Река общения · Эмоциональная дуга · Ngram Viewer · Big5-двойник · Слабые связи. Твои страницы будут такими же, только про тебя (и останутся у тебя на диске — в отличие от этих примеров, никуда не выкладываются).

Три уровня обработки — выбери свой

Первый вопрос перед запуском: что ты готов делать со своими данными. Три пакета, от параноидального к быстрому. Приватность каждого — прямым текстом в колонке «что покидает компьютер».

  Уровень 1 · только скрипты Уровень 2 · + локальная LLM Уровень 3 · + облачная LLM
Что получаешь Ngram Viewer, Река (температура по простым словарям), Big5-двойник, Слабые связи (серые бусины) всё то же + Эмоциональная дуга, честная LLM-температура и цветные бусины слабых связей то же, что уровень 2, только быстро
Что нужно Python 3.10+ + LM Studio и модель gemma-3-12b-it (~8 ГБ на диске, Mac/PC с 16+ ГБ RAM) + аккаунт OpenRouter с парой долларов
Время (архив ~100 тыс. твоих сообщений) минуты бережный дефолт ~0.5–1.5 сообщ/с → сутки-трое (чекпоинт: можно ночами по частям; 10 тыс. — за вечер); мощная машина: --workers 4 --pause 0 — в разы быстрее 5–12 сообщ/с → 3–7 часов; ~$2–4 за 100 тыс. (реальный прогон автора: 112 тыс. за $2.31)
Что покидает компьютер ничего ничего (модель крутится на твоей машине) твои собственные сообщения, по одному, без реплик собеседников — уходят провайдеру модели через OpenRouter
Команды шаги 1–4 ниже + python scripts/05_annotate_llm.py и python scripts/06_emo_arc.py + те же два шага с переменными CHATRIVER_LLM_* (см. шапку скрипта 05)

Уровень можно повышать потом: начни с первого, дуга добавится, когда дозреешь. Подробный разбор приватности — PRIVACY.md.

Самый простой способ: отдай эту папку своему ИИ-агенту

Если у тебя есть Claude Code, ChatGPT (desktop с доступом к файлам / Codex CLI) или любой агент, умеющий запускать команды, — просто скажи ему:

Прочитай AGENT.md в этой папке и сделай всё по инструкции. Мой экспорт лежит в <путь>.

Агент покажет примеры, поможет с экспортом, установит зависимости, прогонит скрипты и отдаст тебе готовые HTML-файлы. Инструкция для агента написана так, что он не читает твои сообщения — только запускает готовые скрипты и смотрит на счётчики.

Вручную

  1. Сделай полный экспорт Telegram — пошаговая инструкция со всеми галочками: EXPORT.md. Три главные вещи: экспорт есть только в настольном Telegram на движке tdesktop (на macOS это Telegram Lite из App Store или Telegram Desktop с telegram.org — в «обычном» маковском Telegram кнопки нет); у Private groups/channels сними галочку «Only my messages»; формат — Machine-readable JSON. На выходе — папка с файлом result.json.

  2. Установи зависимости (Python 3.10+):
    pip install -r requirements.txt
    
  3. Подготовь данные (замени путь на свой):
    python scripts/01_prepare.py "/path/to/DataExport/result.json"
    
  4. Построй базовые артефакты:
    python scripts/02_ngram.py && python scripts/03_river.py && python scripts/04_big5.py && python scripts/07_weak_ties.py
    

Готово: открывай файлы из out/ в браузере.

Для двойника Big5 сначала пройди тест на bigfive-test.com и впиши баллы в my_big5.md (скопируй из templates/big5-results-template.md). Без него 04_big5.py построит страницу только с корпусной половиной.

Эмоциональная дуга (уровни 2 и 3)

Каждое твоё сообщение прогоняется через LLM и получает оценку эмоционального тона; из оценок складывается дуга твоих лет — где было холодно, где теплело, где просело.

Уровень 2 (локально): поставь LM Studio, скачай в нём gemma-3-12b-it, включи Local Server и запусти:

python scripts/05_annotate_llm.py
python scripts/06_emo_arc.py

Скрипт печатает скорость и ETA; чекпоинт после каждого ответа — прерывай и перезапускай сколько угодно, прогресс не теряется. Дефолт бережный (1 поток, пауза 0.2 с); мощная машина — добавь --workers 4 --pause 0, и если LM Studio начнёт таймаутить, просто уменьши.

Уровень 3 (облако, быстро): те же две команды, но перед ними — три переменные окружения (CHATRIVER_LLM_URL/MODEL/KEY, разобрано в шапке скрипта). Помни, что этим ты отправляешь свои сообщения провайдеру — уровень выбирается осознанно.

Нет экспорта под рукой? Проверь на демо

python scripts/00_make_demo.py && python scripts/01_prepare.py demo/result.json

Дальше те же скрипты 02–07; для шага 05 на демо используй суррогатный флаг: python scripts/05_annotate_llm.py --synthetic (без LLM). Именно так собраны страницы в examples/.

Приватность

Коротко: всё локально. Базовые скрипты не имеют сетевого кода; страницы самодостаточны (данные зашиты внутрь HTML) и содержат ТОЛЬКО твои собственные сообщения — реплики собеседников не попадают ни в какой выходной файл. Опциональный LLM-шаг по умолчанию тоже локальный (LM Studio); облачный режим включается только вручную и осознанно. Подробнее — PRIVACY.md. Помни: готовые HTML содержат твои цитаты и имена чатов — не публикуй их бездумно.

Ограничения честно

Откуда это

Пакет вырос из исследовательского проекта «text-as-data на личном 11-летнем архиве» (1,1 млн сообщений): слепой протокол, пре-регистрация, change-point-анализ, валидация LLM-разметки против ручного золотого стандарта. Научная часть и методология — в статьях автора (ссылки появятся здесь).

Лицензия: MIT (код). Автор: Егор Смирнов.