Создайте своего первого Telegram-бота на базе ChatGPT: Пошаговое руководство 2023

Создайте своего первого Telegram-бота на базе ChatGPT: Пошаговое руководство 2023

Вступление

Хотели бы вы создать чат-бота, который мог бы вести интеллектуальные беседы с вашими пользователями? В этом пошаговом руководстве мы покажем вам, как создать Telegram-бота, который использует ChatGPT для генерации ответов, похожих на человеческие.

@ai_machinelearning_big_data - наш бесплатный, обучающий телеграм канал

@vistehno - ChatGpt в телеграм, нейросеть ведет канал, пишет код, обзор нейросетей и многое другое.

К концу этой статьи у вас будет полнофункциональный Telegram-бот, который вы сможете использовать для общения со своими пользователями. Мы расскажем всё, что вам нужно знать, в том числе о том, как настроить API ChatGPT и API Telegram Bot, как интегрировать их и как протестировать вашего бота, чтобы убедиться, что он работает должным образом.

Мы создали и подключили ChatGPT бот в телеграм. Теперь вы можете бесплатно пользоваться им, задавть любые вопросы, решать задачи и, генерировать контент, обсуждать новости, генерировать стихи для девушки, все , что угодно.

. На днях мы подключим новую версию апи и тогда ChatGpt будет генерировать еще более невероятный контент. Рекомендуем посмотреть на это чудо.

Давайте приступать!

Краткая информация о ChatGPT

ChatGPT - это большая языковая модель, разработанная Open AI, которая может генерировать человекоподобные ответы на текстовые подсказки. Он был обучен на огромном наборе данных интернет-текста и способен генерировать широкий спектр ответов, от коротких фраз до целых абзацев.

Одной из ключевых особенностей ChatGPT является его способность генерировать ответы, которые контекстуально релевантны и способны точно подойти к тематике диалога. Это делает его подходящим для использования в чат-ботах, где он может помочь обеспечить увлекательные разговоры с пользователями.

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

Приступаем к работе

Создайте каталог:

mkdir chatgptbot cd chatgptbot

Настройте виртуальную среду Python и активируйте её:

python3 -m venv env source env/bin/activate

В папке chatgptbot создайте два файла:

  • bot.py
  • copilot.py

Сейчас мы будем взаимодействовать с файлом copilot.py .

Во-первых, установите openai и другие библиотеки:

pip install openai pip install python-dotenv

Импортируйте библиотеки:

import os import json from dotenv import load_dotenv import openai

Создание класса и функций

Создайте класс с именем Copilot и добавьте две функции:

  • clear_text — отвечает за очистку лишних пробелов.
  • get_answer — отвечает за получение ответа. Вызывает класс Completion из библиотеки openai. Для того, чтобы продолжить наш запрос, нам нужен API-ключ.
class Copilot: def clear_text(self, text): a = text.replace("\n", " ") b = a.split() c = " ".join(b) return c def get_answer(self, question): prompt = question load_dotenv() openai.api_key = os.getenv("CHAT_GPT3_API_KEY") response = openai.Completion.create( engine="text-davinci-003", prompt=prompt, max_tokens=512, temperature=0.5, ) json_object = response # Convert the JSON object to a JSON string json_string = json.dumps(json_object) # Parse the JSON string using json.loads() parsed_json = json.loads(json_string) text = parsed_json['choices'][0]['text'] cleared_text = self.clear_text(text) return cleared_text

Получение API-ключа ChatGPT3

Перейдите на официальный сайт openai и войдите в систему или зарегистрируйтесь. После успешного входа в свою учетную запись перейдите в раздел API keys и сгенерируйте новый API-ключ.

Создать файл .env:

touch .env

Добавить API-ключ

Вы можете получить его здесь: OpenAI

CHAT_GPT3_API_KEY=paste here your api key

Здесь представлено его использование:

copilot = Copilot() a = copilot.get_answer("Hello, there!") print(a)

Telegram-бот

Установка и импорт библиотек:

pip install python-telegram-bot --pre pip install requests
import os import json import requests import time from copilot import Copilot from dotenv import load_dotenv from telegram import ( ReplyKeyboardMarkup, Update, KeyboardButton, ) from telegram.ext import ( Application, CommandHandler, ContextTypes, ConversationHandler, MessageHandler, filters, )

States:

(ENTRY_STATE, QUESTION_STATE, ) = range(2)

Перейдите к файлу .env:

Добавьте токен Telegram-бота:

Его можно получить здесь: BotFather

TELEGRAM_BOT_TOKEN=paste your Telegram bot token

Вот отправная точка нашего Telegram-бота!

Давайте используем conv_handler и сделаем Telegram-бота масштабируемым для будущих обновлений:

if __name__ == '__main__': load_dotenv() application = Application.builder().token(os.getenv("TELEGRAM_BOT_TOKEN")).read_timeout(100).get_updates_read_timeout(100).build() conv_handler = ConversationHandler( entry_points=[CommandHandler('start', start)], states={ ENTRY_STATE: [ MessageHandler(filters.Regex('^Back#39;), start), MessageHandler(filters.Regex('^Question-Answering#39;), pre_query_handler), ], QUESTION_STATE: [ MessageHandler(filters.Regex('^Back#39;), start), MessageHandler(filters.TEXT, pre_query_answer_handler), ], }, fallbacks=[], ) application.add_handler(conv_handler) print("Bot is running ...") application.run_polling()

Давайте создадим функцию, которую можно будет повторно использовать:

def _generate_copilot(prompt: str): """Gets answer from copilot""" copilot = Copilot() c = copilot.get_answer(prompt) return c

Добавление команды /start:

async def start(update: Update, context: ContextTypes): """Start the conversation and ask user for an option.""" button = [[KeyboardButton(text="Question-Answering")]] reply_markup = ReplyKeyboardMarkup( button, resize_keyboard=True ) await update.message.reply_text( "Choose an option: 👇🏻", reply_markup=reply_markup, ) return ENTRY_STATE

Создайте функцию для пользовательского ввода (текста):

#Handling the question async def pre_query_handler(update: Update, context: ContextTypes): """Ask the user for a query.""" button = [[KeyboardButton(text="Back")]] reply_markup = ReplyKeyboardMarkup( button, resize_keyboard=True ) await update.message.reply_text( "Enter your text: 👇🏻", reply_markup=reply_markup, ) return QUESTION_STATE

Обработка пользовательского ввода (text) и генерация текста (answer):

#Handling the answer async def pre_query_answer_handler(update: Update, context: ContextTypes): """Display the answer to the user.""" button = [[KeyboardButton(text="Back")]] reply_markup = ReplyKeyboardMarkup( button, resize_keyboard=True ) question = update.message.text answer = _generate_copilot(question) context.user_data['answer'] = answer await update.message.reply_text( answer, reply_markup=reply_markup, ) return QUESTION_STATE

На этом ваш первый Telegram-бот готов! Теперь вы можете экспериментировать с ним, добавлять ему какой-либо функционал, развивать его.

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

Статья была взята из этого источника:

11
22 комментария
), start),\n MessageHandler(filters.Regex('^Question-Answering ), pre_query_handler),\n ],\n QUESTION_STATE: [\n MessageHandler(filters.Regex('^Back ), start),\n MessageHandler(filters.TEXT, pre_query_answer_handler),\n ],\n },\n fallbacks=[],\n )\n \n application.add_handler(conv_handler)\n\n print(\"Bot is running ...\")\n application.run_polling()","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Давайте создадим функцию, которую можно будет повторно использовать:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"def _generate_copilot(prompt: str):\n \"\"\"Gets answer from copilot\"\"\"\n \n copilot = Copilot()\n c = copilot.get_answer(prompt)\n\n return c","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Добавление команды /start:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"async def start(update: Update, context: ContextTypes):\n \"\"\"Start the conversation and ask user for an option.\"\"\"\n\n button = [[KeyboardButton(text=\"Question-Answering\")]]\n reply_markup = ReplyKeyboardMarkup(\n button, resize_keyboard=True\n )\n\n await update.message.reply_text(\n \"Choose an option: 👇🏻\",\n reply_markup=reply_markup,\n )\n\n return ENTRY_STATE","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Создайте функцию для пользовательского ввода (текста):

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"#Handling the question\nasync def pre_query_handler(update: Update, context: ContextTypes):\n \"\"\"Ask the user for a query.\"\"\"\n\n button = [[KeyboardButton(text=\"Back\")]]\n reply_markup = ReplyKeyboardMarkup(\n button, resize_keyboard=True\n )\n\n await update.message.reply_text(\n \"Enter your text: 👇🏻\",\n reply_markup=reply_markup,\n )\n\n return QUESTION_STATE","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Обработка пользовательского ввода (text) и генерация текста (answer):

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"#Handling the answer\nasync def pre_query_answer_handler(update: Update, context: ContextTypes):\n \"\"\"Display the answer to the user.\"\"\"\n\n button = [[KeyboardButton(text=\"Back\")]]\n reply_markup = ReplyKeyboardMarkup(\n button, resize_keyboard=True\n )\n\n question = update.message.text\n\n answer = _generate_copilot(question)\n context.user_data['answer'] = answer\n\n await update.message.reply_text(\n answer, \n reply_markup=reply_markup,\n )\n\n return QUESTION_STATE","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На этом ваш первый Telegram-бот готов! Теперь вы можете экспериментировать с ним, добавлять ему какой-либо функционал, развивать его.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Полезные ссылки"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Получите полный код на Github","Python Telegram Bot","OpenAI","Python"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Статья была взята из этого источника:

"}},{"type":"link","cover":false,"hidden":false,"anchor":"","data":{"link":{"type":"link","data":{"url":"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fuproger.com%2Fsozdajte-svoego-pervogo-telegram-bota-na-baze-chatgpt%2F%3Fref%3Dvc.ru&postId=600167","title":"Создайте своего первого Telegram-бота на базе ChatGPT: Пошаговое руководство 2023","description":"Вступление Хотели бы вы создать чат-бота, который мог бы вести интеллектуальные беседы с вашими пользователями? В этом пошаговом руководстве мы покажем вам, как создать Telegram-бота, который использует ChatGPT для генерации ответов, похожих на человеческие. К концу этой статьи у вас будет пол","image":{"type":"image","data":{"uuid":"c08b6843-a55d-5378-ae43-2bcd90cdbb8c","width":270,"height":270,"size":20765,"type":"png","color":"050505","hash":"","external_service":[]}},"v":1,"hostname":"uproger.com"}}}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":22,"favorites":48,"reposts":0,"views":80,"hits":40028,"reads":null,"online":0},"dateFavorite":0,"hitsCount":40028,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1389654/600167-sozdaite-svoego-pervogo-telegram-bota-na-baze-chatgpt-poshagovoe-rukovodstvo-2023","author":{"id":1389654,"name":"Machine learning","nickname":null,"description":"Самая актуальная информация из мира ИТ, мл, нейронных сетей, t.me/ai_machinelearning_big_data","uri":"","avatar":{"type":"image","data":{"uuid":"a78c7151-4c19-5bca-9f1e-9857305ee8e1","width":640,"height":640,"size":32754,"type":"jpg","color":"043b54","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"a78c7151-4c19-5bca-9f1e-9857305ee8e1","width":640,"height":640,"size":32754,"type":"jpg","color":"043b54","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4062297,"userId":1389654,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4062297"}],"lastModificationDate":1765025565,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":true,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1389654,"name":"Machine learning","nickname":null,"description":"Самая актуальная информация из мира ИТ, мл, нейронных сетей, t.me/ai_machinelearning_big_data","uri":"","avatar":{"type":"image","data":{"uuid":"a78c7151-4c19-5bca-9f1e-9857305ee8e1","width":640,"height":640,"size":32754,"type":"jpg","color":"043b54","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"a78c7151-4c19-5bca-9f1e-9857305ee8e1","width":640,"height":640,"size":32754,"type":"jpg","color":"043b54","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4062297,"userId":1389654,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4062297"}],"lastModificationDate":1765025565,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":true,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[{"id":1,"count":11}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null,"keywords":["handling"],"media":{"type":"image","data":{"uuid":"dda7e80c-1c0b-5ffa-b1d0-27e9ee584b58","width":1864,"height":980,"size":95662,"type":"png","color":"66cdf5","hash":"","external_service":[]}},"customCover":null,"robotsTag":"noindex","categories":[],"isAnonymized":true}};