103 lines
3.9 KiB
Markdown
103 lines
3.9 KiB
Markdown
# AI Provider Switching
|
||
|
||
## Обзор
|
||
|
||
Бот поддерживает переключение между AI-провайдерами:
|
||
- **Qwen Code** — основной провайдер (Alibaba)
|
||
- **GigaChat** — альтернативный провайдер (Sber)
|
||
|
||
## Использование
|
||
|
||
### Через команду `/ai`
|
||
|
||
**Просмотр текущего статуса:**
|
||
```
|
||
/ai
|
||
```
|
||
|
||
Покажет текущего провайдера и доступные опции.
|
||
|
||
**Переключение на Qwen:**
|
||
```
|
||
/ai qwen
|
||
```
|
||
|
||
**Переключение на GigaChat:**
|
||
```
|
||
/ai gigachat
|
||
```
|
||
|
||
### Через меню
|
||
|
||
1. Нажмите `/settings` или кнопку "⚙️ Настройки бота"
|
||
2. Выберите "🤖 AI-провайдер"
|
||
3. Доступные опции:
|
||
- "🔄 Переключить AI-провайдер" — переключает на альтернативный провайдер
|
||
- "ℹ️ Информация о провайдерах" — подробная информация о каждом провайдере
|
||
|
||
## Архитектура
|
||
|
||
### Новые файлы
|
||
|
||
- `bot/ai_provider_manager.py` — менеджер управления провайдерами
|
||
- `bot/models/user_state.py` — добавлено поле `current_ai_provider`
|
||
|
||
### Изменённые файлы
|
||
|
||
- `bot.py` — модифицирован `handle_ai_task()` для использования текущего провайдера
|
||
- `bot/handlers/commands.py` — добавлена команда `/ai`
|
||
- `bot/handlers/callbacks.py` — добавлены обработчики меню AI-провайдера
|
||
- `bot/keyboards/menus.py` — добавлено меню "🤖 AI-провайдер"
|
||
|
||
## Как это работает
|
||
|
||
1. **Хранение состояния**: Каждый пользователь имеет своё предпочтение провайдера в `UserState.current_ai_provider`
|
||
|
||
2. **Обработка запросов**: При получении AI-запроса `handle_ai_task()` проверяет текущего провайдера и использует соответствующий API:
|
||
- **Qwen**: Потоковый вывод с `on_chunk` callback
|
||
- **GigaChat**: Ответ целиком
|
||
|
||
3. **Переключение**: При переключении провайдера обновляется состояние пользователя, новый запрос сразу идёт через выбранного провайдера
|
||
|
||
## Настройка GigaChat
|
||
|
||
Для использования GigaChat добавьте в `.env`:
|
||
|
||
```env
|
||
# GigaChat API (Сбер)
|
||
GIGACHAT_CLIENT_ID=ваш-client-id-uuid
|
||
GIGACHAT_CLIENT_SECRET=ваш-client-secret
|
||
GIGACHAT_SCOPE=GIGACHAT_API_PERS
|
||
GIGACHAT_AUTH_URL=https://ngw.devices.sberbank.ru:9443/api/v2/oauth
|
||
GIGACHAT_MODEL=GigaChat-Pro
|
||
```
|
||
|
||
## Отображение в ответе
|
||
|
||
В конце каждого AI-ответа указывается используемый провайдер:
|
||
|
||
```
|
||
📊 Контекст: 0.5%
|
||
🤖 AI: Qwen Code
|
||
```
|
||
|
||
или
|
||
|
||
```
|
||
📊 Контекст: 0.5%
|
||
🤖 AI: GigaChat
|
||
```
|
||
|
||
## Приоритеты провайдеров
|
||
|
||
- **По умолчанию**: Qwen Code
|
||
- **Если GigaChat не настроен**: Переключение недоступно (показывается ошибка)
|
||
- **Инструменты**: Доступны только с Qwen (GigaChat используется только для чата)
|
||
|
||
## Будущие улучшения
|
||
|
||
- [ ] Умное переключение (автоматический выбор провайдера по типу задачи)
|
||
- [ ] Поддержка инструментов для GigaChat
|
||
- [ ] Статистика использования провайдеров
|
||
- [ ] Настройка провайдера по умолчанию
|