175 lines
6.8 KiB
Markdown
175 lines
6.8 KiB
Markdown
# 🎯 OpenAI + Gemini Switcher - Итоговая сводка
|
||
|
||
## ✅ Что было сделано
|
||
|
||
Успешно интегрирована поддержка Google Gemini с возможностью переключения между OpenAI и Gemini.
|
||
|
||
## 📁 Новые/обновленные файлы
|
||
|
||
### ✨ Новые файлы:
|
||
1. **[Services/IAiService.cs](Services/IAiService.cs)** - Общий интерфейс для всех AI провайдеров
|
||
2. **[Services/GeminiService.cs](Services/GeminiService.cs)** - Реализация Google Gemini API
|
||
3. **[Services/AiServiceFactory.cs](Services/AiServiceFactory.cs)** - Фабрика для динамического выбора провайдера
|
||
4. **[AI_SERVICE_SWITCHER.md](AI_SERVICE_SWITCHER.md)** - Полная документация
|
||
5. **[GEMINI_SETUP.md](GEMINI_SETUP.md)** - Быстрый старт и справочник
|
||
|
||
### 🔄 Обновленные файлы:
|
||
1. **[Services/IOpenAiService.cs](Services/IOpenAiService.cs)** - Теперь наследуется от `IAiService` (обратная совместимость)
|
||
2. **[Services/OpenAiService.cs](Services/OpenAiService.cs)** - Реализует оба интерфейса (`IAiService` и `IOpenAiService`)
|
||
3. **[Program.cs](Program.cs)** - Регистрация новых сервисов в DI контейнере
|
||
4. **[appsettings.json](appsettings.json)** - Добавлены конфигурации для Gemini и выбор провайдера
|
||
5. **[appsettings.Development.json](appsettings.Development.json)** - Development конфигурация
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
### Шаг 1: Получить Gemini API ключ (бесплатно)
|
||
```
|
||
1. Перейти: https://makersuite.google.com/app/apikey
|
||
2. Создать API ключ
|
||
3. Скопировать ключ
|
||
```
|
||
|
||
### Шаг 2: Обновить конфигурацию
|
||
Отредактировать `appsettings.json`:
|
||
```json
|
||
{
|
||
"AiProvider": {
|
||
"Default": "gemini" // ← Измените на "gemini"
|
||
},
|
||
"Gemini": {
|
||
"ApiKey": "YOUR_GEMINI_API_KEY_HERE", // ← Вставьте ключ
|
||
"Model": "gemini-1.5-flash"
|
||
}
|
||
}
|
||
```
|
||
|
||
### Шаг 3: Готово!
|
||
Приложение автоматически будет использовать Gemini вместо OpenAI.
|
||
|
||
## 💡 Примеры использования
|
||
|
||
### Пример 1: Простое использование (рекомендуется)
|
||
```csharp
|
||
public class SummaryController
|
||
{
|
||
private readonly IAiService _aiService;
|
||
|
||
public SummaryController(IAiService aiService)
|
||
{
|
||
_aiService = aiService;
|
||
}
|
||
|
||
public async Task<string> GetSummary(List<CommitInfo> commits)
|
||
{
|
||
return await _aiService.GenerateSummaryFromCommitsAsync(commits);
|
||
}
|
||
}
|
||
```
|
||
|
||
### Пример 2: С использованием Factory (для динамического переключения)
|
||
```csharp
|
||
public class SummaryController
|
||
{
|
||
private readonly IAiServiceFactory _factory;
|
||
|
||
public SummaryController(IAiServiceFactory factory)
|
||
{
|
||
_factory = factory;
|
||
}
|
||
|
||
public async Task<string> GetSummary(List<CommitInfo> commits)
|
||
{
|
||
var aiService = _factory.CreateAiService();
|
||
return await aiService.GenerateSummaryFromCommitsAsync(commits);
|
||
}
|
||
}
|
||
```
|
||
|
||
### Пример 3: Обратная совместимость (старый код)
|
||
```csharp
|
||
// Этот код продолжает работать без изменений!
|
||
public class SummaryController
|
||
{
|
||
private readonly IOpenAiService _openAiService;
|
||
|
||
public SummaryController(IOpenAiService openAiService)
|
||
{
|
||
_openAiService = openAiService;
|
||
}
|
||
|
||
public async Task<string> GetSummary(List<CommitInfo> commits)
|
||
{
|
||
return await _openAiService.GenerateSummaryFromCommitsAsync(commits);
|
||
}
|
||
}
|
||
```
|
||
|
||
## 🔧 Поддерживаемые конфигурации
|
||
|
||
### Использовать OpenAI (по умолчанию)
|
||
```json
|
||
{
|
||
"AiProvider": { "Default": "openai" }
|
||
}
|
||
```
|
||
|
||
### Использовать Gemini
|
||
```json
|
||
{
|
||
"AiProvider": { "Default": "gemini" }
|
||
}
|
||
```
|
||
|
||
### Использовать Gemini Pro (мощнее)
|
||
```json
|
||
{
|
||
"AiProvider": { "Default": "gemini" },
|
||
"Gemini": { "Model": "gemini-1.5-pro" }
|
||
}
|
||
```
|
||
|
||
## 🏗️ Архитектура
|
||
|
||
```
|
||
┌─────────────────────────────────────────┐
|
||
│ Dependency Injection │
|
||
└─────────────────────────────────────────┘
|
||
↓
|
||
┌─────────────────────────────────────────┐
|
||
│ IAiServiceFactory │
|
||
│ (выбирает провайдера на основе │
|
||
│ конфигурации AiProvider:Default) │
|
||
└─────────────────────────────────────────┘
|
||
↙ ↘
|
||
┌──────────────┐ ┌──────────────┐
|
||
│ OpenAiService│ │GeminiService │
|
||
│ (реализует │ │ (реализует │
|
||
│ IAiService │ │ IAiService) │
|
||
│ + IOpenAi) │ │ │
|
||
└──────────────┘ └──────────────┘
|
||
↓ ↓
|
||
OpenAI API Gemini API
|
||
```
|
||
|
||
## ✨ Особенности
|
||
|
||
- ✅ Полная поддержка OpenAI (существующий код работает)
|
||
- ✅ Новая поддержка Google Gemini
|
||
- ✅ Динамическое переключение через конфигурацию
|
||
- ✅ Factory паттерн для выбора провайдера
|
||
- ✅ Обратная совместимость с `IOpenAiService`
|
||
- ✅ Одинаковый интерфейс для обоих провайдеров
|
||
- ✅ Все сервисы скомпилированы ✓
|
||
|
||
## 📝 Примечания
|
||
|
||
- Оба API ключа должны быть установлены в `appsettings.json`
|
||
- Можно переключаться между провайдерами без перекомпиляции (просто измените конфигурацию)
|
||
- В случае ошибки конфигурации будет выброшено понятное исключение
|
||
|
||
## 🎓 Документация
|
||
|
||
Подробную документацию см. в:
|
||
- [AI_SERVICE_SWITCHER.md](AI_SERVICE_SWITCHER.md) - Полная документация
|
||
- [GEMINI_SETUP.md](GEMINI_SETUP.md) - Быстрый справочник
|