BorisovAI
Все публикации
Новая функцияC--projects-ai-agents-voice-agentClaude Code

Voice Agent: Добавил поиск новостей в чат-бота за три часа отладки

Voice Agent: Добавил поиск новостей в чат-бота за три часа отладки

Voice Agent: Как я добавил интеллектуальную систему сбора IT-новостей

Когда разработчик говорит: «А давай добавим поиск по новостям прямо в чат-бота?» — обычно это означает три часа отладки и переосмысления архитектуры. Но в проекте Voice Agent это было неизбежно.

В чём была суть задачи

Система должна была собирать актуальные IT-новости, анализировать их через AI и выдавать релевантные новости прямо в диалог. Звучит просто, но в реальности это означало:

  • Интегрировать веб-поиск в FastAPI бэкенд
  • Построить асинхронную очередь задач
  • Добавить фоновый worker, который проверяет новости каждые 10 секунд
  • Хранить результаты в SQLite через aiosqlite для асинхронного доступа
  • Все это должно работать в монорепо вместе с React фронтенд-ом и Telegram Mini App

Первым делом я разобрался: этот проект — это не просто чат, это целая система с голосовым интерфейсом (используется русская модель Vosk для локального распознавания). Добавлять новости сюда значило не просто расширять функционал, а интегрировать его в существующий пайплайн обработки.

Как это реализовывалось

Я начал с бэкенда. Нужно было создать:

  1. Таблицу в БД для хранения новостей — всего несколько полей: заголовок, ссылка, AI-анализ, дата сбора
  2. Scheduled task в asyncio, которая периодически срабатывает и проверяет, не появились ли новые новости
  3. Tool для LLM — специальный инструмент, который агент может вызывать, когда пользователь просит новости

Неожиданно выяснилось, что интеграция веб-поиска в монорепо с Turbopack требует аккуратности. Пришлось разобраться с тем, как правильно настроить окружение так, чтобы бэкенд и фронт не конфликтовали между собой.

Небольшой экскурс в историю

Кстати, знаете ли вы, почему в веб-скрапинге всегда советуют ограничивать частоту запросов? Это не просто вежливость. В начале 2000-х годов поисковики просто блокировали IP-адреса агрессивных ботов. Сейчас алгоритмы умнее — они анализируют паттерны поведения. Поэтому каждые 10 секунд с задержкой между запросами — это не параноя, а best practice.

Что получилось

В итоге Voice Agent получил новую возможность. Теперь:

  • Система автоматически собирает IT-новости из разных источников
  • AI-модель анализирует каждую статью и выделяет суть
  • Пользователь может спросить: «Что нового в Python?» — и получить свежие новости прямо в диалог
  • Все это работает асинхронно, не блокируя основной чат

Дальше план амбициозный — добавить персонализацию, чтобы система учила, какие новости интересуют конкретного юзера, и научиться агрегировать не только текстовые источники, но и видео с YouTube. Но это уже следующая история.

Главное, что я понял: в монорепо надо всегда помнить о границах между системами. Когда ты добавляешь асинхронный воркер к FastAPI-приложению, который работает рядом с React-фронтенд-ом, мелочей не бывает.

«Если WebSearch работает — не трогай. Если не работает — тоже не трогай, станет хуже.» 😄

Метаданные

Session ID:
grouped_C--projects-ai-agents-voice-agent_20260206_2254
Branch:
main
Dev Joke
Если Jest работает — не трогай. Если не работает — тоже не трогай, станет хуже.

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

0/1000