175 lines
4.5 KiB
Markdown
175 lines
4.5 KiB
Markdown
# 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` при разработке.
|