Я сделал Telegram-канал про агро-ИИ, который пишет сам себя. Вот как это устроено изнутри

Идея простая: взять горячую нишу (умное земледелие + ИИ), добавить бесплатный API и получить канал, который публикует контент каждые 4 часа без моего участия. Расскажу, как это работает технически.

Почему именно умное земледелие

Я искал нишу с тремя условиями:

  1. Реальный спрос, но мало качественного контента в Telegram на русском языке
  2. Достаточно новостей и материалов для регулярного постинга
  3. Тема, где ИИ-генерация выглядит органично, а не как спам

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

Архитектура системы

Весь стек — Python. Никакого сложного инфраструктурного оверхеда.

Компоненты:

  • Gemini API (gemini-2.5-flash) — генерация текста постов. Выбрал его из-за щедрого бесплатного тира: 1500 запросов в день бесплатно, что более чем достаточно для 6 постов в сутки
  • APScheduler — планировщик задач внутри Python-процесса. Запускает генерацию и публикацию по расписанию каждые 4 часа
  • python-telegram-bot (async) — отправка постов в канал через Bot API
  • RSS-парсер (feedparser) — сбор свежих новостей из агро-источников для контекста

Пайплайн одного поста:

RSS fetch → выбор темы → промпт в Gemini → парсинг JSON → поиск фото → публикация в Telegram

Каждый шаг занимает 2-5 секунд. Весь цикл — меньше 30 секунд.

Промпт-инжиниринг — самая важная часть

Первая версия давала скучные, однотипные посты. Проблема была в промпте — слишком общем.

Решение: структурированный промпт с жёсткими правилами и ротацией тематик.

Что я задал Gemini:

  • Роль: эксперт-агроном и популяризатор технологий
  • 6 типов постов с жёсткой ротацией: факт дня, кейс технологии, практический совет, опрос аудитории, мировой тренд, лайфхак
  • Список последних 60 постов — чтобы не повторяться по темам и растениям
  • Обязательный вывод в JSON: {"title": "...", "content": "...", "image_query": "..."}
  • Ограничение контента — не более 650 символов (лимит Telegram на подпись к фото)

Пример промпта (упрощённо):

pythonprompt =f""" Ты — эксперт по агротехнологиям и умному земледелию. Напиши пост для Telegram-канала на одну из тем (выбери случайно): 1. Новость: ИИ-технология в сельском хозяйстве 2. Кейс: как конкретная ферма применяет технологию 3. Практика: совет для фермера 4. Факт: удивительная цифра об агро-ИИ ... Недавние посты (не повторяй эти темы): {recent_titles}Ответь СТРОГО в формате JSON: {{"title": "...", "content": "...", "image_query": "..."}} """

Ключевой момент — передача списка последних постов. Это решает проблему повторений, которая убивает любой автономный канал.

Как публикуется пост с картинкой

Я не храню картинки локально. Вместо этого:

  1. Gemini возвращает image_query — конкретное название растения или технологии
  2. Скрипт делает запрос к Wikipedia API и берёт первое фото из статьи
  3. Если фото нет — публикуется текстовый пост без фото

pythondefget_wikipedia_image(query:str)->str|None: url ="https://en.wikipedia.org/w/api.php" params ={"action":"query","titles": query,"prop":"pageimages","format":"json","pithumbsize":800} response = requests.get(url, params=params) pages = response.json()["query"]["pages"] page =next(iter(pages.values()))return page.get("thumbnail",{}).get("source")

Это даёт бесплатные, качественные, лицензионно чистые фотографии без внешних сервисов.

Что пошло не так и как я это починил

Проблема 1: Gemini иногда возвращал не JSON

Решение: явное указание в промпте «ответь ТОЛЬКО JSON, без пояснений и markdown-блоков». Плюс try/except с повторной попыткой при ошибке парсинга.

Проблема 2: Посты повторяли одни и те же растения

Решение: передача 60 последних заголовков в промпт. После этого повторы пропали полностью.

Проблема 3: APScheduler падал после 2-3 дней работы

Решение: обёртка всего в supervisor + автоперезапуск. Теперь процесс восстанавливается автоматически.

Параллельно: сайт plantai.green

Канал — это только верхушка. Параллельно я развиваю сайт plantai.green как полноценный агро-ИИ инструмент:

  • Диагностика болезней по фото — загружаешь фото листа, ИИ определяет болезнь и даёт рекомендации
  • Умные графики полива — персонализированные под конкретный вид растения
  • Защита от заморозков — уведомления на основе прогноза погоды
  • Сосед по грядке — планировщик совместимости растений
  • AI Дизайнер ландшафта — генерация планировок садового участка

Telegram-канал работает как точка входа — даёт ценный контент бесплатно, а сайт предлагает практические инструменты.

Результат и цифры

  • Канал публикует 6 постов в день, 24/7, без ручного участия
  • Затраты на API: $0 (Gemini Flash бесплатный тир)
  • Время на поддержку: ~30 минут в неделю (проверить логи, иногда подправить промпт)
  • Стек: Python 3.11, ~300 строк кода в основном файле

Что дальше

Планирую добавить:

  • Мониторинг вовлечённости (какие типы постов собирают больше реакций) и автоматическую корректировку ротации
  • Генерацию карточек через API изображений вместо Wikipedia-фото
  • Интеграцию с агро-новостными API для более актуального контента

Если интересно — канал: t.me/plant_ai, сайт: plantai.green