BorisovAI
Все потоки
Исправлениеbot-social-publisher1 заметок

Разработка: bot-social-publisher

Поток разработки проекта bot-social-publisher. 1 заметок: баг-фиксы (1). Последние темы: Бот, который помнит, где остановился: история оптимизации.

#git#commit#python#api#security
Начало
Завершён
1
Исправление

Как мы научили бота-публикатора читать только новое и не зацикливаться

Работаю над bot-social-publisher — инструментом, который автоматизирует публикацию контента в соцсети. За время разработки проект рос и требовал всё более изощренных решений. Недавно пришло время для серьёзного апдейта: версия 2.2 превратилась в настоящий рефакторинг с половиной архитектуры.

Основная боль была в том, что бот каждый раз перечитывал весь лог событий с самого начала. Проект растёт, логов накапливается тонны, и перечитывать их каждый раз — это пустая трата ресурсов. Первым делом внедрил incremental file reading: теперь каждый collector (собиратель событий) сохраняет позицию в файле и читает только новый контент. Позиции и состояния переносят перезапуски — данные не теряются.

Второе узкое место: события из одного проекта приходят разреженно и хаотично. Если публикация выходит с опозданием, сессия кажется невнятной. Ввел project grouping — теперь все сессии из одного проекта, которые случились в окне 24 часа, объединяются в одну публикацию. Начало звучать куда более логично.

Но бот просто агрегировал события — не очень информативно. Подключил SearXNG news provider, чтобы вплетать в промпты релевантные технологические новости. И добавил content selector с алгоритмом скоринга, который отбирает 40–60 самых информативных строк из лога. Выглядит как машинное обучение, а на деле простая эвристика, которая работает хорошо.

Далее натолкнулся на проблему качества текста. LLM первый раз генерирует контент, но грамматика хромает. Внедрил proofreading pass — второй вызов LLM, но уже как редактор. Он проходит по тексту и чистит пунктуацию, стиль, грамматику. Результат — ночь и день.

Когда LLM генерирует заголовок, иногда получаются дубли. Вместо того чтобы просто выпустить дубль, добавил title deduplication с авто-регенерацией (до трёх попыток). А ещё реализовал tray notifications — теперь разработчик видит нативные уведомления ОС о публикациях и ошибках. И главное: добавил PID lock, чтобы предотвратить запуск нескольких инстансов одновременно.

Интересный момент: PyInstaller. Когда собираешь exe-бандл, пути до ресурсов перестают работать. Правильное разрешение путей в APP_DIR/BUNDLE_DIR — то есть нужно отдельно обрабатывать контекст запуска из exe. Мелочь, но без этого бандл просто не запустится.

Ещё поменял логику пороговых значений: вместо min_lines теперь min_chars. Когда работаешь с короткими строками, количество символов точнее отражает объём контента, чем количество строк. И как положено, добавил AGPL-v3 лицензию ко всем файлам исходника.

В итоге v2.2 — это не просто апдейт, а переосмысление архитектуры вокруг идеи: не перечитывай лишнее, интеллектуально выбирай информацию, дважды проверяй качество, предотврати конфликты. Бот теперь быстрее, умнее и его легче деплоить.

😄 Знаешь, почему логирование через RotatingFileHandler — лучший друг разработчика? Потому что диск полный. С ротацией логов хотя бы видно, когда именно он полный.

#git#commit#python#api#security
Читать далее

Оцените материал

0/1000