Бот на Python, использующий ChatGPT для Telegram [Гайд]
В этой статье мы реализуем бота, работающего на базе ChatGPT, с помощью языка Python и библиотеки aiogram. А также проверим его в работе!
Если вы хотите выразить благодарность автору сайта, статей и курса по Django, вы можете сделать это по ссылке ниже:
Примечание: у вас уже должен быть зарегистрирован аккаунт в ChatGPT - OpenAI, если вы этого ещё не сделали, можете ознакомиться с этой статьёй
Дополнительно (может быть полезно): доступен гайд для запуска данного telegram-бота с ChatGPT на VPS сервере, используя Docker контейнер.
Получаем API токен для ChatGPT
- Нам необходимо получить токен для API, переходим на сайт: platform.openai.com
На сайте нажимаем Personal, и выбираем View API keys:
Далее нажимаем Create new secret key
Получаем наш ключ для ChatGPT API.
Опционально: вы можете изучить документацию и другие моменты в управлении ChatGPT.
Получаем токен для бота в телеграмм
- Теперь нам необходимо создать бота в телеграмме, делается это через @BotFather, начинаем диалог и вводим команду
/newbot
, выбираем имя, обязательно чтоб в имени присутствовало слово: Bot, или через подчеркивание _bot
Получаем ключ для доступа к API, на скриншоте он закрашен. Сохраняем в удобное место.
Создаем бота на Python
- Открываем папку, где хотим хранить проект с помощью 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 добавляем следующий фрагмент кода:
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.
Теперь напишем нашему боту
Отлично. Надеюсь у вас все получилось! Иногда может случится такое, что сервер будет выдавать ошибку, к сожалению, это просто нагружен сам сервер нейросети.
Плюсы способа с телеграм-ботом:
- Вы можете обойтись без VPN.
- Всегда в легкой доступности. Минусы:
- Ограниченное кол-во на использование, OpenAI выдает вам 30$ как проверка. На самом деле вы можете долго им пользоваться. Тарификация маленькая и если будет желание, можете купить подписку. Это касается только использования ChatGPT через API.
- Общение не в рамках контекста. Нейросеть просто не запоминает ваши предудыщие сообщения через API, как это реализовано на самом сайте с нейросетью.