Бот на Python, использующий ChatGPT для Telegram [Гайд]
Нейросети

Бот на Python, использующий ChatGPT для Telegram [Гайд]

Razilator

В этой статье мы реализуем бота, работающего на базе ChatGPT, с помощью языка Python и библиотеки aiogram. А также проверим его в работе!

Примечание: у вас уже должен быть зарегистрирован аккаунт в ChatGPT - OpenAI, если вы этого ещё не сделали, можете ознакомиться с этой статьёй

Дополнительно (может быть полезно): доступен гайд для запуска данного telegram-бота с ChatGPT на VPS сервере, используя Docker контейнер.

Получаем API токен для ChatGPT

  1. Нам необходимо получить токен для API, переходим на сайт: platform.openai.com

На сайте нажимаем Personal, и выбираем View API keys:

Personal -> View API keys
Personal -> View API keys

Далее нажимаем Create new secret key

Нажимаем Create new secret key
Нажимаем Create new secret key

Получаем наш ключ для ChatGPT API.

Сохраняем куда-нибудь в блокнот, потом его вставим в main.py
Сохраняем куда-нибудь в блокнот, потом его вставим в main.py

Опционально: вы можете изучить документацию и другие моменты в управлении ChatGPT.

Получаем токен для бота в телеграмм

  1. Теперь нам необходимо создать бота в телеграмме, делается это через @BotFather, начинаем диалог и вводим команду /newbot, выбираем имя, обязательно чтоб в имени присутствовало слово: Bot, или через подчеркивание _bot
Пример команды
Пример команды

Получаем ключ для доступа к API, на скриншоте он закрашен. Сохраняем в удобное место.

Создаем бота на Python

  1. Открываем папку, где хотим хранить проект с помощью IDE редактора, например VS CODE, открываем терминал, пишем команду cmd и создаем виртуальное окружение с помощью команды py -m venv venv. На компьютере у вас должен быть установлен Python. Скачать его можно на официальном сайте.
Создание виртуального окружения
Создание виртуального окружения

Далее активируем виртуальное окружение следующей командой: cd venv/scripts && activate и возвращаемся в корневой каталог с помощью команды cd ../../, в терминале у нас появится, что вирутальное окружение активировано, в скобках (venv).

Активировали виртуальное окружение
Активировали виртуальное окружение

Далее создаем файл рядом с venv под названием main.py.

Файл для запуска бота
Файл для запуска бота

Теперь нам необходимо установить два пакета с помощью терминала: pip install openai aiogram

Результат выполнения команды:

Терминал
(venv) C:\Users\Razilator\Desktop\Projects\ProgHunterBot>pip install openai aiogram
Collecting openai
  Downloading openai-0.26.5.tar.gz (55 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 55.5/55.5 kB 481.5 kB/s eta 0:00:00
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Collecting aiogram
  Using cached aiogram-2.25.1-py3-none-any.whl (203 kB)
Collecting requests>=2.20
  Using cached requests-2.28.2-py3-none-any.whl (62 kB)
Collecting tqdm
  Using cached tqdm-4.64.1-py2.py3-none-any.whl (78 kB)
Collecting aiohttp
  Using cached aiohttp-3.8.3-cp311-cp311-win_amd64.whl (317 kB)
Collecting Babel<2.10.0,>=2.9.1
  Using cached Babel-2.9.1-py2.py3-none-any.whl (8.8 MB)
Collecting certifi>=2021.10.8
  Using cached certifi-2022.12.7-py3-none-any.whl (155 kB)
Collecting magic-filter>=1.0.9
  Using cached magic_filter-1.0.9-py3-none-any.whl (9.3 kB)
Collecting attrs>=17.3.0
  Using cached attrs-22.2.0-py3-none-any.whl (60 kB)
Collecting charset-normalizer<3.0,>=2.0
  Using cached charset_normalizer-2.1.1-py3-none-any.whl (39 kB)
Collecting multidict<7.0,>=4.5
  Using cached multidict-6.0.4-cp311-cp311-win_amd64.whl (28 kB)
Collecting async-timeout<5.0,>=4.0.0a3
  Using cached async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
Collecting yarl<2.0,>=1.0
  Using cached yarl-1.8.2-cp311-cp311-win_amd64.whl (55 kB)
Collecting frozenlist>=1.1.1
  Using cached frozenlist-1.3.3-cp311-cp311-win_amd64.whl (32 kB)
Collecting aiosignal>=1.1.2
  Using cached aiosignal-1.3.1-py3-none-any.whl (7.6 kB)
Collecting pytz>=2015.7
  Using cached pytz-2022.7.1-py2.py3-none-any.whl (499 kB)
Collecting idna<4,>=2.5
  Using cached idna-3.4-py3-none-any.whl (61 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.14-py2.py3-none-any.whl (140 kB)
Collecting colorama
  Using cached colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Building wheels for collected packages: openai
  Building wheel for openai (pyproject.toml) ... done
  Created wheel for openai: filename=openai-0.26.5-py3-none-any.whl size=67643 sha256=37dc116c709234495442341b7ee6aa3dd3bc4106aaff6db62e06b270896d5d7e
  Stored in directory: c:\users\razilator\appdata\local\pip\cache\wheels\ea\6c\ec\084e3e339332a539336f4b1c6990779c508ee73a760b2697e6
Successfully built openai
Installing collected packages: pytz, urllib3, multidict, magic-filter, idna, frozenlist, colorama, charset-normalizer, certifi, Babel, attrs, async-timeout, yarl, tqdm, requests, aiosignal, aiohttp, openai, aiogram
Successfully installed Babel-2.9.1 aiogram-2.25.1 aiohttp-3.8.3 aiosignal-1.3.1 async-timeout-4.0.2 attrs-22.2.0 certifi-2022.12.7 charset-normalizer-2.1.1 colorama-0.4.6 frozenlist-1.3.3 idna-3.4 magic-filter-1.0.9 multidict-6.0.4 openai-0.26.5 pytz-2022.7.1 requests-2.28.2 tqdm-4.64.1 urllib3-1.26.14 yarl-1.8.2

[notice] A new release of pip available: 22.3 -> 23.0
[notice] To update, run: python.exe -m pip install --upgrade pip

Теперь в наш файл main.py добавляем следующий фрагмент кода:

main.py
import openai
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

telegram_token = "Токен от телеграмм бота"
openai.api_key = "Токен от OpenAI ChatGPT"

bot = Bot(telegram_token)
dp = Dispatcher(bot)

@dp.message_handler()
async def send(message: types.Message):
    response = openai.Completion.create(
        model="text-davinci-003",
        prompt=message.text,
        temperature=0.9,
        max_tokens=2000,
        top_p=1.0,
        frequency_penalty=0.0,
        presence_penalty=0.6,
    )
    await message.answer(response['choices'][0]['text'])

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

В примере выше вы должны вставить токены, которые сохранили соответственно для телеграмм бота и для OpenAI ChatGPT.

Это самые стандартные настройки для запуска и работы бота и стандартные настройки для нейросети, чтоб он вам отвечал непосредственно от нейросети ChatGPT в телеграмме. В коде я передаю ответ от нейросети в виде пришедшего ответа по API.

Запускам бота, проверяем работу

Теперь нам необходимо запустить бота, для этого в терминале напишите py main.py и если все сделали правильно, результат будет следующим:

Терминал
(venv) C:\Users\Razilator\Desktop\Projects\ProgHunterBot>py main.py
Updates were skipped successfully.

Теперь напишем нашему боту

Пример работы нашего бота с ChatGPT
Пример работы нашего бота с ChatGPT

Отлично. Надеюсь у вас все получилось! Иногда может случится такое, что сервер будет выдавать ошибку, к сожалению, это просто нагружен сам сервер нейросети.

Плюсы способа с телеграм-ботом:

  • Вы можете обойтись без VPN.
  • Всегда в легкой доступности. Минусы:
  • Ограниченное кол-во на использование, OpenAI выдает вам 30$ как проверка. На самом деле вы можете долго им пользоваться. Тарификация маленькая и если будет желание, можете купить подписку. Это касается только использования ChatGPT через API.
  • Общение не в рамках контекста. Нейросеть просто не запоминает ваши предудыщие сообщения через API, как это реализовано на самом сайте с нейросетью.
;