Создайте своего первого 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-бот готов! Теперь вы можете экспериментировать с ним, добавлять ему какой-либо функционал, развивать его.

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

+1
1
+1
4
+1
0
+1
1
+1
1

Один комментарий

  1. Я вообще не спец по питону и у меня с самого начала проблемы. Куда вводить source, import? В терминале пишет что оно не распознается как команда

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *