Умный экспорт и AI-маппинг импорта
Умный экспорт: текст → SQL
POST /api/ai/sql-suggest превращает описание на естественном языке в готовый SELECT, используя ту же модель, что и AI-чат/агент:
curl -X POST $URL/api/ai/sql-suggest -H "X-Token: $TOK" -d '{
"prompt": "Все заказы за последний месяц с суммой больше 5000"
}'
{
"sql": "SELECT * FROM orders WHERE created_at >= ... AND amount > 5000",
"explain": "Фильтрует заказы за последние 30 дней с суммой свыше 5000"
}
Как и в AI-чате, эндпоинт не выполняет запрос сам — веб-интерфейс показывает предложенный SQL, оператор может отредактировать и только затем запускает через /api/query; результат сериализуется в CSV прямо в браузере. Модель, которая вместо SELECT «придумает» DELETE, не может ничего удалить сама по себе — человек всегда должен нажать «Выполнить».
AI-маппинг импорта
При импорте файла (/import — см. страницу «Импорт файлов») POST /api/import/ai-suggest смотрит на колонки загруженного файла и 3–5 примеров строк, сравнивает их с колонками целевой таблицы и предлагает сопоставление source_col → target_col, опционально — с трансформацией (UPPER(value), CONCAT(...) и т.п.), которым сразу предзаполняется форма маппинга.
Провайдер — тот же, что настроен для эмбеддингов этой БД (переиспользуются api_key/base_url из конфигурации эмбеддингов — многие OpenAI-совместимые прокси отдают и /v1/embeddings, и /v1/chat/completions на одном ключе). Модель по умолчанию — gpt-4o-mini, переопределяется полем ai_model_hint в настройках эмбеддингов. На данный момент поддерживаются только OpenAI-совместимые chat-эндпоинты; для Yandex/Gemini AI-маппинг колонок пока недоступен.
Отказоустойчивость встроена по умолчанию: если LLM не настроен, недоступен по сети или вернул невалидный ответ — маппинг тихо откатывается на эвристическое сопоставление по именам колонок, которое работало и до появления этой функции. Импорт никогда не блокируется из-за проблем с AI.