https://jira.rpa-robin.site/browse/BPM-2484
https://robingit.rpa-robin.site/python-robin/document-search-telegram-bot
https://t.me/robin_assistant_test_bot
Инструкция
# 🤖 ROBIN - Ассистент по поиску в документах
Telegram бот для интеллектуального поиска информации в корпоративных документах с использованием технологий машинного обучения и векторных представлений (embeddings).
## 📋 Описание проекта
ROBIN - это ассистент компании, который помогает пользователям быстро находить ответы на вопросы в регламентах и инструкциях. Бот использует современные технологии обработки естественного языка для поиска релевантной информации в загруженных документах.
### 🚀 Основные возможности
- **Интеллектуальный поиск** по содержимому документов
- **Загрузка документов** в различных форматах (PDF, DOC, DOCX, TXT и др.)
- **Работа в личных чатах** и **группах Telegram**
- **Управление документами** (просмотр списка, удаление)
- **Интеграция с LLM** для генерации точных ответов
- **Ограничение размера файлов** до 20MB
## 🏗️ Архитектура и инфраструктура
### Компоненты системы
1. **Telegram Bot** (`app.py`) - основной интерфейс взаимодействия с пользователями
2. **API для поиска** - внешний сервис для обработки запросов и поиска в документах
3. **База документов** - хранилище загруженных файлов и их векторных представлений
4. **Docker** - контейнеризация для легкого развертывания
### Технологии
- **Python 3.9+**
- **Aiogram 3.13+** - фреймворк для Telegram ботов
- **aiohttp** - асинхронные HTTP запросы
- **Requests** - HTTP клиент для API
- **Docker & Docker Compose** - контейнеризация
## 📦 Установка и развертывание
### Локальная разработка
1. **Клонируйте репозиторий:**
```bash
git clone <repository-url>
cd document-search-telegram-bot
```
2. **Установите зависимости:**
```bash
pip install -r requirements.txt
```
3. **Настройте переменные окружения:**
```bash
cp .env.example .env
```
Отредактируйте `.env` файл:
```env
# URL внешнего API для поиска в документах
API_URL=http://localhost:8000/retriever
# Токен Telegram бота (получить у @BotFather)
BOT_TOKEN=your_bot_token_here
# Имя бота в Telegram (например @your_bot)
BOT_NAME=@your_bot_name
# Маршруты API (обычно не нужно менять)
QUESTION_ROUTE=/internal/question
DOCUMENT_ROUTE=/documents
GROUP_ROUTE=/document-groups
```
4. **Запустите бота:**
```bash
python app.py
```
### Развертывание на сервере с Docker
1. **Убедитесь, что установлен Docker и Docker Compose**
2. **Соберите и запустите контейнер:**
```bash
# Сборка образа
docker-compose build
# Запуск бота
docker-compose up -d
```
3. **Проверьте логи:**
```bash
docker-compose logs -f tgbot-test
```
### Переменные окружения
| Переменная | Описание | Пример |
|------------|----------|---------|
| `API_URL` | URL сервиса для поиска в документах | `http://localhost:8000/retriever` |
| `BOT_TOKEN` | Токен Telegram бота от BotFather | `123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11` |
| `BOT_NAME` | Имя бота в Telegram | `@robin_assistant_bot` |
| `QUESTION_ROUTE` | Маршрут для запросов вопросов | `/internal/question` |
| `DOCUMENT_ROUTE` | Маршрут для управления документами | `/documents` |
| `GROUP_ROUTE` | Маршрут для групп документов | `/document-groups` |
## 💬 Использование бота
### В личном чате
1. **Начало работы:**
- Отправьте команду `/start`
- Бот представится и объяснит свои возможности
2. **Задать вопрос:**
- Просто напишите вопрос в чат
- Пример: *"Как оформить отпуск?"*
3. **Загрузка документов:**
- Отправьте файл (PDF, DOC, DOCX, TXT и т.д.)
- Максимальный размер: 20MB
- Бот подтвердит успешную загрузку
4. **Управление файлами:**
- `/files` - посмотреть список всех загруженных файлов
- `delete <ID>` - удалить файл по его ID
### В группах Telegram
1. **Добавьте бота в группу** как участника
2. **Упоминание бота:**
- Напишите `@имя_бота ваш_вопрос`
- Пример: `@robin_assistant_bot Как подключить интернет?`
3. **Бот ответит** на ваш вопрос, используя загруженные документы
### Команды бота
| Команда | Описание | Пример использования |
|---------|----------|---------------------|
| `/start` | Приветствие и начало работы | `/start` |
| `/files` | Показать список всех файлов | `/files` |
| `delete <ID>` | Удалить файл по ID | `delete 12345` |
| *Файл* | Загрузить документ | Отправьте PDF или DOC файл |
| *Вопрос* | Искать ответ в документах | *"Какие правила безопасности?"* |
### Особенности работы
- **Длинные ответы:** Если ответ превышает 1000 символов, бот предложит показать полный текст
- **Форматирование:** Ответы поддерживают HTML-разметку для лучшего отображения
- **Обработка ошибок:** Бот gracefully обрабатывает сетевые ошибки и недоступность API
- **Логирование:** Все запросы и ответы логируются для отладки
## 🔧 Настройка и конфигурация
### Ограничения
- **Размер файла:** максимум 20MB (ограничение Telegram)
- **Длина ответа:** до 4096 символов в одном сообщении
- **Количество файлов:** не ограничено (зависит от внешнего API)
### Мониторинг
Бот логирует все действия:
- Входящие вопросы пользователей
- Ответы от API
- Загрузку и удаление файлов
- Ошибки и исключения
Логи доступны через Docker:
```bash
docker-compose logs tgbot-test
```
## 🧪 Тестирование
Тестовый бот доступен по адресу: https://t.me/robin_search_bot
### Запуск тестов
```bash
# Запуск в режиме тестирования
docker-compose -f docker-compose-test.yml up -d
```
## 📚 API интеграция
Бот взаимодействует с внешним API через следующие endpoints:
- **POST** `/document-groups` - создание группы документов
- **GET** `/internal/question` - поиск ответов на вопросы
- **POST** `/documents` - загрузка документов
- **GET** `/documents` - получение списка документов
- **DELETE** `/documents/{id}` - удаление документа
## 🐛 Устранение неисправностей
### Проблемы с запуском
1. **Проверьте токен бота** - убедитесь, что токен действительный
2. **Проверьте API URL** - сервис поиска должен быть доступен
3. **Проверьте логи** - `docker-compose logs`
### Проблемы с поиском
1. **Нет документов** - загрузите документы через бота
2. **API недоступен** - проверьте подключение к сервису поиска
3. **Неправильный вопрос** - переформулируйте вопрос более конкретно
## 📝 Лицензия
[Укажите лицензию проекта]
## 👥 Контакты
[Укажите контактную информацию для поддержки]
