- Пишем чат бота для ВКонтакте на python с помощью longpoll
- Ну прям совсем для новичков
- Как оно работает?
- Техническая реализация
- Ссылки на примеры и документацию
- Пишем Телеграм бота на Python c использованием API ChatGPT
- Установка пакета
- Выбираем обученную модель
- Проверяем модель
- Оборачиваем код в функцию
- Прикручиваем API ChatGPT к телеграм боту
Пишем чат бота для ВКонтакте на python с помощью longpoll
Сейчас боты стали обыденностью и находятся на каждом шагу, но если тебе нужен свой бот в социальной сети вконтакте, то это легко реализовать.
Ну прям совсем для новичков
Как оно работает?
Long Polling — это технология, которая позволяет получать данные о новых событиях с помощью «длинных запросов». Сервер получает запрос, но отправляет ответ на него не сразу, а лишь тогда, когда произойдёт какое-либо событие (например, придёт новое сообщение), либо истечёт заданное время ожидания.
Говоря русским языком, мы отправляем на сервер запрос, а он в свою очередь тыкает вконтакте если там произойдёт что либо, например, нам придёт сообщение он бежит и говорит об этом нам. От этого и будем плясать.
Техническая реализация
Для начала нам нужно доказать вконтакту что мы — это мы, а не кто-либо ещё. Делается это очень просто.
import vk_api import requests session = requests.Session() login, password = 'Ваш логин, email или телефон', 'Ваш пароль' vk_session = vk_api.VkApi(login, password) try: vk_session.auth(token_only=True) except vk_api.AuthError as error_msg: print(error_msg) return
Замечание, ребята из ВК рекомендуют использовать в качестве логина номер телефона т.к. иначе можно нарваться на проверку антиробот, ту самую где тебя просят ввести недостающие цифры из номера телефона.
Если бот будет сидеть в группе то авторизация выглядит по другому.
import requests import vk_api vk_session = vk_api.VkApi(token='токен с доступом к сообщениям и фото')
— Что такое токен?
— Такая штука из циферок и буковок которую нужно получить в настройках группы. Для этого достаточно открыть раздел «Управление сообществом» («Управление страницей», если у Вас публичная страница), выбрать вкладку «Работа с API» и нажать «Создать ключ доступа».
from vk_api.longpoll import VkLongPoll, VkEventType longpoll = VkLongPoll(vk_session) vk = vk_session.get_api() for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #Слушаем longpoll, если пришло сообщение то: if event.text == 'Первый вариант фразы' or event.text == 'Второй вариант фразы': #Если написали заданную фразу if event.from_user: #Если написали в ЛС vk.messages.send( #Отправляем сообщение user_id=event.user_id, message='Ваш текст' ) elif event.from_chat: #Если написали в Беседе vk.messages.send( #Отправляем собщение chat_id=event.chat_id, message='Ваш текст' )
В сообщениях может быть не только заданный вами текст. Например:
import datetime vk.messages.send( user_id=event.user_id, message='Московское время: ' + str(now.strftime("%H:%M")) )
А ещё можно прикреплять картинки.
attachments = [] from vk_api import VkUpload upload = VkUpload(vk_session) image_url = 'Ссылка на картинку' image = session.get(image_url, stream=True) photo = upload.photo_messages(photos=image.raw)[0] attachments.append( 'photo<>_<>'.format(photo['owner_id'], photo['id']) ) vk.messages.send( user_id=event.user_id, attachment=','.join(attachments), message='Ваш текст' )
Можно придумать ещё много всего интересного, но тут подумайте сами, а я лишь скажу что: ссылки можно делить на части. Например:
image_url = 'http://сайт.com/uploads/' + event.text + '.png'
и никто не запретил нам получать ответ от пользователя на примере Википедии:
import wikipedia #Модуль Википедии wikipedia.set_lang("RU") if event.text == 'Википедия' or event.text == 'Вики' or event.text == 'википедия' or event.text == 'вики' or event.text == 'Wikipedia' or event.text == 'wikipedia' or event.text == 'Wiki' or event.text == 'wiki': #если нам пришло сообщение с текстом Википедия или Вики или . или wiki if event.from_user: #Если написали в KC vk.messages.send( user_id=event.user_id, message='Введите запрос' #Пишем "Введите запрос" ) elif event.from_chat: #Если написали в беседе vk.messages.send( chat_id=event.chat_id, message='Введите запрос' #Пишем "Введите запрос" ) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #Пинаем longpoll if event.from_user: vk.messages.send( #Если написали в ЛС user_id=event.user_id, message='Вот что я нашёл: \n' + str(wikipedia.summary(event.text)) #Пишем "Вот что я нашёл" И то что вернёт нам api Wikipedia по запросу текста сообщения ) break #выходим из цикла elif event.from_chat: #Если написали в беседе vk.messages.send( chat_id=event.chat_id, message='Вот что я нашёл: \n' + str(wikipedia.summary(event.text)) #Пишем "Вот что я нашёл" И то что вернёт нам api Wikipedia по запросу текста сообщения ) break #выходим из цикла continue
Ссылки на примеры и документацию
На этом я с вами попрощаюсь. Хорошего кодинга.
Пишем Телеграм бота на Python c использованием API ChatGPT
Данная статья является вольным переводом статьи на medium.com, плюсом от себя реализация API ChatGPT в Телеграм боте.
Тема как написать телеграм бота уже довольно тривиальная, статей в интернете полно, поэтому тут я затронул это дело не так глубоко, ниже выложу ссылки на исходный код, разобраться будет не сложно. Основным мотивом написания статьи послужил тот факт, что ChatGPT не доступен в ряде стран, в том числе в России, и хотелось сделать его по настоящему общедоступным.
Готовый/работающий телеграм бот ChatGPT доступен тут.
На вопрос «Кто ты?» сама нейросеть отвечает примерно следующее «Я — ChatGPT, крупнейшая языковая модель, созданная OpenAI. Я разработана для обработки естественного языка и могу помочь вам ответить на вопросы, обсудить темы или предоставить информацию на различные темы».
Другими словами, по моему субъективному мнению нейросеть затачивается в первую очередь для поддержки разговора, в идеале показать, что там сидит живой человек, а не обученная AI модель. Поэтому когда будете играть с чатом не забывайте об этом, не следует ожидать от чата достоверных и точных данных, или глубокого смысла, сейчас она не об этом, пока еще не об этом.
Итак, как получить доступ к сервису ChatGPT из запрещенных стран написано в статье на хабре, хочу обратить ваше внимание, что будет необходимо сперва создать gmail почту с подтверждением по СМС на иностранный номер телефона, затем при регистрации на сайте ChatGPT также подтвердить номер телефона по СМС, и эти два номера телефона совсем не обязательно должны быть одинаковыми, поэтому сервисы по продаже номеров мобильных телефонов на одну смс вполне годятся.
Установка пакета
Сперва устанавливаем необходимый пакет в python:
# Install openai pip install openai # Import Library import openai
Подробнее об API OpenAI можно прочитать в документации:
Сгенерировать API ключ можно после регистрации на сайте по адресу:
# Предоставляем ключ API openai.api_key = "Your_Key"
Выбираем обученную модель
Выбираем обученную модель, а именно “text-davinci-003”, она является самой мощной моделью GPT-3 и обучалась на данных до июня 2021 года. Узнать больше о различных моделях Вы можете здесь:
# Выбираем обученную модель 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
Теперь можно запустить проект:
Надеюсь, что эта статья была интересной и полезной, спасибо, что посетили ее на этом сайте.