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

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

Razilator

В данной статье мы будем описывать, как можно использовать сервис искусственного интеллекта Bing AI для создания бота в Telegram. Мы будем использовать библиотеку aiogram на Python, которая позволяет создавать ботов для Telegram.

С ее помощью мы настроим обработчик сообщений и добавим функцию для получения ответа от Bing AI.

В этом гайде мы должны использовать Edge браузер для получения данных от Bing AI.

Создаем проект на Python

Нам необходимо создать проект с виртуальным окружением, поэтому создаем в любой удобной для Вас IDE.

Я воспользуюсь VSCODE. Создам папку проекта и открою ее в VSCODE. Из под Windows:

Создание виртуального окружения: py -m venv venv, активируем его с помощью команды: venv/Scripts/activate

Если из под Linux:

Создание виртуального окружения: python3 -m venv venv, активация: source venv/bin/activate.

Далее создадим файл main.py и рядом папку data, в которой создадим файл cookies.json.

Структура получится следующая
Структура получится следующая

Получение cookies с BingAI (только с браузера Edge)

Первым, что необходимо сделать, это получить cookies с Bing AI чата. Для этого скачиваем расширение Cookie Editor для браузера.

Получаем Cookie Editor для браузера
Получаем Cookie Editor для браузера

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

Нажимаем на наше расширение, вы увидите различные данные с сайта Microsoft и Bing, в расширении нажимайте кнопку export.

Нажимаем кнопку export
Нажимаем кнопку export

Далее эти куки сохраняется в буфере обмена (т.е копируются), и их нужно вставить в файл cookies.json который мы создали ранее.

Получиться должно вот так
Получиться должно вот так

Установка модулей aiogram и EdgeGPT

Далее нам необходимо установить модули для телеграм бота и Bing AI, для этого находясь в активированном виртуальном окружении в терминале прописываем следующую команду: pip install EdgeGPT aiogram.

Результат установки:

Терминал
Collecting EdgeGPT
  Using cached EdgeGPT-0.1.22.1-py3-none-any.whl (9.9 kB)
Collecting aiogram
  Using cached aiogram-2.25.1-py3-none-any.whl (203 kB)
Collecting httpx
  Using cached httpx-0.23.3-py3-none-any.whl (71 kB)
Collecting websockets
  Using cached websockets-11.0.1-cp311-cp311-win_amd64.whl (124 kB)
Collecting rich
  Using cached rich-13.3.3-py3-none-any.whl (238 kB)
Collecting certifi
  Using cached certifi-2022.12.7-py3-none-any.whl (155 kB)
Collecting prompt-toolkit
  Using cached prompt_toolkit-3.0.38-py3-none-any.whl (385 kB)
Collecting regex
  Using cached regex-2023.3.23-cp311-cp311-win_amd64.whl (267 kB)
Collecting requests
  Using cached requests-2.28.2-py3-none-any.whl (62 kB)
Collecting BingImageCreator>=0.1.1.1
  Using cached BingImageCreator-0.1.2.1-py3-none-any.whl (6.4 kB)
Collecting aiohttp<3.9.0,>=3.8.0
  Using cached aiohttp-3.8.4-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 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<4.0,>=2.0
  Using cached charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl (96 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-2023.3-py2.py3-none-any.whl (502 kB)
Collecting httpcore<0.17.0,>=0.15.0
  Using cached httpcore-0.16.3-py3-none-any.whl (69 kB)
Collecting rfc3986[idna2008]<2,>=1.3
  Using cached rfc3986-1.5.0-py2.py3-none-any.whl (31 kB)
Collecting sniffio
  Using cached sniffio-1.3.0-py3-none-any.whl (10 kB)
Collecting wcwidth
  Using cached wcwidth-0.2.6-py2.py3-none-any.whl (29 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.15-py2.py3-none-any.whl (140 kB)
Collecting markdown-it-py<3.0.0,>=2.2.0
  Using cached markdown_it_py-2.2.0-py3-none-any.whl (84 kB)
Collecting pygments<3.0.0,>=2.13.0
  Using cached Pygments-2.14.0-py3-none-any.whl (1.1 MB)
Collecting h11<0.15,>=0.13
  Using cached h11-0.14.0-py3-none-any.whl (58 kB)
Collecting anyio<5.0,>=3.0
  Using cached anyio-3.6.2-py3-none-any.whl (80 kB)
Collecting mdurl~=0.1
  Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Installing collected packages: wcwidth, rfc3986, pytz, websockets, urllib3, sniffio, regex, pygments, prompt-toolkit, multidict, mdurl, magic-filter, idna, h11, frozenlist, charset-normalizer, certifi, Babel, attrs, async-timeout, yarl, requests, markdown-it-py, anyio, aiosignal, rich, httpcore, BingImageCreator, aiohttp, httpx, aiogram, EdgeGPT
Successfully installed Babel-2.9.1 BingImageCreator-0.1.2.1 EdgeGPT-0.1.22.1 aiogram-2.25.1 aiohttp-3.8.4 aiosignal-1.3.1 anyio-3.6.2 async-timeout-4.0.2 attrs-22.2.0 certifi-2022.12.7 charset-normalizer-3.1.0 frozenlist-1.3.3 h11-0.14.0 httpcore-0.16.3 httpx-0.23.3 idna-3.4 magic-filter-1.0.9 markdown-it-py-2.2.0 mdurl-0.1.2 multidict-6.0.4 prompt-toolkit-3.0.38 pygments-2.14.0 pytz-2023.3 regex-2023.3.23 requests-2.28.2 rfc3986-1.5.0 rich-13.3.3 sniffio-1.3.0 urllib3-1.26.15 wcwidth-0.2.6 websockets-11.0.1 yarl-1.8.2

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

Пишем код для работы нейросети Bing AI в Telegram

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

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

telegram_token = 'Ваш токен в телеграмм'


async def bing_chat(prompt):
    # Функция получения ответа от BingAI с использованием cookies.
    bing_ai = await Chatbot.create(cookie_path='./data/cookies.json')
    response_dict = await bing_ai.ask(prompt)
    return response_dict['item']['messages'][1]['text'].replace("[^\\d^]", "")


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


@dp.message_handler(lambda message: message.from_user.id != bot.id)
async def send(message: types.Message):
    try:
        prompt = message.text
        if not prompt:
            await message.answer('Вы задали пустой запрос.')
        else:
            await message.answer('Ожидание ответа на ваш запрос...')
            await message.answer_chat_action('typing')
            bot_response = await bing_chat(prompt=prompt)
            await message.answer(bot_response, parse_mode='markdown')
    except Exception as ex:
        await message.answer(f'BingAI не хочет общаться с Вами, ошибка: {ex}. Попробуйте снова.')


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

Этот код использует библиотеку aiogram для создания Telegram бота на Python, который может взаимодействовать с сервисом искусственного интеллекта Bing AI.

Импортируются модули Bot, types, Dispatcher и executor из библиотеки aiogram, а также модуль Chatbot из библиотеки EdgeGPT.

Переменная telegram_token хранит токен, который получает пользователь, создавший бота в Telegram.

Функция bing_chat используется для получения ответа от сервиса Bing AI. Она получает на вход prompt, то есть запрос пользователя, и возвращает ответ, полученный от Bing AI, удаляя из него специальные символы [^\\d^].

Далее создаются объекты Bot и Dispatcher, используя токен, который был сохранен в telegram_token.

Обработчик сообщений устанавливается на все сообщения, кроме тех, которые отправлены самим ботом. Если пользователь отправил пустой запрос, то бот ответит "Вы задали пустой запрос.". В противном случае, бот отправит "Ожидание ответа на ваш запрос...", затем вызовет функцию bing_chat для получения ответа от Bing AI и отправит полученный ответ пользователю, также пользователь увидит активность от бота ввиде написания текста.

Если возникнет какая-либо ошибка, бот ответит "BingAI не хочет общаться с Вами."

В конце запускается executor с параметрами dp и skip_updates=True. executor запускает цикл для обработки новых сообщений, пока бот не будет остановлен.

Проверка работы бота

Запускаем бота с помощью команды py main.py, и пробуем с ним общаться.

Скриншот общения с Bing AI
Скриншот общения с Bing AI
Скриншот общения с Bing AI
Скриншот общения с Bing AI
Скриншот общения с Bing AI от 21.05.2023
Скриншот общения с Bing AI от 21.05.2023

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

;