Многоязычный интернет-магазин Prestashop с использованием ChatGPT

Mногоязычный интернет-магазин Prestashop с ChatGPT

Сегодня мы рассмотрим пример бесплатного движка Prestashop для перевода контента с использованием генеративной нейронной сети ChatGPT4.

Для примера мы будем использовать версию Prestashop 1.7.8.6.

Сначала в каталоге /modules/ создадим каталог с именем нашего модуля; я назову свой модуль “productlocal.”

В этом каталоге создадим файл .php с именем нашего модуля. В моем случае это: productlocal.php.

В этом файле мы создадим класс модуля:

Это класс-шаблон для модуля PrestaShop. В конструкторе класса мы добавили параметры “api_key” и “model,” в которых будет храниться ключ API от OpenAI и версия выбранной модели ChatGPT. Если у вас есть доступ к ChatGPT 4, установите значение переменной $this->model = “gpt-4”. Если у вас нет доступа, используйте модель “gpt-3.5-turbo“. Она также хорошо переводит текст и намного дешевле.

Цены:

GPT-3.5-turbo $0.002/1,000 токенов

GPT-4 $0.06/1,000 токенов промптов $0.12/1,000 токенов ответа

Чтобы получить ключ API, вам нужно перейти по этой ссылке и зарегистрироваться.

После регистрации вам нужно создать новый ключ API и сохранить его. Это будет указано в настройках будущего модуля.

После создания ключа вы можете пополнить свой баланс OpenAI. Если вы используете модель GPT-3.5-turbo, то $5 будет достаточно для перевода около 600-1,000 товаров, в зависимости от длины описания.

Чтобы сделать запрос к API, нам нужно отправить POST-запрос в формате JSON по следующему URL-адресу:

Вернемся к написанию модуля. Мы сделаем так, чтобы вы могли переводить описание непосредственно при редактировании товара.

Для тестирования нашего модуля я добавлю несколько языков в мой Prestashop. Для этого я перейду в меню “International->Localization->India” и затем нажму кнопку “Импорт”.

После этого в вашу систему будут добавлены языки тамильский, хинди и бенгальский.

Теперь, при редактировании товара, у вас есть выбор из нескольких языков:

Теперь нам нужно добавить кнопку на интерфейс редактирования товара. При нажатии на эту кнопку наш модуль будет отправлять запрос к API OpenAI. Сначала давайте спроектируем нашу кнопку. В каталоге вашего модуля создайте файл шаблона .tpl. Я назову его translate_button.tpl.

После этого добавьте следующий код:

Это простая кнопка, которая при нажатии отправляет запрос на адрес контроллера (обработчика) с идентификатором товара и выбранным языком, после чего контроллер предоставляет ответ. У нас еще нет контроллера, мы создадим его немного позже. Он будет принимать id_product и language_code, отправлять описание товара в ChatGPT, затем сохранять полученные данные и предоставлять ответ.

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

Для этого в файле productlocal.php, в классе productlocal добавьте следующий метод:

Но этого недостаточно. Чтобы правильно установить права доступа к нашему модулю для разных пользователей, нам нужно создать новую вкладку (пункт меню в админ-панели) для нашего модуля, и при этом эта вкладка не обязательно должна отображаться.

Для создания новой вкладки при установке модуля в класс productlocal нужно добавить следующие методы:

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

Теперь, после установки нашего модуля, на странице редактирования товара мы должны увидеть хук нашего модуля:

Нажмите на кнопку “Настроить”, и после этого наша кнопка будет отображаться:

Отлично, у нас есть кнопка. При нажатии JS отправляет запрос контроллеру. Теперь нам нужно создать контроллер. Если вы были внимательны, то заметили в начале статьи, что в конструкторе кода нашего класса модуля я создал параметр:

AdminProductlocal будет названием нашего контроллера. Я также указал этот контроллер в коде при создании вкладки.

Для создания нового контроллера для панели администратора нам нужно создать директорию controllers/admin/ в директории с нашим модулем.

В этой директории мы создаем файл с именем нашего контроллера, AdminProductlocalController.php. Обратите внимание, что файл контроллера должен иметь то же имя, что и имя контроллера, но с добавлением слова “Controller” в конце.

Код для нашего контроллера будет таким:

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

Но сначала давайте создадим метод, который будет обмениваться данными с API OpenAI. Давайте сделаем так, чтобы этот метод принимал текст, тип текста и язык для перевода в качестве входных данных и возвращал переведенный текст в качестве результата.

Для перевода названия товара мы будем использовать следующий запрос prompt к ChatGPT:

А для перевода краткого и полного описания товара мы будем использовать следующий запрос prompt к ChatGPT:

Мы специально просим ChatGPT возвращать {not-found} или {already-done} в случае ошибок, чтобы нам было проще обработать неправильные ответы позже.

Теперь наш метод принимает текст и язык в качестве входных данных и в зависимости от типа текста формирует запрос и отправляет запрос к API. Затем он возвращает переведенный текст.

Пришло время для финального и основного метода, на который ссылается наш контроллер, а именно translateDescription.

Этот метод будет принимать id_product редактируемого товара и язык, отправлять запросы на перевод названия товара и краткого и полного описания с помощью метода requestTranslateToChatGPT , затем заменять название, сохранять товар и предоставлять результат своей работы нашему контроллеру. В противном случае он вернет ошибку в ответ.

Код для метода translateDescription в нашем случае будет выглядеть примерно так:

Наш модуль готов к использованию.

Осталось небольшое, но необязательное дополнение: мы можем добавить возможность настраивать и изменять параметры нашего модуля через панель администратора, а именно api_key и model. Для этого нам нужно добавить пару методов в наш модуль: displayForm — который отображает форму для редактирования параметров, и метод getContent , который сохраняет параметры при редактировании.

Теперь, в качестве теста, установим наш модуль, выберем язык хинди и нажмем на кнопку “Перевести описание“. После долгого ожидания вы увидите сообщение “Описание товара успешно переведено.”

Теперь нужно обновить страницу. И после обновления вы увидите переведенное описание.

Если вы не хотите каждый раз вручную обновлять страницу, вы можете добавить код JS для обновления, location.reload();, в файл translate_button.tpl.

Вот и все. И как всегда, вы можете расширить функциональность вашего модуля, например, заставить ChatGPT проверять ваш текст на ошибки или изменить описание, чтобы оно было короче или длиннее. Для этого вам нужно только изменить запросы prompt.

Вы можете увидеть полный код модуля в репозитории GitHub.