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

175 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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<string> GenerateSummary(List<CommitInfo> 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<string> GenerateSummary(List<CommitInfo> commits)
{
return await _aiService.GenerateSummaryFromCommitsAsync(commits);
}
}
```
### Способ 3: Обратная совместимость (для старого кода)
```csharp
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
```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` при разработке.