Files
PerfReviewSummarizer/AI_SERVICE_SWITCHER.md
ZakirovT 057e1f526b init
2026-01-22 00:45:41 +03:00

4.5 KiB
Raw Permalink Blame History

AI Service Switcher - Документация

Обзор

Теперь приложение поддерживает два AI провайдера:

  • OpenAI (GPT-3.5-turbo) - по умолчанию
  • Gemini (Google Generative AI) - новый провайдер

Вы можете легко переключаться между ними через конфигурацию.

Конфигурация

В файле appsettings.json добавлены новые секции:

{
  "AiProvider": {
    "Default": "openai"
  },
  "OpenAI": {
    "ApiKey": "sk-..."
  },
  "Gemini": {
    "ApiKey": "YOUR_GEMINI_API_KEY",
    "Model": "gemini-1.5-flash"
  }
}

Переключение провайдера

Измените значение AiProvider.Default:

  • "openai" - использовать OpenAI (по умолчанию)
  • "gemini" - использовать Gemini

Архитектура

IAiService (интерфейс)
    ├── OpenAiService (реализация для OpenAI)
    ├── GeminiService (реализация для Gemini)
    └── IOpenAiService : IAiService (для обратной совместимости)

IAiServiceFactory
    └── AiServiceFactory (выбирает провайдера на основе конфигурации)

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

Способ 1: Через Factory (рекомендуется)

public class MyController
{
    private readonly IAiServiceFactory _factory;

    public MyController(IAiServiceFactory factory)
    {
        _factory = factory;
    }

    public async Task<string> GenerateSummary(List<CommitInfo> commits)
    {
        var aiService = _factory.CreateAiService();
        return await aiService.GenerateSummaryFromCommitsAsync(commits);
    }
}

Способ 2: Прямая инъекция (работает с текущим провайдером)

public class MyController
{
    private readonly IAiService _aiService;

    public MyController(IAiService aiService)
    {
        _aiService = aiService;
    }

    public async Task<string> GenerateSummary(List<CommitInfo> commits)
    {
        return await _aiService.GenerateSummaryFromCommitsAsync(commits);
    }
}

Способ 3: Обратная совместимость (для старого кода)

public class MyController
{
    private readonly IOpenAiService _openAiService;

    public MyController(IOpenAiService openAiService)
    {
        _openAiService = openAiService;
    }

    public async Task<string> GenerateSummary(List<CommitInfo> commits)
    {
        return await _openAiService.GenerateSummaryFromCommitsAsync(commits);
    }
}

Получение API ключей

OpenAI

  1. Перейти на https://platform.openai.com/api-keys
  2. Создать новый API ключ
  3. Добавить в appsettings.json: "OpenAI": { "ApiKey": "sk-..." }

Gemini

  1. Перейти на https://makersuite.google.com/app/apikey
  2. Создать новый API ключ
  3. Добавить в appsettings.json: "Gemini": { "ApiKey": "..." }

Примеры конфигурации

Использовать OpenAI

{
  "AiProvider": {
    "Default": "openai"
  }
}

Использовать Gemini

{
  "AiProvider": {
    "Default": "gemini"
  }
}

Обработка ошибок

Если API ключ не найден, будет выброшено исключение:

OpenAI API ключ не найден в конфигурации. Добавьте 'OpenAI:ApiKey' в appsettings.json
Gemini API ключ не найден в конфигурации. Добавьте 'Gemini:ApiKey' в appsettings.json

Если провайдер не поддерживается:

Unknown AI provider: unknown. Supported values: 'openai', 'gemini'

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

Для тестирования обоих провайдеров:

  1. Настроить оба API ключа в appsettings.json
  2. Измените AiProvider.Default на нужный провайдер
  3. Перезагрузите приложение
  4. Отправьте запрос на /api/summary

Интеграция в development

Для локальной разработки можно использовать appsettings.Development.json:

{
  "AiProvider": {
    "Default": "gemini"
  }
}

Это переопределит настройки из appsettings.json при разработке.