Автоматическая категоризация вопросов и ответов с использованием YandexGPT API. Полноценное Node.js приложение для обработки больших объемов Q&A данных с генерацией интерактивных отчетов.
- 📖 Загрузка из нескольких файлов - поддержка форматов с разделителями
|и[TAB] - 🤖 AI категоризация - автоматическое определение категорий вопросов с помощью YandexGPT
- 🏷️ Генерация тегов - создание 3-5 релевантных тегов для каждого вопроса
- ⚡ Батчевая обработка - оптимизация API запросов для обработки больших объемов
- 💾 Множество форматов вывода - JSON, CSV (с корректной кириллицей), интерактивный HTML
- 📊 Подробная статистика - распределение по категориям, прогресс-бары, логирование
- 🎨 Современный UI - красивая HTML страница с поиском, фильтрами и адаптивным дизайном
- Node.js 12.0 или выше
- API ключ Yandex Cloud
- Folder ID из Yandex Cloud
# Клонируйте репозиторий
git clone <repository-url>
cd knoovo
# Никаких дополнительных зависимостей не требуется!
# Используются только встроенные модули Node.js-
Получите API ключ Yandex Cloud:
- Зайдите в Yandex Cloud Console
- Создайте или выберите существующий сервисный аккаунт
- Перейдите в раздел "API ключи"
- Нажмите "Создать API-ключ"
- Скопируйте полученный ключ
-
Получите Folder ID:
- В консоли Yandex Cloud откройте нужный каталог
- Folder ID отображается в URL или в информации о каталоге
- Формат:
b1g************(обычно начинается сb1g)
-
Настройте приложение:
- Откройте файл
index.js - Найдите секцию
CONFIGв начале файла - Замените
YOUR_API_KEY_HEREна ваш API ключ - Замените
YOUR_FOLDER_ID_HEREна ваш Folder ID - При необходимости настройте пути к входным файлам
- Откройте файл
-
Подготовьте файлы с вопросами:
- Создайте текстовые файлы в одном из поддерживаемых форматов:
Вопрос|Ответ(разделитель - вертикальная черта)Вопрос[TAB]Ответ(разделитель - табуляция)
- Укажите пути к файлам в
CONFIG.INPUT_FILES
- Создайте текстовые файлы в одном из поддерживаемых форматов:
node index.jsКакая самая высокая гора в мире?|Эверест, её высота составляет 8848 метров над уровнем моря
Столица Франции?|Париж является столицей Франции
Кто изобрел первый компьютер? Чарльз Бэббидж считается изобретателем первого механического компьютера
Какой химический элемент имеет символ Au? Золото имеет химический символ Au
Структурированные данные с метаинформацией:
{
"metadata": {
"totalQuestions": 15,
"processedAt": "2024-01-15T10:30:00.000Z",
"categories": 8,
"processingTimeSeconds": 45
},
"categoriesStats": {
"География": 3,
"История": 2,
"Наука": 5
},
"questions": [
{
"question": "Какая самая высокая гора в мире?",
"answer": "Эверест, её высота составляет 8848 метров",
"category": "География",
"tags": ["горы", "Эверест", "рекорды", "география"]
}
]
}Таблица для Excel с корректной кириллицей (BOM):
Вопрос,Ответ,Категория,Теги
"Какая самая высокая гора в мире?","Эверест...","География","горы, Эверест, рекорды"Интерактивная веб-страница с:
- 🎨 Современным дизайном с градиентами
- 🔍 Поиском по вопросам, ответам и тегам
- 🏷️ Фильтрацией по категориям
- 📊 Статистическими карточками
- 📱 Адаптивной версткой для мобильных устройств
- ⚡ Анимациями и плавными переходами
Все настройки находятся в объекте CONFIG в начале файла index.js:
const CONFIG = {
// API ключ Yandex Cloud
YANDEX_API_KEY: 'YOUR_API_KEY_HERE',
// Folder ID из Yandex Cloud
YANDEX_FOLDER_ID: 'YOUR_FOLDER_ID_HERE',
// Входные файлы
INPUT_FILES: [
'./questions1.txt',
'./questions2.txt',
'./questions3.txt'
],
// Выходные файлы
OUTPUT_JSON: './results.json',
OUTPUT_CSV: './results.csv',
OUTPUT_HTML: './results.html',
// Размер батча (вопросов в одном запросе)
BATCH_SIZE: 5,
// Задержка между запросами (миллисекунды)
DELAY_BETWEEN_REQUESTS: 2000,
// Максимальное количество токенов в ответе
MAX_TOKENS: 1000,
// Предопределенные категории
CATEGORIES: [
'География',
'История',
'Наука',
// ...
]
};- Язык: Pure Node.js (без npm пакетов)
- Модули: Только встроенные (
fs,readline,https) - API: YandexGPT API v1
- Авторизация: API-ключ или IAM-токен
┌─────────────────┐
│ Входные файлы │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Загрузка Q&A │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Батчевая обраб. │◄─────── YandexGPT API
└────────┬────────┘
│
▼
┌─────────────────┐
│ Категоризация + │
│ Генерация тегов│
└────────┬────────┘
│
▼
┌─────────────────┐
│ Сохранение рез. │
│ JSON/CSV/HTML │
└─────────────────┘
- ✅ Проверка наличия файлов
- ✅ Валидация API ключа и Folder ID
- ✅ Обработка сетевых ошибок
- ✅ Парсинг некорректных ответов AI
- ✅ Автоматическое присвоение категории при ошибках
- ✅ Подробное логирование с эмодзи
- Батчевая обработка: Группировка нескольких вопросов в один запрос
- Rate limiting: Задержки между запросами для избежания блокировок
- Потоковое чтение: Эффективная работа с большими файлами
- Прогресс-бары: Визуализация прогресса в реальном времени
# После настройки CONFIG просто запустите:
node index.jsДля 100,000+ вопросов рекомендуется:
const CONFIG = {
BATCH_SIZE: 10, // Увеличить размер батча
DELAY_BETWEEN_REQUESTS: 1000, // Уменьшить задержку (осторожно!)
MAX_TOKENS: 2000 // Увеличить лимит токенов
};const CONFIG = {
YANDEX_API_KEY: 't1.9euelZqXjp6czYyRy5KLl8uTipKSnu3rnpWa...',
// IAM-токены начинаются с "t1."
};const CONFIG = {
CATEGORIES: [
'Ваша категория 1',
'Ваша категория 2',
// ...
]
};Найдите функцию categorizeWithYandexGPT() и измените переменную prompt.
Найдите функцию saveHTML() и измените встроенный HTML/CSS.
Решение: Откройте index.js и замените YOUR_API_KEY_HERE на ваш реальный API ключ.
Решение: Проверьте пути к файлам в CONFIG.INPUT_FILES. Используйте абсолютные пути или относительные от текущей директории.
Решение:
- Проверьте правильность API ключа
- Убедитесь, что ключ активен в Yandex Cloud Console
- Проверьте, что у сервисного аккаунта есть роль
ai.languageModels.user
Решение: Увеличьте DELAY_BETWEEN_REQUESTS в CONFIG (например, до 3000-5000 мс).
Решение: CSV файл использует BOM (Byte Order Mark) для корректного отображения кириллицы в Excel. Если проблемы остались, откройте CSV в LibreOffice Calc с кодировкой UTF-8.
Приложение использует эмодзи для удобного отслеживания процесса:
- ℹ️ Информационные сообщения
- ✅ Успешные операции
- ❌ Ошибки
- 🔄 Процессы в работе
- 🤖 AI операции
- 💾 Операции с файлами
- 📊 Прогресс-бары
Приветствуются pull requests и issues! Пожалуйста:
- Fork репозитория
- Создайте feature branch (
git checkout -b feature/amazing-feature) - Commit изменения (
git commit -m 'Add amazing feature') - Push в branch (
git push origin feature/amazing-feature) - Откройте Pull Request
MIT License - см. файл LICENSE
- Yandex Cloud за предоставление YandexGPT API
- Сообщество Node.js за отличную документацию
- Всем контрибьюторам проекта
При возникновении вопросов создайте Issue в репозитории.
Сделано с ❤️ для автоматизации работы с Q&A данными