# AI Service Switcher - Документация ## Обзор Теперь приложение поддерживает два AI провайдера: - **OpenAI** (GPT-3.5-turbo) - по умолчанию - **Gemini** (Google Generative AI) - новый провайдер Вы можете легко переключаться между ними через конфигурацию. ## Конфигурация В файле `appsettings.json` добавлены новые секции: ```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 (рекомендуется) ```csharp public class MyController { private readonly IAiServiceFactory _factory; public MyController(IAiServiceFactory factory) { _factory = factory; } public async Task GenerateSummary(List commits) { var aiService = _factory.CreateAiService(); return await aiService.GenerateSummaryFromCommitsAsync(commits); } } ``` ### Способ 2: Прямая инъекция (работает с текущим провайдером) ```csharp public class MyController { private readonly IAiService _aiService; public MyController(IAiService aiService) { _aiService = aiService; } public async Task GenerateSummary(List commits) { return await _aiService.GenerateSummaryFromCommitsAsync(commits); } } ``` ### Способ 3: Обратная совместимость (для старого кода) ```csharp public class MyController { private readonly IOpenAiService _openAiService; public MyController(IOpenAiService openAiService) { _openAiService = openAiService; } public async Task GenerateSummary(List 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 ```json { "AiProvider": { "Default": "openai" } } ``` ### Использовать Gemini ```json { "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`: ```json { "AiProvider": { "Default": "gemini" } } ``` Это переопределит настройки из `appsettings.json` при разработке.