# Интеграция OpenAI API

## Обзор

Создан новый сервис `OpenAIAnalyticsService` для замены `OllamaAnalyticsService`. Новый сервис использует OpenAI API для анализа текста и генерации контента.

## Основные изменения

### 1. Новый сервис OpenAIAnalyticsService

- **Файл**: `src/main/java/kz/konturai/parser/service/OpenAIAnalyticsService.java`
- **Функциональность**: Аналогична `OllamaAnalyticsService`, но использует OpenAI API
- **Методы**:
  - `analyzeText(String text)` - анализ текста с извлечением саммари, тегов, тональности и сущностей
  - `analyzeText(String text, String language)` - анализ с указанием языка
  - `generateWithInstruction(String text, String instruction)` - генерация текста по инструкции
  - `generateWithInstruction(String text, String instruction, String language)` - генерация с указанием языка

### 2. Обновленные сервисы

Все сервисы, которые использовали `OllamaAnalyticsService`, теперь используют `OpenAIAnalyticsService`:

- `ReportSynthesisService`
- `ReportGenerationService`
- `KursivParserService`
- `KapitalParserService`
- `LsmParserService`
- `RbcParserService`
- `VedomostiParserService`

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

В `application.properties` уже настроены параметры для OpenAI:

```properties
# OpenAI Configuration
openai.api.key=${OPENAI_API_KEY}
openai.api.url=https://api.openai.com/v1/chat/completions
openai.model.name=gpt-4o-mini
openai.timeoutMs=90000
```

### 4. Тестовый контроллер

Создан `OpenAITestController` для тестирования функциональности:

- `POST /api/openai/analyze` - анализ текста
- `POST /api/openai/generate` - генерация по инструкции
- `GET /api/openai/test` - тест подключения

## Использование

### Анализ текста

```java
@Autowired
private OpenAIAnalyticsService openAIAnalyticsService;

// Анализ текста на русском языке
MarketItem.Analytics analytics = openAIAnalyticsService.analyzeText(text, "ru");

// Получение саммари
String summary = analytics.getSummary();

// Получение тегов
String[] tags = analytics.getTags();

// Получение тональности
String sentiment = analytics.getSentiment();

// Получение сущностей
Map<String, Object> entities = analytics.getEntities();
```

### Генерация текста

```java
// Генерация отчета
String instruction = "Напиши краткий отчет на основе следующих данных:";
String generatedText = openAIAnalyticsService.generateWithInstruction(data, instruction, "ru");
```

## Преимущества OpenAI API

1. **Высокое качество**: GPT-4o-mini обеспечивает более качественный анализ и генерацию текста
2. **Надежность**: Стабильная работа API без необходимости локального сервера
3. **Масштабируемость**: Легко масштабируется под нагрузку
4. **Многоязычность**: Отличная поддержка русского и английского языков
5. **Консистентность**: Более предсказуемые результаты

## Миграция

Все существующие вызовы `OllamaAnalyticsService` автоматически заменены на `OpenAIAnalyticsService`. API остается совместимым, поэтому дополнительных изменений в коде не требуется.

## Тестирование

Для тестирования нового сервиса:

1. Запустите приложение
2. Откройте `GET /api/openai/test` для проверки подключения
3. Используйте `POST /api/openai/analyze` для анализа текста
4. Используйте `POST /api/openai/generate` для генерации контента

## Настройка

### Настройка API ключа

Убедитесь, что в `application.properties` указан корректный API ключ OpenAI:

```properties
openai.api.key=${OPENAI_API_KEY:your-openai-api-key-here}
```

**Рекомендуется использовать переменную окружения:**

```bash
export OPENAI_API_KEY=sk-your-actual-api-key-here
```

### Тестирование API ключа

Используйте скрипт для проверки API ключа:

```bash
./test-openai-api.sh
```

### Решение проблем

**Ошибка 401 Unauthorized:**

- Проверьте правильность API ключа
- Убедитесь, что ключ не истек
- Проверьте, что ключ начинается с `sk-`

**Ошибка 429 Rate Limit:**

- Превышен лимит запросов
- Подождите некоторое время перед повторной попыткой

Модель по умолчанию: `gpt-4o-mini` (можно изменить в настройках).
