1
0
Fork
You've already forked taskrelay
0
No description
  • Go 86.5%
  • HTML 13.5%
2026年06月13日 00:53:04 +03:00
documents taskrelay 2026年06月13日 00:53:04 +03:00
modules taskrelay 2026年06月13日 00:53:04 +03:00
ssl taskrelay 2026年06月13日 00:53:04 +03:00
templates taskrelay 2026年06月13日 00:53:04 +03:00
voices taskrelay 2026年06月13日 00:53:04 +03:00
.gitignore taskrelay 2026年06月13日 00:53:04 +03:00
config.example.yaml taskrelay 2026年06月13日 00:53:04 +03:00
go.mod taskrelay 2026年06月13日 00:53:04 +03:00
go.sum taskrelay 2026年06月13日 00:53:04 +03:00
main.go taskrelay 2026年06月13日 00:53:04 +03:00
Makefile taskrelay 2026年06月13日 00:53:04 +03:00
README.md taskrelay 2026年06月13日 00:53:04 +03:00

Taskrelay

Корпоративная система управления задачами с AI-ассистентом для мессенджера MAX. Сотрудники работают через чат-бот; администраторы - через веб-панель. Backend - монолит на Go, данные хранятся в PostgreSQL с расширением pgvector.


Требования

Системные зависимости

Зависимость Назначение
Go ≥ 1.24 сборка приложения
PostgreSQL + pgvector хранение данных, векторный поиск
poppler-utils (pdftotext) извлечение текста из PDF
antiword извлечение текста из .doc
ffmpeg обработка голосовых сообщений перед распознаванием

DOCX и XLSX обрабатываются без внешних утилит (парсинг на Go).

Внешние сервисы

  • MAX Bot API - приём сообщений через webhook
  • Yandex Cloud - Yandex GPT (NLP, эмбеддинги), SpeechKit (STT), IAM-токен для распознавания речи
  • OpenAI API - эмбеддинги документов (text-embedding-3-small); при необходимости запросы идут через HTTP-прокси
  • DeepSeek API - RAG-ответы, классификация запросов, аналитика по табличным данным

Запуск

1. База данных

Создайте PostgreSQL-базу. Расширение vector создаётся автоматически при миграции.

2. Конфигурация

Скопируйте пример конфигурации рядом с исполняемым файлом:

cp config.example.yaml config.yaml

Отредактируйте config.yaml:

Параметр Описание
domain Домен для HTTPS и ссылок на файлы (Let's Encrypt)
port HTTPS-порт (по умолчанию 443)
login, password Учётные данные веб-админки
max_token Токен бота MAX
db_* Подключение к PostgreSQL
yandex_api_key, yandex_oauth_token, yandex_catalog_id Yandex Cloud
openai_api_key OpenAI
proxy_url, proxy_user, proxy_password Прокси для OpenAI (опционально)
deepseek_api_key DeepSeek

Конфигурация читается из каталога, где лежит исполняемый файл (config.yaml).

3. Сборка и миграции

make build
make migrate

Миграции создают таблицы, HNSW-индексы для pgvector и начальные статусы задач.

4. Запуск

make run

При старте поднимаются:

  • HTTPS-сервер на Echo (порт из конфига) с автоматическим TLS через Let's Encrypt (golang.org/x/crypto/acme/autocert); HTTP :80 используется для ACME-challenge
  • Webhook MAX на POST /bot/max/webhook
  • Фоновая индексация документов (каждые 10 с)
  • Мониторинг IAM-токена Yandex (каждые 10 мин)

5. Настройка MAX

В панели бота MAX укажите webhook:

https://<domain>/bot/max/webhook

Домен должен быть доступен из интернета - это нужно и для Let's Encrypt.


Функциональность

Управление задачами в чат-боте

Реализовано через MAX Bot API (max-bot-api-client-go): inline-кнопки, многошаговые сценарии, state machine по полю active_command пользователя в GORM-модели.

  • Постановка задач естественным языком (исполнитель, дедлайн, описание, соисполнители, приоритет) - парсинг через Yandex GPT с JSON Schema по настраиваемым промптам
  • Поиск исполнителей по ФИО - векторный поиск (эмбеддинги Yandex, индекс HNSW в pgvector)
  • Жизненный цикл: принятие, промежуточные/финальные отчёты, перенос дедлайна, перенаправление, завершение/отклонение
  • Роли: постановщик, исполнитель, соисполнитель

AI и работа с документами

  • Автоанализ отчётов для постановщика (Yandex GPT)
  • RAG по PDF/DOC/DOCX: извлечение текста → чанки → эмбеддинги OpenAI → ответы DeepSeek
  • Аналитика по Excel (закупки/цены): разброс цен, отклонения от рынка, аномалии, оптимальный бюджет, лидеры по категориям - SQL-агрегации по структурированным данным из XLSX
  • Диалог с ИИ по прикреплённым файлам; проверка по корпоративным регламентам (индексируются через POST /api/regulation)
  • Голосовые сообщения: ffmpegYandex SpeechKit (IAM-токен обновляется автоматически)

Фоновый воркер в main.go каждые 10 секунд индексирует новые вложения из documents/.

Операционная автоматизация

Планировщик в modules/max/notification_scheduler.go (часовой пояс Europe/Moscow, без уведомлений по воскресеньям):

  • напоминания о просроченных задачах и неотправленных отчётах
  • ежедневное меню в 09:00
  • ночная очистка чата (00:00)

Веб-админка

Сервер на Echo v4, HTML-шаблоны в templates/, авторизация по cookie-сессиям (SessionManager).

Маршрут Описание
/, /login Вход в админку
/users, /users/:id Пользователи: просмотр, бан, удаление
/tasks, /tasks/:id Задачи: фильтры, редактирование, удаление
/tasks/csv, /tasks/xlsx Экспорт (excelize, CSV с кодировкой Windows-1251)
/yandex/prompts Редактирование промптов Yandex GPT
/api/reports/document/:filename Скачивание файлов отчётов
/api/regulation Загрузка регламентов для индексации
/bot/max/webhook Webhook бота MAX

TLS - Let's Encrypt через autocert; сертификаты кэшируются в ssl/.


Архитектура

main.go
modules/
 config/ - YAML-конфиг (cleanenv)
 database/ - GORM, PostgreSQL, pgvector, репозиторий
 max/ - бот MAX: handlers, buttons, webhook, планировщик
 web/ - Echo, controllers, middlewares, HTML-шаблоны
 yandex/ - Yandex GPT, SpeechKit, IAM-тokens
 openai/ - эмбеддинги документов
 deepseek/ - RAG, классификация запросов, аналитика
 docs/ - парсинг PDF/DOC/DOCX/XLSX, чанки, индексация
 helper/ - утилиты (ffmpeg, экспорт, ссылки на документы)
 logger/ - slog