Интеграция модели GPT-4 Omni в телеграм бота на Python

13 мая 2024 года, OpenAI официально представила новую модель. По словам самих OpenAI, Omni соответствует производительности GPT-4 Turbo для текста на английском языке и кода, со значительным улучшением для текста на языках, отличных от английского, при этом он намного быстрее и на 50% дешевле в API.

Преимущества модели в том, что она умеет работать со всем контентом (текстом, звуком и изображениями) и знает 50 языков.

И сегодня мы интегрируем эту модель в небольшого бота на Python и задеплоим его на облачный сервис Amvera. В тг-канале я постоянно выкладываю новости в сфере ИИ и технологий

Почему Amvera:

  • Это наш блог. Странно, если мы будем разворачивать у конкурентов)
  • Полное бесплатное проксирование проектов до OpenAI. Больше не требуется использовать свой прокси в коде!
  • Простая подготовка проекта в “два клика” с помощью yaml инструкции.
  • Удобная доставка файлов и обновлений через git буквально за 3 команды.
  • После регистрации и подтверждения номера телефона начисляется бесплатный баланс в размере 111 рублей!

План проекта (как все будет работать?)

В проекте будем использовать следующие библиотеки:

  • aiogram 3.10.0 - асинхронная библиотека для взаимодействия с API Telegram
  • openai - официальная библиотека для работы с OpenAI REST API, работающая с httpx

Это будет самый обычный GPT-бот, который будет генерировать контент в ответ на сообщение. Пока что ограничимся текстовыми сообщениями, но после вы можете самостоятельно добавить работу с изображениями и аудио.

Создание бота и ключа OpenAI

Начнем с создания бота.

Для этого воспользуемся ботом @BotFather.

  • Пишем команду /newbot
  • Придумываем ему имя и юзернейм
  • В ответ, если все прошло успешно, получаем сообщение о создании бота и сохраняем сгенерировавшийся токен.
Интеграция модели GPT-4 Omni в телеграм бота на Python

Внимание! С помощью токена можно получить полный контроль над ботом, никому не присылайте его!

Как получить ключ OpenAI?

Для начала вам нужно иметь аккаунт в OpenAI с подключенным биллингом. Для создания вам понадобится любой зарубежный номер. Можно воспользоваться любым сервисом для получения SMS подтверждения.

После переходим на страницу ключей и создаем ключ с любым названием кнопкой сверху:

Интеграция модели GPT-4 Omni в телеграм бота на Python

Все! Теперь можно переходить к написанию кода.

Код бота

Структура проекта будет выглядеть так:

  • Папка bot с файлами handlers.py для обработчиков aiogram и gpt.py для генерации ответа нейросети.
  • Файл main.py с инициализацией бота
  • Также файлы, требуемые для деплоя (их нет на скрине)
Интеграция модели GPT-4 Omni в телеграм бота на Python

В main.py, как и сказано выше, мы инициализируем и запускаем бота с подключенным логированием:

import os

import logging

import asyncio

from aiogram import Bot, Dispatcher

from aiogram.types import Message

from aiogram.filters import CommandStart

from bot.handlers import router

bot = Bot(token=os.getenv("TOKEN"))

dp = Dispatcher()

logging.basicConfig(level=logging.INFO)

@dp.message(CommandStart())

async def start_cmd(message: Message):

await message.reply("Добро пожаловать в бота!\nНапишите свой вопрос и бот с помощью GPT4 Omni сгенерирует ответ!")

async def main():

dp.include_router(router)

await bot.delete_webhook(drop_pending_updates=True)

await dp.start_polling(bot)

if __name__ == "__main__":

asyncio.run(main())

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

Обязательно импортируем роутер из файла handlers.py в папке bot. Вот, кстати, содержимое самого файла:

from aiogram import Router, F

from aiogram.types import Message

from aiogram.filters import CommandStart

from aiogram.fsm.state import State, StatesGroup

from aiogram.fsm.context import FSMContext

from bot.gpt import gpt_request

router = Router()

class StateGpt(StatesGroup):

text = State()

@router.message(StateGpt.text)

async def state_answer(message: Message):

await message.reply("Пожалуйста, дождитесь ответа!")

@router.message(F.text)

async def gpt_work(message: Message, state: FSMContext):

await state.set_state(StateGpt.text)

answer = await message.reply("Ответ генерируется...")

response = await gpt_request(message.text)

await answer.edit_text(response.choices[0].message.content)

await state.clear()

Из интересного здесь можно ответить состояния, используемые в проекте. С их помощью мы не даем пользователю создавать новые запросы во время генерации текста нейросетью и просим дождаться ответа.

Генерация ответа (gpt.py):

import os

import httpx

from openai import AsyncOpenAI

gpt = AsyncOpenAI(api_key=os.getenv("AI_KEY"),

http_client=httpx.AsyncClient())

async def gpt_request(text):

response = await gpt.chat.completions.create(

messages=[{"role": "user",

"content": str(text)}],

model="gpt-4o"

)

return response

Так как весь наш бот асинхронный, мы будем использовать модуль AsyncOpenAI.

И здесь также AI_KEY записан в переменные окружения.

Важно, чтобы к вашему аккаунту был подключен биллинг, иначе будет возникать ошибка квоты.

Деплой в облако

Подготовим файл зависимостей

Для деплоя в облако Amvera, нам нужно создать файл зависимостей - requirements.txt. В нашем случае он будет небольшой, т.к. мы используем лишь 2 библиотеки, требуемые загрузки через pip.

requirements.txt:

aiogram==3.10.0

openai==1.40.6

Зарегистрируемся по ссылке, указав все требуемые данные.

После регистрации убеждаемся в получении бесплатного баланса и создаем новый проект.

  • В открывшемся окне вписываем данные о названии проекта и выбираем тариф. Желательно для рабочего проекта выбирать тариф не ниже Начального.
Интеграция модели GPT-4 Omni в телеграм бота на Python
  • Далее, открывается окно загрузки данных. Мы можем загрузить код прямо через интерфейс в этом окне, либо воспользоваться инструментом git. Пока пропустим загрузку данных и нажмем Далее
  • Окно конфигурации. Именно здесь создается amvera.yml — инструкция для проекта. Выбираем окружение Python, инструмент pip. Теперь открываются дополнительные секции. Самое главное — версия Python (version), путь до главного файла (scriptName) и путь до файла зависимостей (requirements.txt)

После утверждения настроек мы можем завешать создание проекта.

Открываем страницу проекта и обязательно добавляем переменные окружения, используя кнопку “Создать секрет” во вкладке “Переменные”.

Интеграция модели GPT-4 Omni в телеграм бота на Python

На этом завершается настройка проекта.

Доставка кода через Git

Как я уже сказал, можно воспользоваться загрузкой через сайт - это вкладка Репозиторий на странице проекта.

Но намного удобнее использовать git. С ним после небольшой настройки можно обновлять репозиторий, используя 3 команды.

Устанавливаем git и выполняем следующие команды в командной строке (убедитесь, что открыли cmd в директории с проектом):

  • git init - инициализируем git (должна создаться папка .git)
  • git remote add amvera https://git.amvera.ru/имя-пользователя/название-проекта - добавляем удаленный репозиторий (эту ссылку можно получить во вкладке “Репозиторий”.
  • git add . - добавление всех файлов и папок в директории инициализированного git
  • git commit -m "First commit" - первый коммит (обязательно с комментарием)
  • git push amvera master - последнее действие - пуш файлов в репозиторий.

Сборка должна начаться автоматически.

Если вы все-таки решили загрузить все файлы вручную через интерфейс, после загрузки понадобится перейти во вкладку “Конфигурация” и нажать кнопку “Собрать”.

Теперь, если все пройдет успешно, бот заработает.

Итог

Теперь мы имеем доступ к относительно новой модели GPT-4 Omni прямо в телеграм! В тг-канале я постоянно выкладываю новости в сфере ИИ и технологий

Начать дискуссию