A Telegram bot that integrates with OpenAI's official ChatGPT, DALL·E and Whisper APIs to provide answers. Ready to use with minimal configuration required.
- Поддержка разметки в ответах
- Сброс разговора с помощью команды
/reset
. - Индикатор набора текста при генерации ответа
- Доступ можно ограничить, указав список разрешенных пользователей
- Поддержка Docker и прокси
- (NEW!) Создание изображений с помощью DALL-E через команду
/image
- (NEW!) Расшифровка аудио- и видеосообщений с помощью Whisper (может потребоваться ffmpeg)
- (NEW!) Автоматическое подведение итогов разговора во избежание чрезмерного использования токенов
- (NEW!) Отслеживать использование токенов по каждому пользователю - @AlexHTW
- (NEW!) Получите статистику использования персонального токена и стоимость в день/месяц с помощью команды
/stats
- @AlexHTW - (NEW!) Бюджеты пользователей и бюджеты гостей - @AlexHTW
- (NEW!) Поддержка потока
- (NEW!) Поддержка GPT-4
- Если у вас есть доступ к API GPT-4, просто измените параметр
OPENAI_MODEL
наgpt-4
- Если у вас есть доступ к API GPT-4, просто измените параметр
- (NEW!) Локализация языка бота
- Доступные языки 🇬🇧 🇩🇪 🇷🇺 🇹🇷 🇮🇹 🇫🇮 🇪🇸 🇮🇩 🇳🇱 🇨🇳 🇹🇼 🇻🇳 🇮🇷
- (NEW!) Улучшена поддержка встроенных запросов для групповых и приватных чатов - @bugfloyd
- Чтобы использовать эту функцию, включите встроенные запросы для вашего бота в BotFather с помощью команды
/setinline
command
- Чтобы использовать эту функцию, включите встроенные запросы для вашего бота в BotFather с помощью команды
Если вы хотите помочь, ознакомьтесь с issues раздел и внести свой вклад!
Если вы хотите помочь с переводами, загляните в раздел Translations Manual
PR всегда приветствуются!
- Python 3.9+
- Telegram bot и его токен (см. руководство)
- Учетная запись OpenAI (см. раздел конфигурации)
Скопируйте accounts.json.example
и переименуйте его в accounts.json
.
Настройте конфигурацию, скопировав файл .env.example
и переименовав его в .env
а затем отредактируйте необходимые параметры по желанию:
Параметр | Описание |
---|---|
OPENAI_API_KEY |
Ваш API-ключ OpenAI, который можно получить здесь |
TELEGRAM_BOT_TOKEN |
Токен вашего Telegram-бота, полученный с помощью BotFather (см. руководство) |
ADMIN_USER_IDS |
Идентификаторы пользователей Telegram администраторов. У этих пользователей есть доступ к особым командам администратора, информации и безоговорочных ограничений бюджета. ID администратора не нужно добавлять в ALLOWED_TELEGRAM_USER_IDS . Обратите внимание: по умолчанию отсутствуют админы ('-'). |
ALLOWED_TELEGRAM_USER_IDS |
Список идентификаторов пользователей Telegram через запятую, которые могут взаимодействовать с ботом (используйте getidsbot, чтобы найти идентификатор вашего пользователя). Внимание: по умолчанию для всех разрешено (* ). |
Следующие параметры являются необязательными и могут быть заданы в файле .env
:
Параметр | Описание | Значение по умолчанию |
---|---|---|
BUDGET_PERIOD |
Определяет временной интервал, к которому применяются все бюджеты. Доступные периоды: daily (сбрасывает бюджет каждый день), monthly (сбрасывает бюджеты первого числа каждого месяца), all-time (никогда не сбрасывает бюджет). Дополнительную информацию см. в Руководстве по бюджету. |
monthly |
USER_BUDGETS |
Список $-сумм для каждого пользователя из списка ALLOWED_TELEGRAM_USER_IDS , разделенный запятыми, для установки пользовательского лимита использования расходов OpenAI API для каждого. Для * - списков пользователей первое значение USER_BUDGETS присваивается каждому пользователю. Примечание: по умолчанию, нет лимитов для любого пользователя (* ). Дополнительную информацию см. в Руководстве по бюджету. |
* |
GUEST_BUDGET |
$-amount в качестве лимита использования для всех гостевых пользователей. Гостевые пользователи - это пользователи в групповых чатах, которых нет в списке ALLOWED_TELEGRAM_USER_IDS . Значение игнорируется, если в бюджетах пользователей не установлены лимиты использования (USER_BUDGETS ="*"). Дополнительную информацию см. в Руководстве по бюджету. |
100.0 |
TOKEN_PRICE |
$-цена за 1000 жетонов, используемая для расчета информации о стоимости в статистике использования (https://openai.com/pricing) | 0.002 |
IMAGE_PRICES |
Список, разделенный запятыми, состоящий из 3 элементов цен для различных размеров изображений: 256x256 , 512x512 и 1024x1024 . |
0.016,0.018,0.02 |
TRANSCRIPTION_PRICE |
USD-цена за одну минуту расшифровки аудиозаписи | 0.006 |
Просмотрите Руководство по бюджету для возможных конфигураций бюджета.
Параметр | Описание | Значение по умолчанию |
---|---|---|
ENABLE_QUOTING |
Включать ли цитирование сообщений в личных чатах | true |
ENABLE_IMAGE_GENERATION |
Включать ли генерацию изображений с помощью команды /image . |
true |
ENABLE_TRANSCRIPTION |
Разрешить ли расшифровку аудио- и видеосообщений | true |
PROXY |
Прокси, который будет использоваться для бота OpenAI и Telegram (например, http://localhost:8080 ) |
- |
OPENAI_MODEL |
Модель OpenAI, которую следует использовать для генерации ответов | gpt-3.5-turbo |
ASSISTANT_PROMPT |
Системное сообщение, которое задает тон и управляет поведением помощника | You are a helpful assistant. |
SHOW_USAGE |
Показывать ли информацию об использовании токена OpenAI после каждого ответа | false |
STREAM |
Передавать ли ответы в потоковом режиме. Примечание: несовместимо, если включено, с N_CHOICES больше 1 |
true |
MAX_TOKENS |
Верхняя граница того, сколько токенов вернет API ChatGPT | 1200 for GPT-3, 2400 for GPT-4 |
MAX_HISTORY_SIZE |
Максимальное количество сообщений для хранения в памяти, после чего разговор будет обобщен, чтобы избежать чрезмерного использования токенов | 15 |
MAX_CONVERSATION_AGE_MINUTES |
Максимальное количество минут, которое разговор должен прожить с момента последнего сообщения, после чего разговор будет сброшен | 180 |
VOICE_REPLY_WITH_TRANSCRIPT_ONLY |
Отвечать ли на голосовые сообщения только стенограммой или отвечать на стенограмму в формате ChatGPT | false |
VOICE_REPLY_PROMPTS |
Список фраз, разделенных точкой с запятой ("Hi bot;Hello chat"). Если стенограмма начинается с любой из них - она будет рассматриваться как подсказка даже если VOICE_REPLY_WITH_TRANSCRIPT_ONLY установлено на true |
- |
N_CHOICES |
Количество ответов для каждого входного сообщения. Примечание: установка значения больше 1 не будет работать правильно, если включен STREAM . |
1 |
TEMPERATURE |
Число от 0 до 2. Более высокие значения сделают вывод более случайным | 1.0 |
PRESENCE_PENALTY |
Число между -2,0 и 2,0. Положительные значения наказывают новые лексемы в зависимости от того, появляются ли они в тексте до сих пор. | 0.0 |
FREQUENCY_PENALTY |
Число между -2,0 и 2,0. Положительные значения штрафуют новые лексемы на основе их существующей на данный момент частоты в тексте | 0.0 |
IMAGE_SIZE |
Размер генерируемого DALL-E изображения. Допустимые значения: 256x256 , 512x512 или 1024x1024 . |
512x512 |
GROUP_TRIGGER_KEYWORD |
Если установлено, бот в групповых чатах будет отвечать только на сообщения, начинающиеся с этого ключевого слова | - |
IGNORE_GROUP_TRANSCRIPTIONS |
Если установлено значение true, бот не будет обрабатывать транскрипции в групповых чатах. | true |
BOT_LANGUAGE |
Язык общих сообщений бота. В настоящее время доступны: en , de , ru , tr , it , fi , es , id , nl , zh-cn , zh-tw , vi , fa . Contribute with additional translations |
ru |
Более подробную информацию можно найти в официальном справочнике API.
Клонируйте репозиторий и перейдите в каталог проекта:
git clone https://github.com/fisuri/chatgpt-telegram-bot.git -b main
cd chatgpt-telegram-bot
- Создайте виртуальное окружение:
python -m venv venv
- Активируйте виртуальное окружение:
# Для Linux или macOS:
source venv/bin/activate
# Для Windows:
venv\Scripts\activate
- Установите зависимости, используя файл
requirements.txt
:
pip install -r requirements.txt
- Используйте следующую команду для запуска бота:
python bot/main.py
docker compose up
Вы также можете использовать Docker-образ из Docker Hub:
docker pull n3d1117/chatgpt-telegram-bot:latest
или из GitHub Container Registry:
docker pull ghcr.io/n3d1117/chatgpt-telegram-bot:latest
Это личный проект и не связан с OpenAI.
Этот проект выпущен в соответствии с условиями лицензии GPL 2.0. Более подробную информацию можно найти в файле LICENSE, включенном в репозиторий.