TelegramGPT-4PythonБотыTutorial

Интеграция GPT-4 в Telegram-бота за 10 минут

Пошаговое руководство по созданию умного Telegram-бота с использованием GPT-4 через API LLM_КИ. Код, примеры и лучшие практики.

Команда LLM_КИ
5 сентября 2025
8 мин

В этой статье мы создадим Telegram-бота, который использует GPT-4 и другие языковые модели через API LLM_КИ. Вы получите готовый код, который можно сразу использовать в своих проектах.

Что мы создадим

Полнофункциональный Telegram-бот с:

  • Поддержкой множества моделей (GPT-4, Claude, Gemini и др.)
  • Сохранением контекста разговора
  • Обработкой ошибок
  • Гибкой настройкой поведения

Что нам понадобится

  1. API-ключ LLM_КИ — получите бесплатный ключ на llmki.ru/dashboard/keys
  2. Токен Telegram-бота — создайте бота через @BotFather
  3. Python 3.8+
  4. Библиотеки: openai, python-telegram-bot

Шаг 1: Установка зависимостей

Создайте виртуальное окружение и установите необходимые пакеты:

# Создание виртуального окружения (опционально, но рекомендуется)
python -m venv venv
source venv/bin/activate  # На Windows: venv\Scripts\activate

# Установка зависимостей
pip install openai python-telegram-bot

Шаг 2: Базовый код бота

Создайте файл bot.py со следующим содержимым:

import os
import logging
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
import openai

# Настройка логирования
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    level=logging.INFO
)
logger = logging.getLogger(__name__)

# Настройка OpenAI клиента для LLM_КИ
# API полностью совместим с OpenAI SDK
client = openai.OpenAI(
    api_key=os.getenv("LLMKI_API_KEY", "sk-llmki-ai-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"),
    base_url="https://llmki.ru/v1"
)

# Хранение контекста для каждого пользователя
user_contexts = {}

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Обработчик команды /start"""
    await update.message.reply_text(
        'Привет! Я бот с GPT-4. Задай мне любой вопрос!'
    )

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Обработчик текстовых сообщений"""
    user_id = update.effective_user.id
    user_message = update.message.text
    
    # Показываем индикатор печати
    await context.bot.send_chat_action(
        chat_id=update.effective_chat.id,
        action="typing"
    )
    
    # Получаем или создаем контекст пользователя
    if user_id not in user_contexts:
        user_contexts[user_id] = [
            {"role": "system", "content": "Ты полезный ассистент. Отвечай кратко и по делу."}
        ]
    
    # Добавляем сообщение пользователя
    user_contexts[user_id].append({"role": "user", "content": user_message})
    
    # Ограничиваем длину контекста (последние 10 сообщений)
    if len(user_contexts[user_id]) > 21:  # system + 10 пар user/assistant
        user_contexts[user_id] = user_contexts[user_id][:1] + user_contexts[user_id][-20:]
    
    try:
        # Отправляем запрос к GPT-4 через LLM_КИ
        response = client.chat.completions.create(
            model="openai/gpt-4o",
            messages=user_contexts[user_id],
            max_tokens=1000,
            temperature=0.7
        )
        
        bot_response = response.choices[0].message.content
        
        # Добавляем ответ бота в контекст
        user_contexts[user_id].append({"role": "assistant", "content": bot_response})
        
        await update.message.reply_text(bot_response)
        
    except openai.APIError as e:
        logger.error(f"API ошибка: {e}")
        await update.message.reply_text(
            f"Ошибка API: {e.message if hasattr(e, 'message') else str(e)}"
        )
    except Exception as e:
        logger.error(f"Неожиданная ошибка: {e}")
        await update.message.reply_text("Извините, произошла ошибка. Попробуйте позже.")

def main() -> None:
    """Запуск бота"""
    # Получаем токен из переменной окружения
    bot_token = os.getenv("TELEGRAM_BOT_TOKEN", "YOUR_TELEGRAM_BOT_TOKEN")
    
    if bot_token == "YOUR_TELEGRAM_BOT_TOKEN":
        logger.error("Установите переменную окружения TELEGRAM_BOT_TOKEN")
        return
    
    application = Application.builder().token(bot_token).build()
    
    # Регистрируем обработчики
    application.add_handler(CommandHandler("start", start))
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
    
    # Запускаем бота
    logger.info("Бот запущен...")
    application.run_polling()

if __name__ == '__main__':
    main()

Шаг 3: Получение токенов

API-ключ LLM_КИ

  1. Зарегистрируйтесь на llmki.ru/register
  2. Перейдите в личный кабинет
  3. Создайте новый API-ключ
  4. Скопируйте ключ (формат: sk-llmki-ai-...)

Telegram Bot Token

  1. Напишите @BotFather в Telegram
  2. Отправьте команду /newbot
  3. Следуйте инструкциям для создания бота
  4. Скопируйте полученный токен

Шаг 4: Настройка и запуск

Создайте файл .env (или установите переменные окружения):

TELEGRAM_BOT_TOKEN=ваш_токен_от_botfather
LLMKI_API_KEY=sk-llmki-ai-ваш_ключ

Запустите бота:

python bot.py

Улучшения: выбор модели

Добавьте возможность выбора модели через команду:

# Хранение выбранной модели для каждого пользователя
user_models = {}

async def set_model(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Команда для смены модели"""
    if context.args:
        model = context.args[0]
        user_id = update.effective_user.id
        
        # Список доступных моделей через LLM_КИ
        available_models = [
            "openai/gpt-4o",
            "openai/gpt-4o-mini",
            "anthropic/claude-3.5-sonnet",
            "anthropic/claude-3-haiku",
            "google/gemini-pro",
            "meta/llama-3.1-70b"
        ]
        
        if model in available_models:
            user_models[user_id] = model
            await update.message.reply_text(f"✅ Модель изменена на {model}")
        else:
            await update.message.reply_text(
                f"❌ Неверная модель.\n\n"
                f"Доступные модели:\n" + "\n".join(f"• {m}" for m in available_models)
            )
    else:
        await update.message.reply_text(
            "Использование: /model <название_модели>\n\n"
            "Пример: /model openai/gpt-4o"
        )

# В функции handle_message используйте выбранную модель:
model = user_models.get(user_id, "openai/gpt-4o")
response = client.chat.completions.create(
    model=model,
    messages=user_contexts[user_id],
    ...
)

# В main() добавьте:
application.add_handler(CommandHandler("model", set_model))

Улучшения: команда /reset

Добавьте возможность сброса контекста:

async def reset_context(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Сброс контекста разговора"""
    user_id = update.effective_user.id
    if user_id in user_contexts:
        del user_contexts[user_id]
    await update.message.reply_text("✅ Контекст разговора сброшен")

# В main():
application.add_handler(CommandHandler("reset", reset_context))

Обработка ошибок

Для более надежной работы добавьте обработку различных типов ошибок:

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    # ... код получения сообщения ...
    
    try:
        response = client.chat.completions.create(
            model="openai/gpt-4o",
            messages=user_contexts[user_id],
            max_tokens=1000,
            temperature=0.7
        )
        
        bot_response = response.choices[0].message.content
        user_contexts[user_id].append({"role": "assistant", "content": bot_response})
        await update.message.reply_text(bot_response)
        
    except openai.RateLimitError:
        await update.message.reply_text(
            "⚠️ Превышен лимит запросов. Попробуйте через минуту."
        )
    except openai.APIError as e:
        if "insufficient_quota" in str(e).lower():
            await update.message.reply_text(
                "⚠️ Недостаточно средств на балансе. Пополните счет в личном кабинете."
            )
        else:
            logger.error(f"API ошибка: {e}")
            await update.message.reply_text(f"Ошибка API: {str(e)}")
    except Exception as e:
        logger.error(f"Неожиданная ошибка: {e}", exc_info=True)
        await update.message.reply_text("Произошла ошибка. Попробуйте позже.")

Преимущества использования LLM_КИ

  • Единый API для всех моделей — не нужно переписывать код при смене провайдера
  • Оплата в рублях — удобно для российских разработчиков
  • Прозрачные цены — видите стоимость каждого запроса
  • Высокая доступность — стабильная работа API
  • Поддержка streaming — для длинных ответов

Полный пример кода

Полный рабочий пример с всеми улучшениями доступен в нашем GitHub репозитории (ссылка будет добавлена).

Заключение

За 10 минут мы создали полнофункционального Telegram-бота с поддержкой GPT-4 и других моделей. API LLM_КИ позволяет легко интегрировать различные языковые модели с минимальными изменениями в коде.

Что дальше?

  • Добавьте обработку изображений (мультимодальные модели)
  • Интегрируйте базу данных для хранения истории
  • Реализуйте систему ролей и персонализации
  • Добавьте поддержку голосовых сообщений
  • Используйте streaming для длинных ответов

Полезные ссылки

Попробуйте сами и делитесь результатами!

Другие статьи

СтудентыУчёба
Как LLM_КИ помогает студентам: учёба без перерасхода
Конспекты, планы, перефраз и проверка фактов на дешёвых моделях. Готовые промпты и лайфхаки экономии.
16 ноября 20257 мин
Читать
БытСемья
Как LLM_КИ помогает мамам: быт, меню и списки дел
Меню на неделю, списки покупок, идеи занятий и вежливые ответы в чатах. Три простых сценария с готовыми шаблонами.
14 ноября 20256 мин
Читать
Статья не найдена — Блог LLM_КИ