Telegram bot, взаимодействующий с API OpenAI без проксирования. Разработка на Python (2024)

Создадим бота, использующего API OpenAI. И так развернем его на сервере, чтобы не настраивать проксирование запросов к API OpenAI (который заблокирован для пользователей из России), и не использовать иностранные VPS.

Бот должен помогать осуществлять

  • Автоматизацию рутинных задач (написание кода, документации, тестов).

  • Предоставлять рекомендации и примеры кода.

  • Анализировать код, находить ошибки и давать предложения по улучшению.

  • Сокращать времени разработки и тестирования.

Планирование и дизайн бота

Функциональные требования:

  1. Приветственное сообщение при запуске.

  2. Генерация ответов через OpenAI API.

  3. Обработка команд, например, /bot или /start

  4. Логирование ошибок.

  5. Автоматическое повторное подключение при сбое.

Основные сценарии использования

  1. Запуск бота:

    • Пользователь запускает бота командой /start.

    • Бот отправляет приветственное сообщение.

  2. Запрос информации:

  3. Обработка ошибок:

    • В случае ошибки бот записывает ее в лог и пытается восстановить соединение.

Выбор технологий и инструментов

Мы будем использовать следующие технологии и инструменты:

  • Python: Простота и легкость в изучении, большое количество библиотек и инструментов.

  • TeleBot: Простой интерфейс для взаимодействия с Telegram API.

  • OpenAI API: Использование модели GPT-3.5 для генерации текстовых ответов.

Написание кода телеграм-бота

Бот включает в себя несколько ключевых компонентов, которые обеспечивают его функциональность и взаимодействие с пользователями:

  1. Telegram Bot API: Этот компонент отвечает за прием и отправку сообщений пользователям через платформу Telegram.

  2. OpenAI API: Используется для генерации ответов на запросы пользователей с помощью модели GPT-3.5.

  3. Логирование: Ведет запись событий и ошибок для последующего анализа и отладки.

  4. Основной цикл (Event Loop): Обеспечивает непрерывную работу бота и обработку всех входящих сообщений.

Эти компоненты взаимодействуют следующим образом:

  • Пользователь отправляет сообщение боту в Telegram.

  • Бот принимает сообщение через Telegram Bot API и отправляет запрос к OpenAI API для генерации ответа.

  • Полученный ответ возвращается пользователю через Telegram.

  • Все события и ошибки записываются в лог для мониторинга и отладки.

1. Инициализация бота и API ключей OpenAI

Сначала необходимо настроить API ключи для OpenAI и Telegram.

import openaiimport telebotimport loggingimport osimport timeopenai.api_key = 'Ваш Openai API ключ'bot = telebot.TeleBot('Ваш Telegram токен')

Здесь мы импортируем необходимые библиотеки и устанавливаем ключи для доступа к API OpenAI и Telegram.

2. Настройка логирования

Логирование позволяет отслеживать события и ошибки в работе бота.

log_dir = os.path.join(os.path.dirname(__file__), 'ChatGPT_Logs')if not os.path.exists(log_dir): os.makedirs(log_dir)logging.basicConfig(filename=os.path.join(log_dir, 'error.log'), level=logging.ERROR, format='%(levelname)s: %(asctime)s %(message)s', datefmt='%d/%m/%Y %H:%M:%S')

Мы создаем директорию для логов и настраиваем параметры логирования для удобства анализа.

3. Обработка команд и сообщений

Определим функции для обработки команд /start и /bot, а также любых текстовых сообщений.

@bot.message_handler(commands=['start'])def send_welcome(message): bot.reply_to(message, 'Привет!\nЯ ChatGPT 3.5 Telegram Bot\U0001F916\nЗадай мне любой вопрос и я постараюсь на него ответить')def generate_response(prompt): completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] ) return completion.choices[0].message.content@bot.message_handler(commands=['bot'])def command_message(message): prompt = message.text response = generate_response(prompt) bot.reply_to(message, text=response)@bot.message_handler(func=lambda _: True)def handle_message(message): prompt = message.text response = generate_response(prompt) bot.send_message(chat_id=message.from_user.id, text=response)
  • send_welcome: Отправляет приветственное сообщение при запуске бота.

  • generate_response: Генерирует ответ с помощью OpenAI API.

  • command_message и handle_message: Обрабатывают команды и текстовые сообщения, генерируя ответы с помощью OpenAI API.

4. Основной цикл

Запуск основного цикла для обработки сообщений и повторного подключения при сбоях.

print('ChatGPT Bot is working')while True: try: bot.polling() except (telebot.apihelper.ApiException, ConnectionError) as e: logging.error(str(e)) time.sleep(5) continue

Здесь мы запускаем основной цикл, который постоянно проверяет новые сообщения и обрабатывает их. В случае ошибки бот записывает ее в лог и пытается восстановить соединение.

Получаем готовый код для нашего бота

import openaiimport telebotimport loggingimport osimport timeopenai.api_key = 'Openai_api_key'bot = telebot.TeleBot('Telegram_token')log_dir = os.path.join(os.path.dirname(__file__), 'ChatGPT_Logs')if not os.path.exists(log_dir): os.makedirs(log_dir)logging.basicConfig(filename=os.path.join(log_dir, 'error.log'), level=logging.ERROR, format='%(levelname)s: %(asctime)s %(message)s', datefmt='%d/%m/%Y %H:%M:%S')@bot.message_handler(commands=['start'])def send_welcome(message): bot.reply_to(message, 'Привет!\nЯ ChatGPT 3.5 Telegram Bot\U0001F916\nЗадай мне любой вопрос и я постараюсь на него ответиь')def generate_response(prompt): completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "user", "content": prompt} ] ) return completion.choices[0].message.content@bot.message_handler(commands=['bot'])def command_message(message): prompt = message.text response = generate_response(prompt) bot.reply_to(message, text=response)@bot.message_handler(func = lambda _: True)def handle_message(message): prompt = message.text response = generate_response(prompt) bot.send_message(chat_id=message.from_user.id, text=response)print('ChatGPT Bot is working')while True: try: bot.polling() except (telebot.apihelper.ApiException, ConnectionError) as e: logging.error(str(e)) time.sleep(5) continue

Развертывание на сервер c доступом к API OpenAI

Для развертывания мы остановимся на платформе Amvera.

Почему выбрали Amvera?

  • Amvera предоставляет встроенное бесплатное проксирование до API OpenAI. Вам не потребуется зарубежная виртуальная машина или VPN.

  • Развертывание идет максимально просто. Через загрузку кода в интерфейсе, либо через git push.

  • Стартовый баланс, который позволит протестировать сервис.

Запускаем нашего бота в облаке

Перейдем теперь к самой интересной части данной статьи, как развернуть бота так, чтобы не использовать иностранные серверы и не настраивать проксирование к API OpenAI.

Регистрация в сервисе

  1. На сайтеAmveraнажимаем на кнопку "Регистрация".

  2. Заполняем последовательно все поля.

  3. Подтверждаем, что мы не робот, и тыкаем на большую синюю кнопку "Регистрация"

  4. Остается только подтвердить указанную почту, перейдя по ссылке в письме.

Создание проекта и размещение бота

  1. На появившейся после входа странице нажимаем на кнопку "Создать" или "Создать первый!".

  2. Выбираем тариф. Может показаться, что тарифные планы предоставляют слишком мало ресурса по сравнению с VPS. Однако в VPS часть ресурсов используется операционной системой, а тут весь выделенный ресурс уходит только на развертываемое приложение. Нам хватит тарифа Пробный, но первый запуск лучше осуществить на одном из старших тарифов, чтобы убедиться, что все работает.

    Telegram bot, взаимодействующий с API OpenAI без проксирования. Разработка на Python (1)

  3. Создадим конфигурационный yaml файл. Это можно сделать самостоятельно на основаниидокументации, однако я рекомендую воспользоваться автоматическимграфическим инструментом генерации либо сделать это в личном кабинете во вкладке Конфигурация.

    Telegram bot, взаимодействующий с API OpenAI без проксирования. Разработка на Python (2)

    1. Мы используем Python, укажем его версию.

    2. requirements.txt - файл с зависимостями.Оченьважноуказать все используемые в проекте библиотеки в этом файле, чтобы сервис смог их скачать через pip. Необходимо прописать все библиотеки в формате библиотека==версия.

    3. Указываем путь до файла, содержащего точку входа в программу (тот файл, который вы указываете интерпретатору питона, когда запускаете приложение) либо команду запуска.

    4. Если в процессе работы ваш бот использует SQLite, сохраняйте данные в постоянное хранилище /data. В противном случае при перезапуске проекта все данныебудут потеряны!

    5. Порт можно указать тот, который используется в коде вашего приложения. Не забудьте изменить локалхост на 0.0.0.0

    6. Нажимаем на кнопку Generate YAML, после чего начинается загрузка файлаamvera.yml.

  4. Скачанный файл кладем в корень нашего проекта

  5. Инициируем Git-репозиторий и загружаем наш проект.

    • В корне нашего проекта выполняем команду:git init(если гит уже инициализирован в вашем проекте, то этого делать не нужно)

    • Привязываем наш локальный гит репозиторий к удаленному репозиторию через команду, которая указана на странице проекта в amvera (имеет формат git remote add amvera <https://git.amvera.ru/ваш_юзернейм/ваш_проект>)

      1. Делаемgit add .иgit commit -m "Initial commit"

      2. Делаем push с нашим проектом, выполняя командуgit push amvera master, вводя учетные данные, которые использовались при регистрации в сервисе.

  6. После того как проект запушится в систему, на странице проекта статус поменяется на "Выполняется сборка".

    Telegram bot, взаимодействующий с API OpenAI без проксирования. Разработка на Python (3)

  7. Как только проект соберется, он перейдет в стадию: "Выполняется развертывание", а после в статус "Успешно развернуто".

    Telegram bot, взаимодействующий с API OpenAI без проксирования. Разработка на Python (4)

  8. Если по какой-то причине проект не развернулся, можно обратиться к логам сборки и логам приложения для отладки. Если Проект завис в статусе "Сборка" на долгое время, а логи сборки не отображаются, то стоит ещё раз проверить корректность amvera.yml файла.

Ура, все работает! Теперь наш Telegram-бот развернут и готов к использованию. Вы можете проделать все шаги из статьи и протестировать его, отправив команды и сообщения, чтобы увидеть, как он работает с API OpenAI.

Автор материала: Алексей Пономарёв

Telegram bot, взаимодействующий с API OpenAI без проксирования. Разработка на Python (2024)

References

Top Articles
Chinese Architecture: Features, Culture, Types, Decor
Common Core Algebra 2 Unit 4 Answer Key
The Largest Banks - ​​How to Transfer Money With Only Card Number and CVV (2024)
What Are Romance Scams and How to Avoid Them
Login Page
The Ivy Los Angeles Dress Code
Chase Bank Operating Hours
Aiken County government, school officials promote penny tax in North Augusta
15 Types of Pancake Recipes from Across the Globe | EUROSPAR NI
Nation Hearing Near Me
Www.megaredrewards.com
Wal-Mart 140 Supercenter Products
King Fields Mortuary
Palace Pizza Joplin
Needle Nose Peterbilt For Sale Craigslist
Mivf Mdcalc
When Is the Best Time To Buy an RV?
Our History | Lilly Grove Missionary Baptist Church - Houston, TX
What’s the Difference Between Cash Flow and Profit?
83600 Block Of 11Th Street East Palmdale Ca
Loves Employee Pay Stub
Sprinkler Lv2
Craigslist Maui Garage Sale
Gayla Glenn Harris County Texas Update
Panolian Batesville Ms Obituaries 2022
Mj Nails Derby Ct
Glover Park Community Garden
Airline Reception Meaning
Walmart Pharmacy Near Me Open
Anonib Oviedo
Idle Skilling Ascension
Dairy Queen Lobby Hours
Stubhub Elton John Dodger Stadium
Mega Millions Lottery - Winning Numbers & Results
A Small Traveling Suitcase Figgerits
Giantess Feet Deviantart
AP Microeconomics Score Calculator for 2023
Devotion Showtimes Near Mjr Universal Grand Cinema 16
CVS Near Me | Somersworth, NH
Go Smiles Herndon Reviews
301 Priest Dr, KILLEEN, TX 76541 - HAR.com
How to Quickly Detect GI Stasis in Rabbits (and what to do about it) | The Bunny Lady
Brandon Spikes Career Earnings
Directions To Cvs Pharmacy
Advance Auto.parts Near Me
Fluffy Jacket Walmart
60 Days From August 16
Germany’s intensely private and immensely wealthy Reimann family
Grand Park Baseball Tournaments
How To Win The Race In Sneaky Sasquatch
Metra Union Pacific West Schedule
Latest Posts
Article information

Author: Eusebia Nader

Last Updated:

Views: 5385

Rating: 5 / 5 (80 voted)

Reviews: 95% of readers found this page helpful

Author information

Name: Eusebia Nader

Birthday: 1994-11-11

Address: Apt. 721 977 Ebert Meadows, Jereville, GA 73618-6603

Phone: +2316203969400

Job: International Farming Consultant

Hobby: Reading, Photography, Shooting, Singing, Magic, Kayaking, Mushroom hunting

Introduction: My name is Eusebia Nader, I am a encouraging, brainy, lively, nice, famous, healthy, clever person who loves writing and wants to share my knowledge and understanding with you.