Я не обладаю природной грамотностью, и мне бывает мучительно стыдно за то, что я пишу. Для приведения текстов в минимально читабельный вид я использую специальные сервисы, которые проверяют орфографию и пунктуацию. И сегодня мы попробуем не просто использовать такой сервис, а написать свой. В этой статье мы напишем и развернем на удаленном сервере Telegram бота, который проверяет грамматику.
Бот будет проверять текст на грамматические ошибки, исправлять их и даст рекомендации по грамотному написанию.
Саму проверку грамматики осуществляет GPT-4o, что нам даст возможность легкой корректировки и адаптации решения к реальным кейсам в случае необходимости.
Функциональность бота проверки орфографии
Бот проверяет и исправляет текст с грамматическими ошибками следующим образом.
После написания кода бота проверки орфографии и пунктуации мы развернем его в облаке Amvera, так как оно из коробки поддерживает бесплатное встроенное проксирование до API OpenAI, дает возможность развертывания проектов через загрузку файлов в интерфейсе и начисляет при регистрации бонусный баланс для бесплатных тестов.
Исходный код бота доступен в репозитории GitHub
Приступим.
Создание бота проверки правописания
Зарегистрируем бота в @BotFather и получим токен по данному примеру:
Успешно! Мы создали бота, сохраним его токен.
Написание бота с использованием библиотеки aiogram 3
Установим локально все необходимые библиотеки. Хотя можно использовать библиотеку telebot, aiogram является более подходящим вариантом для новичков благодаря своей простоте.
pip install aiogram nest_asyncio g4f
Переходим в командную строку и прописываем данную команду выше.
Теперь можно приступить к написанию кода
-
Создаём файл main.py
-
Импортируем необходимые библиотеки
import logging # Импортируем модуль для ведения логов import asyncio # Импортируем модуль для работы с асинхронным кодом import nest_asyncio # Импортируем библиотеку, позволяющую использовать asyncio в уже работающих циклах событий import os # Импортируем модуль для работы с операционной системой (например, для доступа к переменным окружения) from g4f.client import Client # Импортируем класс Client из библиотеки g4f для взаимодействия с API from aiogram import Bot, Dispatcher, types # Импортируем основные классы aiogram для работы с Telegram Bot API from aiogram.filters import CommandStart # Импортируем фильтр для обработки команды /start from aiogram.types import Message # Импортируем класс Message для работы с сообщениями
Чтобы развернуть нашего бота проверки грамотности текста на удаленном сервере, нам понадобится написать файл requirements.txt, куда мы запишем все наши зависимости.
Выглядеть requirements.txt будет так
nest-asyncio==1.6.0 g4f==0.4.5.3 aiogram==3.17.0
3. Создаём экземпляр бота
# Настраиваем уровень логирования на INFO logging.basicConfig(level=logging.INFO) # Создаем экземпляр бота с токеном, который берется из переменных окружения bot = Bot(token=os.environ["TOKEN"]) # Создаем диспетчер для обработки входящих сообщений dp = Dispatcher() # Применяем nest_asyncio для работы с асинхронным кодом в Jupyter или других средах, где уже запущен цикл событий nest_asyncio.apply() # Основная асинхронная функция для запуска бота async def main(): # Запускаем опрос (polling) для получения обновлений от Telegram await dp.start_polling(bot) # Проверяем, что этот файл запускается как основная программа if __name__ == "__main__": # Запускаем основную функцию в асинхронном режиме asyncio.run(main())
Создадим команды бота для проверки грамотности текста
-
Команда старта
# Обрабатываем команду /start @dp.message(CommandStart()) async def cmd_start(message: Message): # Формируем текст приветствия, используя имя пользователя text = f"Привет, @{message.from_user.username}! Напиши мне текст, а я его подправлю." # Отправляем ответ пользователю с текстом приветствия в формате Markdown await message.answer(text, parse_mode="Markdown")
2. Далее напишем саму функцию, которая отвечает за проверку грамматических и орфографических ошибок
# Обрабатываем все остальные сообщения @dp.message() async def handle_message(message: Message): # Создаем экземпляр клиента для работы с API g4f client = Client() # Отправляем запрос на создание завершения чата с моделью gpt-4o response = client.chat.completions.create( model="gpt-4o", # Указываем модель, которую будем использовать messages=[ # Передаем список сообщений для контекста {"role": "user", "content": f"Привет! Проверь мой текст на наличие грамматических ошибок: \"{message.text}\""}, {"role": "system", "content": "Отвечай таким шаблоном и никак иначе: \"Исправленные слова:\n\nПравила, которые стоит вам прочесть:\", если ты не нашёл ошибки, то скажи об этом."} ] ) # Отправляем пользователю ответ от модели await message.answer(response.choices[0].message.content)
По ссылке вы можете найти исходный код бота проверки орфографии и пунктуации.
Подготовка к деплою
Деплой мы произведем в облаке Amvera, которое поддерживает бесплатное встроенное проксирование до API OpenAI, что нужно нам для работы GPT-4o и возможность развертывания через загрузку файлов в интерфейсе (или через git push). Помимо этого, при регистрации будет начислен бонусный баланс в 111 руб., который позволит пользоваться сервисом бесплатно на время тестов.
Создадим конфигурационный файл amvera.yaml
Используем генератор для создания этого файла или зададим поля в разделе Конфигурация.
Выбираем окружение Python. Далее вводим версию Python, в нашем случае 3.10. Указываем путь к файлу с зависимостями, requirements.txt
Вводим имя нашего основного файла, в моём случае main.py
Важно: если вы используете в проекте SQLite, обязательно сохраните ее в постоянное хранилище /data и пропишите в коде к ней пути в виде /data/имя_файла. Это позволит не потерять данные при пересборке.
Вот так выглядит файл конфигурации:
meta: environment: python toolchain: name: pip version: 3.10 build: requirementsPath: requirements.txt run: scriptName: main.py persistenceMount: /data containerPort: 80
Деплой через интерфейс
-
Нажимаем на кнопку создать проект.
-
Выбираем тип сервиса — приложение, вводим название проекта и выбираем тарифный план.
-
Нажимаем далее.
-
Выбираем файлы которые нужно закинуть в проект и перемещаем их в окно загрузки.

Нажимаем на кнопку далее. У нас появится окно загрузки файлов, куда их надо перетянуть. Важно не загружать папку venv. Система сама создаст ее на основе файла с зависимостями.

Здесь ничего не требуется делать, так как мы загрузили файл amvera.yaml, и все настройки происходят автоматически. Просто нажмите «Завершить». Начнется сборка, но она завершится ошибкой, так как мы не добавили токен нашего бота в секреты.
Теперь нам необходимо добавить секрет — токен нашего бота. В методе bot.run() мы указали просто слово TOKEN, но теперь нужно создать переменную как секрет. Для этого переходим на вкладку «Переменные» в проекте и нажимаем «Создать секрет». В поле «Название» вводим переменную TOKEN, а в поле «Значение» — сам токен.

После добавления токена перезапустим проект и получим вот такой статус.
Рассмотрим альтернативный способ — деплой через Git
Механика доставки кода через git push amvera master даст возможность обновлять наш проект всего тремя командами в терминале, без необходимости заходить на сайт облачного сервиса, что значительно удобнее.
-
Создаём папку проекта и помещаем в неё все файлы.
-
Открываем командную строку и переходим в нашу папку с помощью команды cd «путь к папке». После этого инициализируем репозиторий, выполнив команду.
git init
Далее заходим в Amvera и создаём новый проект.
Теперь мы выбираем метод «Через Git».

Теперь нам нужно подключиться к существующему репозиторию, для этого копируем команду ниже и вставляем в командную строку.

Потребуется ввести логин и пароль от сервиса Amvera. При этом терминал при вводе пароля не будет его отображать. Это сделано для безопасности.
После чего вводим команды для добавления файлов и создания коммита:
git add .
Не забываем про точку в конце команды, она нужна.
git commit -m "initial commit"
Вместо «initial commit» пишем любое описание изменений, но это на ваш вкус.
Запушим все файлы и сборка начнется автоматически. Для этого вводим команду:
git push amvera master
Если все выполнено корректно, после сборки начнётся процесс запуска бота проверки грамматики. В случае возникновения ошибки рекомендуется изучить Лог сборки и Лог приложения, а также ознакомиться с распространёнными ошибками в документации сервиса.
Результат
Мы написали Telegram бота, который проверяет орфографию и подсказывает, есть ли в тексте ошибки и как их исправить. Для этого мы задействовали API OpenAI, а именно сеть GPT-4o, которая позволяет реализовать решение с высоким потенциалом для изменений и дальнейшего совершенствования приложения.
ссылка на оригинал статьи https://habr.com/ru/articles/882728/
Добавить комментарий