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
-
Придумываем ему имя и юзернейм
-
В ответ, если все прошло успешно, получаем сообщение о создании бота и сохраняем сгенерировавшийся токен.
Внимание! С помощью токена можно получить полный контроль над ботом, никому не присылайте его!
Как получить ключ OpenAI?
Для начала вам нужно иметь аккаунт в OpenAI с подключенным биллингом. Для создания вам понадобится любой зарубежный номер. Можно воспользоваться любым сервисом для получения SMS подтверждения.
После переходим на страницу ключей и создаем ключ с любым названием кнопкой сверху:
Все! Теперь можно переходить к написанию кода.
Код бота
Структура проекта будет выглядеть так:
-
Папка bot с файлами handlers.py для обработчиков aiogram и gpt.py для генерации ответа нейросети.
-
Файл main.py с инициализацией бота
-
Также файлы, требуемые для деплоя (их нет на скрине)
В 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
Зарегистрируемся по ссылке, указав все требуемые данные.
После регистрации убеждаемся в получении бесплатного баланса и создаем новый проект.
-
В открывшемся окне вписываем данные о названии проекта и выбираем тариф. Желательно для рабочего проекта выбирать тариф не ниже Начального.
-
Далее, открывается окно загрузки данных. Мы можем загрузить код прямо через интерфейс в этом окне, либо воспользоваться инструментом git. Пока пропустим загрузку данных и нажмем Далее
-
Окно конфигурации. Именно здесь создается amvera.yml — инструкция для проекта. Выбираем окружение Python, инструмент pip. Теперь открываются дополнительные секции. Самое главное — версия Python (version), путь до главного файла (scriptName) и путь до файла зависимостей (requirements.txt)
После утверждения настроек мы можем завешать создание проекта.
Открываем страницу проекта и обязательно добавляем переменные окружения, используя кнопку “Создать секрет” во вкладке “Переменные”.
На этом завершается настройка проекта.
Доставка кода через 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 прямо в телеграм!
ссылка на оригинал статьи https://habr.com/ru/articles/836556/
Добавить комментарий