В этой статье мы создадим Telegram-бота, который использует GPT-4 для ответов на вопросы пользователей.
Что нам понадобится
Шаг 1: Установка зависимостей
pip install openai python-telegram-bot
Шаг 2: Создание бота
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_КИ
client = openai.OpenAI(
api_key="sk-llmki-ai-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://llmki.ru/v1"
)
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_message = update.message.text
try:
# Отправляем запрос к GPT-4 через LLM_КИ
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[
{"role": "system", "content": "Ты helpful ассистент. Отвечай кратко и по делу."},
{"role": "user", "content": user_message}
],
max_tokens=1000,
temperature=0.7
)
bot_response = response.choices[0].message.content
await update.message.reply_text(bot_response)
except Exception as e:
logger.error(f"Ошибка при обращении к GPT: {e}")
await update.message.reply_text("Извините, произошла ошибка. Попробуйте позже.")
def main() -> None:
"""Запуск бота"""
application = Application.builder().token("YOUR_TELEGRAM_BOT_TOKEN").build()
application.add_handler(CommandHandler("start", start))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
application.run_polling()
if __name__ == '__main__':
main()
Шаг 3: Получение токенов
Шаг 4: Запуск
Замените `sk-llmki-ai-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` и `YOUR_TELEGRAM_BOT_TOKEN` на реальные значения и запустите:
python bot.py
Дополнительные возможности
Контекст разговора
Для сохранения контекста между сообщениями добавьте хранение истории:
user_contexts = {}
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
user_id = update.effective_user.id
user_message = update.message.text
# Получаем или создаем контекст пользователя
if user_id not in user_contexts:
user_contexts[user_id] = [
{"role": "system", "content": "Ты helpful ассистент. Отвечай кратко и по делу."}
]
# Добавляем сообщение пользователя
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:
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 Exception as e:
logger.error(f"Ошибка при обращении к GPT: {e}")
await update.message.reply_text("Извините, произошла ошибка. Попробуйте позже.")
Смена модели
Добавьте команду для выбора модели:
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
available_models = [
"openai/gpt-4o",
"anthropic/claude-3.5-sonnet",
"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"Доступные модели: {', '.join(available_models)}")
else:
await update.message.reply_text("Использование: /model <название_модели>")
# Добавить в main():
application.add_handler(CommandHandler("model", set_model))
Заключение
Всего за несколько шагов мы создали полнофункционального Telegram-бота с GPT-4. API LLM_КИ позволяет легко интегрировать различные языковые модели с минимальными изменениями в коде.
Что дальше?
Попробуйте сами и делитесь результатами!