Данная статья является вольным переводом статьи на medium.com , плюсом от себя реализация API ChatGPT в Телеграм боте.
Тема как написать телеграм бота уже довольно тривиальная, статей в интернете полно, поэтому тут я затронул это дело не так глубоко, ниже выложу ссылки на исходный код, разобраться будет не сложно. Основным мотивом написания статьи послужил тот факт, что ChatGPT не доступен в ряде стран, в том числе в России, и хотелось сделать его по настоящему общедоступным.
Готовый/работающий телеграм бот ChatGPT доступен тут.
На вопрос «Кто ты?» сама нейросеть отвечает примерно следующее «Я — ChatGPT, крупнейшая языковая модель, созданная OpenAI. Я разработана для обработки естественного языка и могу помочь вам ответить на вопросы, обсудить темы или предоставить информацию на различные темы».
Другими словами, по моему субъективному мнению нейросеть затачивается в первую очередь для поддержки разговора, в идеале показать, что там сидит живой человек, а не обученная AI модель. Поэтому когда будете играть с чатом не забывайте об этом, не следует ожидать от чата достоверных и точных данных, или глубокого смысла, сейчас она не об этом, пока еще не об этом.
Итак, как получить доступ к сервису ChatGPT из запрещенных стран написано в статье на хабре, хочу обратить ваше внимание, что будет необходимо сперва создать gmail почту с подтверждением по СМС на иностранный номер телефона, затем при регистрации на сайте ChatGPT также подтвердить номер телефона по СМС, и эти два номера телефона совсем не обязательно должны быть одинаковыми, поэтому сервисы по продаже номеров мобильных телефонов на одну смс вполне годятся.
Если Вы хотите пощупать ChatGPT и потестировать API на Python, тогда об этом ниже.
Установка пакета
Сперва устанавливаем необходимый пакет в python:
1 2 3 4 5 |
# 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
1 2 |
# Предоставляем ключ API openai.api_key = "Your_Key" |
Выбираем обученную модель
Выбираем обученную модель, а именно “text-davinci-003”, она является самой мощной моделью GPT-3 и обучалась на данных до июня 2021 года. Узнать больше о различных моделях Вы можете здесь:
https://beta.openai.com/docs/models/gpt-3
1 2 |
# Выбираем обученную модель engine="text-davinci-003" |
Проверяем модель
Протестируем модель! Начнем с того, что попросим ChatGPT назвать лучшую Python библиотеку по машинному обучению:
1 2 3 4 5 6 7 8 |
# Запрос prompt = "Назови лучшую Python библиотеку по машинному обучению" # Модель completion = openai.Completion.create(engine=engine, prompt=prompt, temperature=0.5, max_tokens=1000) |
Код выше указывает использовать модель “text-davinci-003”, с температурой 0,5. Температура представляет собой число от 0 до 1. Меньшее число означает более четко определенный ответ, в то время как большее число позволяет модели брать на себя больший риск. Ответ будет выглядеть примерно так:
1 2 |
# Выводим ответ print(completion) |
Выводим только текст ответа:
1 2 3 4 5 |
# Печатаем только текст ответа print( completion.choices[0]['text'] ) # У меня был такой ответ: # Scikit-learn. |
Идем дальше! Как насчет того, чтобы прописывать вопрос в терминале и там же получать ответ:
1 2 3 4 5 6 7 8 |
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 в простую функцию:
1 2 3 4 5 6 7 8 9 |
# Функция для 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()».
1 2 3 4 |
ask('самая красивая женщина на земле') # Ответ # На земле нет одной самой красивой женщины. Красота и прелесть относятся к индивидуальным вкусам и предпочтениям. |
Как видим API ChatGPT прост в использовании, но имейте в виду, что ответы, которые он дает, не всегда на 100% верны.
Прикручиваем API ChatGPT к телеграм боту
Исходники телеграм бота выложил в гитхаб репозиторий.
Для создания телеграм бота нам понадобится токен, который мы можем получить у BotFather. Там же можно задать название бота, изображение и описание.
Клонируем репозиторий:
1 2 3 4 |
git clone git@github.com:ViktorAllayarov/ChatGPT_telegram_bot.git # переходим в папку с проектом cd ChatGPT_telegram_bot |
Далее создаем локальное виртуальное окружение:
1 2 3 |
python3 -m venv env # или py -3.10 -m venv env |
Переходим в виртуальное окружение и обновляем пакетный менеджер pip:
1 2 3 4 5 6 7 8 9 10 11 |
# для 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
:
1 2 3 4 5 6 7 8 |
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
(или оба файла) и задать там необходимые переменные
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# файл .env.prod # API ключ CHATGPT API_KEY_CHATGPT= # токен телеграм бота TG_BOT_TOKEN= # ссылка на БД SQLite3, # файл базы создастся в корне проекта # при первом запросе в боте # база записывает всех пользователей, которые пользуются ботом DB_LINK=db.db |
Теперь можно запустить проект:
1 |
python main.py |
Надеюсь, что эта статья была интересной и полезной, спасибо, что посетили ее на этом сайте.