8.4 KiB
8.4 KiB
ТЗ: Telegram-бот «Байтик» 🤖
Детский ИИ-помощник для Егора (8 лет, ДР 17.04.2018) Проект:
proj_bytik| Дата создания: 2026-04-14
1. Цель
Telegram-бот, который:
- Отвечает на вопросы ребёнка простым языком
- Присылает 1-2 раза в день энциклопедические факты (утро 7:30 MSK)
- Поздравляет с праздниками и ДР
- Работает только в одной группе (whitelist chat_id)
- Строгая детская цензура 0+
2. Требования к боту
2.1 Whitelist (критично)
- Разрешённый chat_id: будет прописан в
.env(ALLOWED_CHAT_ID) - Бот принимает сообщения только из этой группы
- Сообщения из ЛС и других групп — полный игнор (без ответа)
- При добавлении в новую группу — автоматически
leave_chat - Проверка:
message.chat.idдля text,callback_query.message.chat.idдля inline
2.2 Обработка сообщений
- Получает текст от пользователя в разрешённом чате
- Отправляет промпт в LLM (OpenRouter API, Qwen 3.6-Plus)
- Получает ответ → отправляет в Telegram
- Поддерживает диалог (хранит последние 5-10 сообщений как контекст)
2.3 Системный промпт (обязателен)
Ты — Байтик, дружелюбный робот-помощник для мальчика Егора (8 лет).
Правила:
- Объясняй сложные вещи просто, с примерами, которые понятны 8-летнему
- Используй эмодзи, чтобы было весело
- Если спрашивают на русском — отвечай на русском
- Иногда (когда уместно) отвечай на простом английском, по типу "Did you know..." — это помогает учить язык
- Если вопрос про что-то тревожное (смерть, война, болезни): мягко уйди от темы, а если настаивает — скажи "Это серьёзный вопрос, лучше спроси у папы!"
- НИКОГДА не используй ненормативную лексику, страшные подробности, или взрослые темы
- Если не знаешь ответа — честно скажи, но предложи "давай поищем вместе!"
- Иногда используй смешные факты и шутки
- Будь терпелив — ребёнок может задавать один и тот же вопрос много раз
- Используй короткие ответы для детей до 12 лет, не более 200 слов
2.4 Утренняя рассылка
- Время: 07:30 MSK (04:30 UTC)
- Присылать 1 интересный энциклопедический факт
- Темы по интересам Егора: машины, самолёты, корабли (Титаник!), лего, животные, география, математика, IT, Minecraft
- Формат: текст + эмодзи, иногда картинка
- Можно иногда отправлять голосовое сообщение (через ElevenLabs TTS)
2.5 Праздники и ДР
- 17 апреля: поздравление с ДР (особое, весёлое)
- 1 января: Новый Год
- 23 февраля: День защитника Отечества
- 8 марта: Международный женский день
- 12 апреля: День космонавтики (Егор любит, будет в тему!)
- Другие: можно добавить в конфиг
2.6 Голосовые сообщения (опционально)
- Иногда факты/ответы — голосом
- ElevenLabs TTS (или Yandex SpeechKit fallback)
- Конвертация в OGG Opus (требование Telegram)
3. Архитектура
3.1 Технологии
- Язык: Python 3.11+
- Telegram:
aiogram3.x - LLM: OpenRouter API (
openrouter/openrouter/autoили явноopenrouter/qwen/qwen3.6-plus) - TTS (опционально): ElevenLabs API / Yandex SpeechKit
- Конфиг:
.env(python-dotenv) - Хранение диалога: JSON-файлы по user_id в
data/chat_history/
3.2 Структура проекта
bytik/
├── bot.py # Точка входа
├── config.py # Загрузка конфига из .env
├── prompts.py # Системный промпт + факты
├── llm.py # Обёртка над OpenRouter API
├── tts.py # Голосовые сообщения
├── scheduler.py # Планировщик (рассылка + праздники)
├── chat_history.py # Хранение контекста диалогов
├── facts.json # Энциклопедические факты
├── holidays.json # Праздники
├── data/
│ └── chat_history/ # JSON файлы с историей
├── .env # Секреты
├── .env.example # Пример
└── requirements.txt # Зависимости
3.3 .env.example
BOT_TOKEN=<telegram_bot_token>
ALLOWED_CHAT_ID=<group_chat_id>
OPENROUTER_API_KEY=<key>
OPENROUTER_MODEL=openrouter/qwen/qwen3.6-plus
ELEVENLABS_API_KEY=<key> # optional
4. Инфраструктура
- Хост: mva154 (контейнер OpenClaw) или vpn-srv
- Запуск: как Docker container (предпочтительно) или systemd service
- Бэкапы: chat_history JSON-файлы
- Логи:
logs/bytik.log
5. Безопасность
5.1 Whitelist — ОБЯЗАТЕЛЬНО
- Все входящие сообщения проходят фильтр
message.chat.id == ALLOWED_CHAT_ID - Невалидные сообщения — молчаливый игнор
- При
my_chat_member: leftили добавлении в новую группу →leave_chat()
5.2 Контент-фильтр
- LLM промпт уже содержит ограничения
- Валидация ответа: если содержит мат / adult контент → не отправлять, логировать
- Можно добавить дополнительный фильтр (список запрещённых слов)
6. Этапы реализации
Фаза 1 (MVP)
- Бот принимает сообщения из whitelist группы
- Отправляет в LLM, получает ответ, шлёт в Telegram
- Системный промпт с детской цензурой
Фаза 2
- Утренняя рассылка (7:30 MSK)
- Праздничные поздравления
- Контекст диалога (последние N сообщений)
Фаза 3
- Голосовые сообщения (TTS)
- Картинки (генерация или подбор)
7. Критерии приёмки
- Бот отвечает только в разрешённой группе
- Игнорирует ЛС и другие группы
- Системный промпт блокирует взрослый контент
- Утренняя рассылка в 07:30 MSK
- Поздравление с ДР Егора (17.04)
- Ответы простые, понятные 8-летнему
- Контекст диалога сохраняется
- Логи пишутся в файл
8. Примечания
- День рождения Егора — 17.04.2018 (скоро 8 лет!)
- Интересы: машины, самолёты, корабли, лего, животные, география, математика, IT, Minecraft
- LLM: Qwen 3.6-Plus (OpenRouter)
- Дедлайн: фаза 1 готова к 16.04.2026 (чтобы ДР поздравить!)