vk_chat_bot/AGENTS.md

106 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Чат-бот для VK/Telegram с функциями ИИ
## Описание проекта
Это движок чат-бота для мессенджеров VK и Telegram, написанный на Python 3.
Движок поддерживает некоторые полезные функции для групповых чатов (правила, приветствие новичков, статистика сообщений, вычисление молчунов и др.).
В движок интегрирован модуль ИИ: пользователи могут общаться с ботом в личных сообщениях, а также в групповых чатах, если упомянут его.
Модуль ИИ использует API OpenRouter для генерации ответов, а также API fal.ai и Replicate для генерации изображений.
## Архитектура проекта
```
vk_chat_bot/
├── database.py # Базовый класс работы с базой данных
├── messages.py # Константы сообщений
├── utils.py # Общие утилиты
├── tg.json # Тестовая конфигурация для Telegram
├── vk.json # Тестовая конфигурация для VK
├── ai/ # Модуль ИИ
│ ├── agent.py # Основной агент
│ ├── tool.py # Базовый класс инструментов
│ ├── utils.py # Утилиты модуля ИИ
│ │
│ ├── prompts/ # Системные запросы для модуля ИИ
│ │ ├── group_chat.md # Промпт для групповых чатов
│ │ └── private_chat.md # Промпт для личных чатов
│ │
│ └── tools/ # Инструменты
│ └── <toolset1>/ # Набор инструментов 1
│ ├── __init__.py # Реализация набора инструментов 1
│ ├── <function1>.py # Реализация функции 1
│ ├── <function2>.py # Реализация функции 2
│ └── prompt.py # Системный запрос с описанием набора инструментов
├── tg/ # Telegram интеграция (aiogram)
│ ├── __main__.py # Точка входа для Telegram
│ ├── tasks.py # Фоновые задачи
│ ├── handlers/ # Обработчики сообщений и событий
│ └── tg_database.py # Класс БД для Telegram (содержит только схему)
└── vk/ # VK интеграция (vkbottle)
├── __main__.py # Точка входа для VK
├── tasks.py # Фоновые задачи
├── handlers/ # Обработчики сообщений и событий
└── vk_database.py # Класс БД для VK (содержит только схему)
```
## Основные технологии
- **Асинхронность:** asyncio
- **ИИ:** OpenRouter (Grok 4.1 Fast), fal.ai (Seedream 4.5) для обычных изображений, Replicate (Nova Anime XL) для генерации изображений в стиле аниме.
- **Telegram:** aiogram 3.x
- **VK:** vkbottle
- **СУБД:** MariaDB (через pyodbc)
- **Обработка изображений:** PIL/Pillow
## Запуск
### Telegram бот
```bash
python -m tg -c tg.json
```
### VK бот
```bash
python -m vk -c vk.json
```
## Описание компонентов
### BasicDatabase (database.py)
Класс `BasicDatabase` реализует все функции по чтению, изменению и удалению сущностей из БД, которая состоит из трех таблиц:
- `bots` - учетные записи ботов (пока добавляются в БД вручную)
- `chats` - параметры чатов, в которых работают боты (активация, правила, доп. инструкции для системного запроса)
- `contexts` - контексты чатов для модуля ИИ (история сообщений)
### AiAgent (ai/agent.py)
Основной класс, обрабатывающий:
- `get_group_chat_reply()` - генерация ответа в групповом чате
- `get_private_chat_reply()` - генерация ответа в личном чате
- `_generate_reply()` - вызов LLM через OpenRouter
- `_process_tool_calls()` - обработка вызова функций
### Обработчики сообщений и событий мессенджера (handlers)
- `user.py` - команды для всех участников групповых чатов
- `admin.py` - команды для администраторов групповых чатов
- `action.py` - служебные события групповых чатов (вступление/исключение участника, миграция чата)
- `default.py` - сообщения групповых чатов, адресованные боту (режим ИИ-ассистента)
- `private.py` - команды и сообщения в личных чатах
### Фоновые задачи (tasks.py)
- `startup_task()` - действия, выполняемые однократно после авторизации в мессенджере
- `daily_maintenance_task()` - ежедневные служебные задачи (сброс счетчиков, чистка БД, поздравление именинников)
## Особенности разработки
### Стиль кода
- Стандарт PEP8
- Docstrings отсутствуют
- Комментарии только для сложных участков
### Асинхронность
Большая часть функций в проекте - асинхронные.
### Тестирование
Тесты отсутствуют. Для тестирования запускается экземпляр бота с тестовой конфигурацией, и вручную проверяется функциональность.