Добавлена поддержка Cloudflare AI Gateway
Изменено: - services/ai_service.py - автоматическое использование Cloudflare Gateway - config/settings.py - настройки CLOUDFLARE_ACCOUNT_ID и CLOUDFLARE_GATEWAY_ID - .env.example - добавлены переменные Cloudflare - README.md - секция о Cloudflare AI Gateway Создано: - docs/CLOUDFLARE_GATEWAY.md - подробная документация Преимущества: 🚀 Кэширование запросов - экономия до 99% на повторных запросах 📊 Аналитика - детальная статистика использования AI 💰 Контроль расходов - мониторинг стоимости 🛡️ Безопасность - защита API ключей и rate limiting Использование: 1. Создать Gateway на dash.cloudflare.com 2. Добавить CLOUDFLARE_ACCOUNT_ID в .env 3. Все запросы автоматически пойдут через Cloudflare Для отключения оставьте CLOUDFLARE_ACCOUNT_ID пустым. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,11 @@ BOT_TOKEN=your_telegram_bot_token_here
|
||||
# OpenAI API Key
|
||||
OPENAI_API_KEY=your_openai_api_key_here
|
||||
|
||||
# Cloudflare AI Gateway (опционально, для кэширования и мониторинга)
|
||||
# Получить Account ID: https://dash.cloudflare.com/ -> AI -> AI Gateway
|
||||
CLOUDFLARE_ACCOUNT_ID=4c714ccd1433cf82279ac6e1278bcb8f
|
||||
CLOUDFLARE_GATEWAY_ID=gpt
|
||||
|
||||
# Database (для локального запуска с БД в Docker)
|
||||
DATABASE_URL=postgresql+asyncpg://botuser:botpassword@localhost:15433/language_bot
|
||||
|
||||
|
||||
21
README.md
21
README.md
@@ -235,6 +235,26 @@ bot_tg_language/
|
||||
- [ ] Статистика и прогресс
|
||||
- [ ] Spaced repetition алгоритм
|
||||
|
||||
## Cloudflare AI Gateway (опционально)
|
||||
|
||||
Бот поддерживает использование [Cloudflare AI Gateway](https://developers.cloudflare.com/ai-gateway/) для:
|
||||
|
||||
- 🚀 **Кэширование запросов** - экономия до 99% на повторных запросах
|
||||
- 📊 **Аналитика** - детальная статистика использования AI
|
||||
- 💰 **Контроль расходов** - мониторинг стоимости запросов
|
||||
- 🛡️ **Безопасность** - защита API ключей и rate limiting
|
||||
|
||||
**Настройка:**
|
||||
|
||||
1. Создайте Gateway на [dash.cloudflare.com](https://dash.cloudflare.com/) → AI → AI Gateway
|
||||
2. Добавьте в `.env`:
|
||||
```env
|
||||
CLOUDFLARE_ACCOUNT_ID=ваш_account_id
|
||||
CLOUDFLARE_GATEWAY_ID=gpt
|
||||
```
|
||||
|
||||
📖 Подробная инструкция: [docs/CLOUDFLARE_GATEWAY.md](docs/CLOUDFLARE_GATEWAY.md)
|
||||
|
||||
## Технологии
|
||||
|
||||
- **Python 3.11+**
|
||||
@@ -242,6 +262,7 @@ bot_tg_language/
|
||||
- **SQLAlchemy 2.x** - ORM для работы с БД
|
||||
- **PostgreSQL** - База данных
|
||||
- **OpenAI API** - AI для перевода и проверки
|
||||
- **Cloudflare AI Gateway** - кэширование и мониторинг AI запросов (опционально)
|
||||
|
||||
## Лицензия
|
||||
|
||||
|
||||
@@ -10,6 +10,10 @@ class Settings(BaseSettings):
|
||||
# OpenAI
|
||||
openai_api_key: str
|
||||
|
||||
# Cloudflare AI Gateway (опционально)
|
||||
cloudflare_account_id: str = ""
|
||||
cloudflare_gateway_id: str = "gpt"
|
||||
|
||||
# Database
|
||||
database_url: str
|
||||
|
||||
|
||||
146
docs/CLOUDFLARE_GATEWAY.md
Normal file
146
docs/CLOUDFLARE_GATEWAY.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# Cloudflare AI Gateway
|
||||
|
||||
## Что это?
|
||||
|
||||
Cloudflare AI Gateway — это прокси-сервис между вашим приложением и AI провайдерами (OpenAI, Anthropic и др.), который предоставляет:
|
||||
|
||||
## Преимущества
|
||||
|
||||
### 1. 🚀 Кэширование запросов
|
||||
- Автоматическое кэширование одинаковых запросов к AI
|
||||
- Экономия на повторных запросах
|
||||
- Мгновенные ответы для закэшированных запросов
|
||||
|
||||
### 2. 📊 Аналитика и мониторинг
|
||||
- Детальная статистика использования API
|
||||
- Отслеживание стоимости запросов
|
||||
- Анализ производительности
|
||||
|
||||
### 3. 💰 Экономия средств
|
||||
- Снижение количества запросов к OpenAI через кэш
|
||||
- Контроль расходов
|
||||
- Rate limiting для предотвращения перерасхода
|
||||
|
||||
### 4. 🛡️ Безопасность
|
||||
- Защита API ключей
|
||||
- Rate limiting
|
||||
- Логирование всех запросов
|
||||
|
||||
### 5. 🔄 Резервные варианты
|
||||
- Поддержка нескольких AI провайдеров
|
||||
- Автоматическое переключение при сбоях
|
||||
|
||||
## Настройка
|
||||
|
||||
### 1. Создание Gateway в Cloudflare
|
||||
|
||||
1. Перейдите на [Cloudflare Dashboard](https://dash.cloudflare.com/)
|
||||
2. Откройте раздел **AI** → **AI Gateway**
|
||||
3. Нажмите **Create Gateway**
|
||||
4. Введите имя для Gateway (например: `gpt`)
|
||||
5. Скопируйте **Account ID** и **Gateway ID**
|
||||
|
||||
### 2. Настройка в проекте
|
||||
|
||||
Добавьте в `.env` файл:
|
||||
|
||||
```env
|
||||
# Cloudflare AI Gateway
|
||||
CLOUDFLARE_ACCOUNT_ID=ваш_account_id
|
||||
CLOUDFLARE_GATEWAY_ID=gpt
|
||||
```
|
||||
|
||||
### 3. Проверка работы
|
||||
|
||||
После настройки все запросы к OpenAI будут проходить через Cloudflare Gateway.
|
||||
|
||||
Проверить можно в дашборде Cloudflare: **AI** → **AI Gateway** → выбрать ваш Gateway
|
||||
|
||||
## Как это работает
|
||||
|
||||
### Без Cloudflare Gateway:
|
||||
```
|
||||
Бот → OpenAI API → Ответ
|
||||
```
|
||||
|
||||
### С Cloudflare Gateway:
|
||||
```
|
||||
Бот → Cloudflare Gateway → OpenAI API → Ответ
|
||||
↓
|
||||
(кэш + аналитика)
|
||||
```
|
||||
|
||||
При повторном запросе:
|
||||
```
|
||||
Бот → Cloudflare Gateway → Ответ из кэша (мгновенно!)
|
||||
```
|
||||
|
||||
## Примеры экономии
|
||||
|
||||
### Без кэширования:
|
||||
- Запрос перевода слова "hello" → $0.002
|
||||
- 10 пользователей запрашивают "hello" → $0.02
|
||||
- 100 пользователей → $0.20
|
||||
|
||||
### С кэшированием:
|
||||
- Первый запрос "hello" → $0.002
|
||||
- Последующие 99 запросов → $0 (из кэша)
|
||||
- **Экономия: 99%**
|
||||
|
||||
## Настройка кэширования
|
||||
|
||||
В дашборде Cloudflare Gateway можно настроить:
|
||||
|
||||
- **TTL кэша** - время жизни закэшированных ответов
|
||||
- **Правила кэширования** - что кэшировать, а что нет
|
||||
- **Invalidation** - очистка кэша
|
||||
|
||||
### Рекомендации для нашего бота:
|
||||
|
||||
**Кэшировать:**
|
||||
- Переводы слов (TTL: 30 дней)
|
||||
- Проверка ответов с одинаковыми параметрами (TTL: 1 день)
|
||||
|
||||
**Не кэшировать:**
|
||||
- Диалоги с пользователями (уникальный контекст)
|
||||
|
||||
## Мониторинг
|
||||
|
||||
В дашборде Cloudflare Gateway доступны метрики:
|
||||
|
||||
- **Requests** - общее количество запросов
|
||||
- **Cache hit rate** - процент попаданий в кэш
|
||||
- **Cost** - стоимость запросов
|
||||
- **Latency** - задержка ответов
|
||||
- **Errors** - ошибки
|
||||
|
||||
## Отключение
|
||||
|
||||
Чтобы отключить Cloudflare Gateway и использовать прямое подключение к OpenAI:
|
||||
|
||||
1. Удалите или закомментируйте в `.env`:
|
||||
```env
|
||||
# CLOUDFLARE_ACCOUNT_ID=...
|
||||
# CLOUDFLARE_GATEWAY_ID=...
|
||||
```
|
||||
|
||||
2. Или оставьте `CLOUDFLARE_ACCOUNT_ID` пустым:
|
||||
```env
|
||||
CLOUDFLARE_ACCOUNT_ID=
|
||||
```
|
||||
|
||||
## Поддержка других AI провайдеров
|
||||
|
||||
Cloudflare AI Gateway также поддерживает:
|
||||
- Anthropic (Claude)
|
||||
- Google AI
|
||||
- Hugging Face
|
||||
- Azure OpenAI
|
||||
|
||||
Для переключения достаточно изменить base URL в коде.
|
||||
|
||||
## Ссылки
|
||||
|
||||
- [Cloudflare AI Gateway Documentation](https://developers.cloudflare.com/ai-gateway/)
|
||||
- [Cloudflare Dashboard](https://dash.cloudflare.com/)
|
||||
- [Pricing Calculator](https://developers.cloudflare.com/ai-gateway/get-started/pricing/)
|
||||
@@ -4,10 +4,25 @@ from typing import Dict, List
|
||||
|
||||
|
||||
class AIService:
|
||||
"""Сервис для работы с OpenAI API"""
|
||||
"""Сервис для работы с OpenAI API через Cloudflare Gateway"""
|
||||
|
||||
def __init__(self):
|
||||
self.client = AsyncOpenAI(api_key=settings.openai_api_key)
|
||||
# Проверяем, настроен ли Cloudflare AI Gateway
|
||||
if settings.cloudflare_account_id:
|
||||
# Используем Cloudflare AI Gateway
|
||||
base_url = (
|
||||
f"https://gateway.ai.cloudflare.com/v1/"
|
||||
f"{settings.cloudflare_account_id}/"
|
||||
f"{settings.cloudflare_gateway_id}/"
|
||||
f"openai"
|
||||
)
|
||||
self.client = AsyncOpenAI(
|
||||
api_key=settings.openai_api_key,
|
||||
base_url=base_url
|
||||
)
|
||||
else:
|
||||
# Прямое подключение к OpenAI
|
||||
self.client = AsyncOpenAI(api_key=settings.openai_api_key)
|
||||
|
||||
async def translate_word(self, word: str, target_lang: str = "ru") -> Dict:
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user