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

Вступление
Хотели бы вы создать чат-бота, который мог бы вести интеллектуальные беседы с вашими пользователями? В этом пошаговом руководстве мы покажем вам, как создать Telegram-бота, который использует ChatGPT для генерации ответов, похожих на человеческие.
К концу этой статьи у вас будет полнофункциональный Telegram-бот, который вы сможете использовать для общения со своими пользователями. Мы расскажем всё, что вам нужно знать, в том числе о том, как настроить API ChatGPT и API Telegram Bot, как интегрировать их и как протестировать вашего бота, чтобы убедиться, что он работает должным образом.
Давайте приступать!
https://t.me/vistehno – 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$'), start),
MessageHandler(filters.Regex('^Question-Answering$'), pre_query_handler),
],
QUESTION_STATE: [
MessageHandler(filters.Regex('^Back$'), 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-бот готов! Теперь вы можете экспериментировать с ним, добавлять ему какой-либо функционал, развивать его.
Полезные ссылки
- Получите полный код на Github
- Python Telegram Bot
- OpenAI
- Python
Я вообще не спец по питону и у меня с самого начала проблемы. Куда вводить source, import? В терминале пишет что оно не распознается как команда