AI-дайджест: как закрыть очередь «прочитаю потом» за ночь

AI-дайджест: как закрыть очередь «прочитаю потом» за ночь

В очереди «прочитаю потом» у меня висят ссылки с 2022 года. Знакомая картина: статью сохранили в метро, открыли на созвоне, закрыли и забыли. Папка растёт, чувство вины тоже, а чтение так и не начинается.

Проект Sloth Reads бьёт не в скорость чтения, а в момент выбора. Он каждую ночь разбирает вашу очередь, выносит по каждой статье вердикт и к утру готовит бриф на минуту. Всё, что заслуживает внимания, он ещё и озвучивает, подсвечивая слово за словом. Код открыт под MIT, живёт проект на DigitalOcean, считает в Tiger Data, говорит голосом ElevenLabs.

Разбор интересен не очередной обёрткой над LLM. Здесь аккуратно собраны три вещи, которые обычно ломаются в личных AI-инструментах: расписание вместо интерфейса, вердикт вместо пересказа и жёсткий контроль над расходом кредитов на озвучку.

Что такое Sloth Reads

Sloth Reads это личный AI-дайджест отложенного чтения: вы сохраняете ссылки, ночью открытая модель Gemma 4 читает их, пишет резюме на два-три предложения с тремя выводами и решает, стоит ли статья вашего времени. Утром вы получаете минутный бриф и озвучку лучших материалов.

Автор выложил проект на третью неделю Hacktoberfest Open-Source AI Challenge, тема которой звучала как «медленно и уверенно». Название и ленивец в логотипе отсюда же.

Почему пересказ сам по себе не работает

Саммаризаторов за последние три года стало больше, чем статей, которые они пересказывают. Проблема в том, что пересказ не снимает главный вопрос: читать это сейчас или не читать вообще.

Sloth Reads выдаёт по каждой статье не только две-три строки текста и три тезиса, но и вердикт из трёх вариантов: стоит прочитать, пробежать по диагонали, пропустить. К вердикту прилагается одна причина, написанная для конкретного человека, а не для абстрактного читателя. Формально это то же самое, что делает редактор, когда отбирает материалы в утреннюю рассылку, только редактор здесь работает на вас и знает, что вы сами положили в очередь.

Разница в психологии. Пересказ добавляет ещё один текст, который надо прочитать. Вердикт уменьшает количество решений, которые вам предстоит принять: открыть, пролистать или удалить. Для свалки закладок второе важнее.

Ночной конвейер: четыре часа и шесть утра

Чтение запускается не по кнопке, а по расписанию. DigitalOcean Functions с scheduled-триггерами будят обработчик каждый час с часа ночи до пяти утра. За каждый проход он читает несколько статей и складывает результаты в базу. В шесть утра собирается утренний бриф.

Ступенчатый график выглядит как перестраховка, но у него есть инженерный смысл. Во-первых, длинная пачка материалов в одном вызове упирается в таймауты serverless-функций и в лимиты модели. Во-вторых, обработка по чуть-чуть даёт изоляцию сбоев: упавшая статья не уносит с собой весь ночной проход. Разбиение на пять независимых запусков означает, что тридцать статей обработаются за ночь даже при частичных ошибках, а не превратятся в один упавший батч.

Есть и цена: если вы добавили ссылку в семь утра, ждать её придётся до следующей ночи. Проект сознательно выбирает пакетную обработку вместо мгновенной, потому что смысл сервиса в отложенном решении, а не в чате с моделью.

Как Gemma 4 судит статьи

Модель работает в двух местах. В облаке это Gemma 4 с 31 миллиардом параметров на serverless inference DigitalOcean. Локально тот же сценарий запускается через Ollama под именем gemma4. Эмбеддинги считает bge-m3 от BAAI, и это единственная модель, которая одинакова в облаке и на ноутбуке, что важно для поиска: векторы, посчитанные локально, должны лежать в том же пространстве, что и облачные.

На одну статью модель выдаёт компактный результат: резюме, три вывода, вердикт, причину и вектор для поиска. Такая схема дешевле, чем длинный пересказ, и лучше проверяется. Если вердикт ошибочен, видно, где именно: в резюме, в причине или в самом решении.

Слабое место здесь очевидно. Модель знает, что вы сохранили, но не знает, зачем. Если статья попала в очередь как «надо разобраться перед собеседованием», а не «интересно», вердикт будет строиться на общих представлениях о полезности. Персонализация в проекте держится на одном сигнале, на факте сохранения. Это честный минимум, но не больше.

Озвучка, которая не сжигает бюджет

Самая интересная часть проекта не в модели, а в экономике синтеза речи. ElevenLabs отдаёт эндпоинт stream/with-timestamps, который возвращает аудио и тайминги символов одновременно, поэтому подсветка произносимого слова не требует отдельного распознавания.

Дальше начинаются решения, которые экономят деньги. Приложение стримит озвучку кусками размером с абзац, и звук начинается примерно через секунду вместо ожидания всего файла. Генерация останавливается, когда вы останавливаете прослушивание, а не дочитывает статью в пустоту. Каждый кусок вместе с таймингами кэшируется отдельно для каждого голоса, поэтому повторное прослушивание бесплатно и всё равно с подсветкой.

Голосов пять: Matilda, Eric, George, Lily, Brian. Переключение посреди статьи продолжает с той же фразы, потому что cached-куски привязаны к предложениям. Позиция «продолжить с 40%» тоже восстанавливается по предложению, а не по секунде.

Расход кредитов ограничен на уровне архитектуры. Владелец может озвучить что угодно, а посетители делят дневной бюджет голоса, и в него идёт только собственное прослушивание. Проверка бюджета стоит перед каждым куском. Если кредиты закончились, читать текст всё равно можно. Это редкий пример того, как ограничение встроено в продукт, а не прикручено биллингом сверху.

Гибридный поиск по смыслу

Всё, что прочитал ленивец, остаётся в базе с вектором и полнотекстовым индексом. Поиск идёт двумя путями сразу: pgvector по эмбеддингам bge-m3 и обычный полнотекстовый поиск, результаты сливаются через reciprocal rank fusion. Запрос «transcribing audio with flutter» находит нужный пост, даже если этих слов в тексте нет.

Приём старый и надёжный. Векторный поиск ловит смысл и проваливается на точных именах и артикулах, полнотекстовый делает наоборот, а RRF складывает два ранжирования без настройки весов. Для личной библиотеки из сотен статей этого достаточно, и это ровно тот случай, когда простая гибридная схема выигрывает у модных решений с переранжировщиком.

Минуты, которые вы не потратили

Счётчик сэкономленного времени сделан на Tiger Data, то есть на TimescaleDB с расширением pgvector. Таблицы runs и saved объявлены hypertables, а saved_daily это continuous aggregate, который держит дневную сводку для графика.

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

Что из этого можно перенести в свой пайплайн

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

Второе: решайте за пользователя, но объясняйте решение. Три уровня вердикта с одной причиной дают больше, чем страница пересказа. Это же правило работает в корпоративных ассистентах: «этот тикет можно закрыть, потому что...» полезнее, чем «вот краткое содержание тикета».

Третье: кэшируйте дорогие операции по ключу, который не меняется. Озвучка стоит денег, но один и тот же абзац одним и тем же голосом не должен оплачиваться дважды. Кэш на уровне предложения заодно решает задачу возобновления с места остановки.

Четвёртое: ставьте бюджет на пользователя, а не на сервис. Дневной лимит голоса на посетителя защищает и от случайного скрипта, и от чужой щедрости, и не мешает владельцу.

Пятое: оставьте локальный режим. Проект запускается на ноутбуке через Ollama, а для разработки голос подменяется системным say. Это снижает стоимость входа до нуля и позволяет проверить пайплайн до того, как вы заплатите за inference и синтез.

Слабые места проекта

Приватность здесь устроена просто: все ссылки уходят в облако. DigitalOcean Functions читают страницы, Gemma 4 на serverless inference их обрабатывает, Tiger Cloud хранит тексты и векторы, ElevenLabs получает абзацы на озвучку. Для личной очереди чтения это приемлемый компромисс, для рабочих документов уже нет.

Интерфейс и голоса англоязычные, русская очередь чтения потребует другого синтеза и, скорее всего, другой модели для резюме. Оценка времени чтения приблизительная, а вердикты опираются на один сигнал, факт сохранения.

Есть и организационный риск. Проект вырос из хакатона, а такие сервисы живут ровно столько, сколько автор готов платить за inference и поддерживать интеграции с DEV и ElevenLabs. Открытый код под MIT здесь главная страховка: пайплайн можно поднять у себя, даже если демо закроется.

Часто задаваемые вопросы

Сколько стоит держать такой сервис?

Проект не публикует смету, но переменные расходы видны по компонентам: inference для модели на 31 миллиард параметров, посимвольная оплата синтеза речи у ElevenLabs и managed Postgres с расширениями. Основную часть съедает озвучка, поэтому кэш и дневной бюджет кредитов здесь не оптимизация, а условие существования. Локальный запуск на Ollama стоит ноль.

Можно ли запустить всё локально?

Да, для этого есть режим Ollama с моделями gemma4 и bge-m3, команда npm run nightly для ручного ночного прохода и переменная TTS=say для бесплатной замены голоса при разработке. Часть про расписание и облачные функции придётся заменить своим кроном, но логика чтения, вердиктов и поиска остаётся той же.

Заменяет ли такой дайджест чтение статей?

Нет, он заменяет этап отбора. Вы получаете резюме и вердикт, чтобы решить, какие три статьи из тридцати действительно стоит открыть. Полноценная замена чтения потребовала бы доверия к пересказу, а модель на 31 миллиарде параметров всё ещё путает детали в длинных технических текстах.

Итог

AI-дайджест отложенного чтения интересен не моделью, а сборкой: расписание, которое работает без вашего участия, вердикт вместо очередного пересказа, озвучка с кэшем на уровне предложения и гибридный поиск по всему, что уже прочитано. Sloth Reads показывает, что личный AI-инструмент может быть маленьким, дешёвым и честным в ограничениях.

Если у вас лежит папка закладок с 2022 года, попробуйте демо на slothreads.souvikbiswas.com и сравните вердикты со своим мнением о статьях. Расхождения будут интереснее совпадений: они показывают, по каким признакам вы на самом деле решаете, что читать.

← Все записи