# Настройка OpenAI API ## Проблема Получена ошибка `401 Unauthorized` при обращении к OpenAI API. Это означает, что API ключ недействителен или истек. ## Решение ### 1. Получите новый API ключ OpenAI 1. Перейдите на [OpenAI Platform](https://platform.openai.com/) 2. Войдите в свой аккаунт или создайте новый 3. Перейдите в раздел "API Keys" 4. Создайте новый API ключ 5. Скопируйте ключ (он начинается с `sk-`) ### 2. Настройте API ключ #### Вариант A: Переменная окружения (рекомендуется) ```bash export OPENAI_API_KEY=sk-your-actual-api-key-here ``` #### Вариант B: Прямо в application.properties Откройте файл `src/main/resources/application.properties` и замените: ```properties openai.api.key=your-openai-api-key-here ``` на: ```properties openai.api.key=sk-your-actual-api-key-here ``` ### 3. Проверьте настройки Убедитесь, что в `application.properties` правильно настроены: ```properties # OpenAI Configuration openai.api.key=${OPENAI_API_KEY:your-openai-api-key-here} openai.api.url=https://api.openai.com/v1/chat/completions openai.model.name=gpt-4o-mini openai.timeoutMs=90000 ``` ### 4. Тестирование После настройки API ключа: 1. Перезапустите приложение 2. Откройте `GET /api/openai/test` для проверки подключения 3. Проверьте логи на наличие ошибок ### 5. Возможные проблемы - **401 Unauthorized**: Неверный или истекший API ключ - **429 Rate Limit**: Превышен лимит запросов - **500 Server Error**: Временная проблема с сервером OpenAI ### 6. Безопасность ⚠️ **Важно**: Никогда не коммитьте реальные API ключи в репозиторий! - Используйте переменные окружения - Добавьте `application.properties` в `.gitignore` если содержит секреты - Используйте отдельные файлы конфигурации для продакшена ## Пример использования После настройки API ключа сервис будет работать автоматически: ```java @Autowired private OpenAIAnalyticsService openAIAnalyticsService; // Анализ текста MarketItem.Analytics analytics = openAIAnalyticsService.analyzeText("Ваш текст здесь"); // Генерация контента String result = openAIAnalyticsService.generateWithInstruction( "Данные для анализа", "Напиши краткий отчет" ); ```