Данная статья является вольным переводом статьи на medium.com, плюсом от себя реализация API ChatGPT в Телеграм боте.

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

Готовый/работающий телеграм бот ChatGPT доступен тут.

На вопрос "Кто ты?" сама нейросеть отвечает примерно следующее "Я - ChatGPT, крупнейшая языковая модель, созданная OpenAI. Я разработана для обработки естественного языка и могу помочь вам ответить на вопросы, обсудить темы или предоставить информацию на различные темы".

Другими словами, по моему субъективному мнению нейросеть затачивается в первую очередь для поддержки разговора, в идеале показать, что там сидит живой человек, а не обученная AI модель. Поэтому когда будете играть с чатом не забывайте об этом, не следует ожидать от чата достоверных и точных данных, или глубокого смысла, сейчас она не об этом, пока еще не об этом.

Итак, как получить доступ к сервису ChatGPT из запрещенных стран написано в статье на хабре, хочу обратить ваше внимание, что будет необходимо сперва создать gmail почту с подтверждением по СМС на иностранный номер телефона, затем при регистрации на сайте ChatGPT также подтвердить номер телефона по СМС, и эти два номера телефона совсем не обязательно должны быть одинаковыми, поэтому сервисы по продаже номеров мобильных телефонов на одну смс вполне годятся.

Установка пакета

Сперва устанавливаем необходимый пакет в python:

# Install openai 
pip install openai 

# Import Library 
import openai  

Подробнее об API OpenAI можно прочитать в документации:

https://beta.openai.com/docs/api-reference/introduction

Получаем API ключ

Сгенерировать API ключ можно после регистрации на сайте по адресу:

https://beta.openai.com/account/api-keys

# Предоставляем ключ API 
openai.api_key = "Your_Key"

Выбираем обученную модель

Выбираем обученную модель, а именно “text-davinci-003”, она является самой мощной моделью GPT-3 и обучалась на данных до июня 2021 года. Узнать больше о различных моделях Вы можете здесь:

https://beta.openai.com/docs/models/gpt-3

# Выбираем обученную модель
engine="text-davinci-003" 

Проверяем модель

Протестируем модель! Начнем с того, что попросим ChatGPT назвать лучшую Python библиотеку по машинному обучению:

# Запрос 
prompt = "Назови лучшую Python библиотеку по машинному обучению" 

# Модель 
completion = openai.Completion.create(engine=engine, 
                                      prompt=prompt, 
                                      temperature=0.5, 
                                      max_tokens=1000) 

Код выше указывает использовать модель “text-davinci-003”, с температурой 0,5. Температура представляет собой число от 0 до 1. Меньшее число означает более четко определенный ответ, в то время как большее число позволяет модели брать на себя больший риск. Ответ будет выглядеть примерно так:

# Выводим ответ 
print(completion)  

Выводим только текст ответа:

# Печатаем только текст ответа
print( completion.choices[0]['text'] )
У меня был такой ответ:
Scikit-learn.

Идем дальше! Как насчет того, чтобы прописывать вопрос в терминале и там же получать ответ:

prompt = str(input())
completion = openai.Completion.create(engine=engine,
                                      prompt=prompt,
                                      temperature=0.5,
                                      max_tokens=1000)
                                      print('\nОтвет:')
print( completion.choices[0]['text'] )

Собственно в коде выше после запуска, скрипт ждет ввода данных из-за функции input(). Ответ будет получен только после ввода запроса.

Оборачиваем код в функцию

Для удобства, обернем полученный код Python в простую функцию:

# Функция для ChatGPT
def ask(prompt):
    completion = openai.Completion.create(engine="text-davinci-003", 
                                          prompt=prompt, 
                                          temperature=0.5, 
                                          max_tokens=1000)
    print( 'Вопрос:', prompt )
    print( '\nОтвет:' )
    print( completion.choices[0]['text'] )

Теперь все, что Вам нужно сделать, это написать свой вопрос в функции «ask()».

ask('самая красивая женщина на земле')
# Ответ
# На земле нет одной самой красивой женщины. Красота и прелесть относятся к индивидуальным вкусам и предпочтениям.

Как видим API ChatGPT прост в использовании, но имейте в виду, что ответы, которые он дает, не всегда на 100% верны.

Прикручиваем API ChatGPT к телеграм боту

Исходники телеграм бота выложил в гитхаб репозиторий.

Для создания телеграм бота нам понадобится токен, который мы можем получить у BotFather. Там же можно задать название бота, изображение и описание.

Клонируем репозиторий:

git clone git@github.com:ViktorAllayarov/ChatGPT_telegram_bot.git

# переходим в папку с проектом
cd ChatGPT_telegram_bot

Далее создаем локальное виртуальное окружение:

python3 -m venv env
# или
py -3.10 -m venv env

Переходим в виртуальное окружение и обновляем пакетный менеджер pip:

# для Linux/macOS
source env/bin/activate

для Windows
source env/scripts/activate

далее обновляем pip
python -m pip install --upgrade pip

устанавливаем все зависимости
pip install -r requirements.txt

В файле main.py есть кусок кода, который тянет переменные среды окружения, с помощью библиотеки dotenv:

env = {
    **dotenv_values(".env.prod"),
    **dotenv_values(".env.dev"),  # override
}
openai.api_key = env["API_KEY_CHATGPT"]
bot = telebot.TeleBot(env["TG_BOT_TOKEN"])
db_link = env["DB_LINK"]

поэтому нам необходимо создать файл .env.prod или .env.dev (или оба файла) и задать там необходимые переменные 

# файл .env.prod
API ключ CHATGPT
API_KEY_CHATGPT=
# токен телеграм бота
TG_BOT_TOKEN=
# ссылка на БД SQLite3,
# файл базы создастся в корне проекта
# при первом запросе в боте
# база записывает всех пользователей, которые пользуются ботом
DB_LINK=db.db

Теперь можно запустить проект:

python main.py

Надеюсь, что эта статья была интересной и полезной, спасибо, что посетили ее на этом сайте.

Комментарии (7)


  1. Kolonist
    00.00.0000 00:00
    +2

    Спешу Вас расстроить, но text-davinci-003 - это не ChatGPT.


    1. HemulGM
      00.00.0000 00:00
      +2

      На самом деле, модель в ChatGPT используется именно эта. Просто она немного "настроена" через fine-tunes. И такого же поведения можно добиться и с базовой моделью нам.

      Например, одно из правил "оборачивать код в теги". Достаточно собрать файл со списком json объектов (jsonl) и скормить API в метод fine-tunes.

      Что касается самой статьи... Полезность её спорная


    1. inTeam
      00.00.0000 00:00

      а к бингу апи платное? нельзя бота который через впн сша будет ходить?


  1. Samail
    00.00.0000 00:00

    хочу обратить ваше внимание, что будет необходимо сперва создать gmail почту с подтверждением по СМС на иностранный номер телефона

    Я зарегистрировался с яндекс почтой, указывал ящик @yandex.com


    1. IvanNikonorov
      00.00.0000 00:00

      необходимо сперва создать gmail почту с подтверждением по СМС на иностранный номер телефона

      Почта необязательно на gmail должна быть. Кстати, на gmail обычно можно зарегистрироваться и без указания номера телефона, но иногда без номера не получается.


  1. nikohakerinc
    00.00.0000 00:00

    Статья опоздала как минимум месяца на 1,5. Уже давно запилил TG бота и дописал отказоустойчивость, поддержку групповых чатов и логирование

    https://github.com/nikohakerinc/Study/blob/main/ChatGPT_PROD_Bot.py


  1. KTOTAM
    00.00.0000 00:00

    Как вы поддерживаете контекст, путем объединения текст или есть другой способ?