🚀 Автоматизация сборки выпусков научных журналов за 10 минут
🌐 Production: https://airesume.zhezu.kz — субдомен Жезказганского университета имени О.А. Байконурова
AI-powered редактор для научных журналов с автоматической обработкой статей, проверкой орфографии и генерацией рецензий.
🆕 v3.1: Мульти-провайдерная архитектура с автоматическим переключением!
- ⚡ OpenRouter (DeepSeek) — primary, лучший для JSON и инструкций
- 🔄 Groq (Llama 3.3 70B) — fallback, быстрый и бесплатный
- 🌐 Google Gemini — backup, надёжный резерв
- 🌍 Мультиязычность — русский, казахский и английский
- 📦 100% анализ — полный текст статьи без обрезки
- 📊 Analytics — мониторинг confidence scores и A/B тестирование
- 📄 Автоматическое извлечение метаданных - AI определяет название статьи и автора из DOCX файлов
- 🔤 Автоматическая сортировка - статьи сортируются по языку (кириллица/латиница) и фамилии автора
- ✅ Проверка орфографии - AI анализирует текст и находит ошибки
- 📝 Рецензирование - генерация профессиональных рецензий с оценками по 5 критериям
- 📚 Управление структурой - загрузка титульного листа, описания и заключительной страницы
- 📦 Генерация PDF - автоматическая сборка выпуска с содержанием
- 💾 Архив выпусков - хранение истории всех созданных выпусков
- React 18 - современный UI
- Vite - быстрая сборка и разработка
- Tailwind CSS - стилизация
- Lucide React - иконки
- Node.js + Express - API сервер
- Мульти-провайдерная AI архитектура с автоматическим переключением
| # | Провайдер | Модель | Free Tier |
|---|---|---|---|
| 1 | OpenRouter | deepseek-r1t2-chimera |
200 req/day |
| 2 | Groq | llama-3.3-70b-versatile |
100K tokens/day |
| 3 | Gemini | gemini-2.0-flash-lite |
1500 req/day |
┌─────────────────┐ ┌─────────────────┐
│ Frontend │────▶│ Backend API │
│ (React) │ │ (Express) │
└─────────────────┘ └────────┬────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│OpenRouter│ │ Groq │ │ Gemini │
│(Primary) │ │(Fallback)│ │ (Backup) │
│ DeepSeek │ │Llama 3.3 │ │ Flash │
└──────────┘ └──────────┘ └──────────┘
Автоматическое переключение: если primary недоступен → fallback → backup
- Node.js 18+
- npm или yarn
- Минимум один AI API ключ (рекомендуется все три для надёжности):
- OpenRouter API — бесплатно, 200 req/day
- Groq API — бесплатно, 100K tokens/day
- Google Gemini API — бесплатно, 1500 req/day
git clone https://github.com/yourusername/AI-Redactor.git
cd AI-Redactornpm install
# или
yarn installСоздайте файл .env в корне проекта:
cp .env.example .envОткройте .env и добавьте API ключи:
# Primary: OpenRouter (DeepSeek) - лучший для JSON
OPENROUTER_API_KEY=your-openrouter-api-key-here
# Fallback: Groq (Llama 3.3 70B) - быстрый
GROQ_API_KEY=your-groq-api-key-here
# Backup: Google Gemini - надёжный резерв
GEMINI_API_KEY=your-gemini-api-key-hereПолучение API ключей (все бесплатные):
| Провайдер | Ссылка | Free Tier |
|---|---|---|
| OpenRouter | openrouter.ai/keys | 200 req/day |
| Groq | console.groq.com | 100K tokens/day |
| Gemini | aistudio.google.com | 1500 req/day |
npm run dev
# или
yarn devПриложение откроется в браузере по адресу http://localhost:3000
- Титульный лист - обложка вашего журнала (формат: .docx или .pdf)
- Описание и редакция - информация о журнале и редколлегии
- Заключительная страница - финальная страница после содержания
- Перетащите .docx файлы в зону загрузки или выберите файлы вручную
- AI автоматически извлечет название и автора
- Статьи будут отсортированы по языку и автору
- Запустится автоматическая проверка орфографии
- Отредактируйте названия и авторов при необходимости
- Проверьте результаты орфографии во вкладке "Проверка орфографии"
- Создайте рецензии для статей во вкладке "Рецензия"
- Убедитесь, что загружены все обязательные страницы
- Нажмите кнопку "Сгенерировать PDF"
- Выпуск будет сохранен в архиве
AI-Redactor/
├── src/ # Frontend (React)
│ ├── components/
│ │ ├── Editor/ # Компоненты редактора
│ │ ├── SpellCheck/ # Проверка орфографии
│ │ ├── Review/ # Рецензирование
│ │ ├── Archive/ # Архив выпусков
│ │ └── UI/ # Общие UI компоненты
│ ├── services/
│ │ └── aiApi.js # Frontend API клиент
│ ├── constants/
│ │ └── sections.js # Константы разделов
│ ├── utils/
│ │ ├── fileValidation.js # Валидация файлов
│ │ ├── languageDetection.js # Определение языка
│ │ └── pdfGenerator.js # Генерация PDF
│ ├── App.jsx # Главный компонент
│ ├── main.jsx # Точка входа
│ └── index.css # Глобальные стили
│
├── server/ # Backend (Express)
│ ├── config/
│ │ └── aiConfig.js # Конфигурация AI провайдеров
│ ├── services/
│ │ └── aiService.js # AI сервис (мульти-провайдер)
│ ├── routes/
│ │ └── ai.js # API эндпоинты
│ └── index.js # Express сервер
│
├── public/ # Статические файлы
├── .env.example # Пример переменных окружения
├── package.json # Зависимости
├── vite.config.js # Конфигурация Vite
└── railway.json # Railway настройки
npm run dev # Запуск frontend + backend
npm run build # Сборка для production
npm run preview # Предпросмотр production сборки
npm run lint # Проверка кода
npm start # Production запуск| Endpoint | Method | Описание |
|---|---|---|
/api/ai/analyze |
POST | Анализ статьи (metadata + section + review) |
/api/ai/analyze-batch |
POST | Пакетный анализ (до 5 статей за запрос) |
/api/ai/metadata |
POST | Извлечение метаданных |
/api/ai/section |
POST | Определение раздела |
/api/ai/spelling |
POST | Проверка орфографии |
/api/ai/review |
POST | Генерация рецензии |
| Endpoint | Method | Описание |
|---|---|---|
/api/ai/health |
GET | Health check (для Kubernetes/Railway) |
/api/ai/metrics |
GET | Метрики использования |
/api/ai/status |
GET | Статус AI провайдера |
/api/ai/test |
GET | Тест подключения к AI |
| Endpoint | Method | Описание |
|---|---|---|
/api/ai/cache/stats |
GET | Статистика кэша |
/api/ai/cache |
DELETE | Очистка кэша |
| Endpoint | Method | Описание |
|---|---|---|
/api/ai/analytics/summary |
GET | Полная сводка аналитики |
/api/ai/analytics/confidence |
GET | Распределение confidence scores |
/api/ai/analytics/version |
GET | Версия промптов (A/B тестирование) |
/api/ai/analytics/logs |
GET | Логи запросов (debug mode) |
/api/ai/analytics/reset |
POST | Сброс счётчиков |
{
"promptVersion": "v2.1",
"totalClassifications": 150,
"avgConfidence": 0.78,
"confidenceDistribution": {
"high": "45%",
"medium": "30%",
"low": "15%",
"veryLow": "5%",
"needsReview": "5%"
},
"bySection": {
"ТЕХНИЧЕСКИЕ НАУКИ": { "count": 60, "avgConfidence": 0.82 },
"ПЕДАГОГИЧЕСКИЕ НАУКИ": { "count": 50, "avgConfidence": 0.75 }
}
}{
"status": "healthy",
"primaryProvider": "OpenRouter",
"fallbackProvider": "Groq",
"openrouter": { "configured": true, "model": "deepseek-r1t2-chimera" },
"groq": { "configured": true, "model": "llama-3.3-70b-versatile" },
"gemini": { "configured": true, "model": "gemini-2.0-flash-lite" },
"cache": { "size": 15, "maxSize": 1000 },
"timestamp": "2024-01-15T10:30:00.000Z"
}Проект развёрнут и доступен по адресу: https://airesume.zhezu.kz
Это субдомен официального сайта Жезказганского университета имени О.А. Байконурова, используемый для AI-автоматизации сборки научного журнала «Вестник ЖезУ».
Быстрый деплой:
- Установите Railway CLI:
npm i -g @railway/cli- Войдите и деплой:
railway login
railway init
railway upДобавьте переменные окружения в Railway Dashboard:
OPENROUTER_API_KEY- OpenRouter API ключ (primary)GROQ_API_KEY- Groq API ключ (fallback)GEMINI_API_KEY- Google Gemini API ключ (backup)
Альтернативный способ - через GitHub:
- Откройте railway.app/new
- Выберите "Deploy from GitHub repo"
- Выберите репозиторий AI-Redactor
- Добавьте переменные в Settings → Variables
Подробнее см. RAILWAY_DEPLOY.md
См. DEPLOYMENT.md для инструкций по деплою на Vercel
- ❌ Никогда не коммитьте файл
.envв git (.envв.gitignore) - ✅ API ключи хранятся только на сервере (не на клиенте)
- 🔒 Все AI запросы проходят через backend proxy
- 🆓 Все три провайдера предоставляют бесплатные тарифы
| Метрика | До (v1) | После (v3.1) | Улучшение |
|---|---|---|---|
| Запросов на статью | 4 | 0.25 | 16x |
| Время на 30 статей | ~4 мин | ~40 сек | 6x |
| Стабильность | Частые 429 | Авто-переключение | надёжнее |
| Анализ контента | 50% | 100% | полный |
Оптимизации:
- Пакетная обработка: 4 статьи за 1 API запрос
- Кэширование: 30 минут TTL
- Combined prompts: metadata + section + review в одном запросе
- Мультиязычная поддержка (русский, казахский, английский)
- 100% анализ — полный текст статьи без обрезки
- Авто-fallback — переключение между провайдерами при ошибках
- Максимальный размер файла: 50 МБ
- Поддерживаемые форматы статей: .docx
- Поддерживаемые форматы страниц: .docx, .pdf
- PDF генерация пока является заглушкой (требуется интеграция с реальной библиотекой)
- Полноценная генерация PDF с библиотекой pdf-lib
- Поддержка большего количества форматов (.doc, .odt)
- Экспорт рецензий в PDF
- Многопользовательский режим
- База данных для хранения статей
- API для интеграций
- Поддержка изображений и формул в статьях
Мы приветствуем вклад в развитие проекта!
- Fork репозитория
- Создайте ветку для вашей фичи (
git checkout -b feature/AmazingFeature) - Закоммитьте изменения (
git commit -m 'Add some AmazingFeature') - Запушьте в ветку (
git push origin feature/AmazingFeature) - Откройте Pull Request
Этот проект распространяется под лицензией MIT.
Если у вас возникли вопросы или проблемы:
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
- OpenRouter за доступ к DeepSeek и другим моделям
- Groq за быстрый Llama 3.3 70B
- Google AI за Gemini с мультиязычной поддержкой
- Railway за простой и быстрый деплой
- Tailwind CSS за отличный CSS фреймворк
- Lucide за красивые иконки
- Vite за быструю сборку
Развёрнуто на airesume.zhezu.kz — Жезказганский университет имени О.А. Байконурова
Сделано с ❤️ для научного сообщества