telegram-cli-bot/AI_PROVIDERS.md

103 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 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
- [ ] Статистика использования провайдеров
- [ ] Настройка провайдера по умолчанию