使用ChatGPT的多语言Prestashop在线商店

ChatGPT多语言Prestashop在线商店

今天,我们将以免费引擎Prestashop的例子来使用生成式神经网络ChatGPT4翻译内容。

在这个例子中,我们将使用Prestashop版本1.7.8.6。

首先,在/modules/目录下,我们将创建一个以我们模块名称命名的目录;我将我的模块命名为“productlocal.”

在此目录中,创建一个以我们模块名称命名的.php文件。在我的例子中,它是:productlocal.php

在这个文件中,我们将创建模块类:

这是一个PrestaShop模块的模板类。在类的构造函数中,我们添加了参数”api_key“和”model,“,用于存储来自OpenAI的API密钥和选择的ChatGPT模型的版本。如果您可以访问ChatGPT 4,请将变量$this->model = “gpt-4”的值设置为它。如果您无法访问,请使用”gpt-3.5-turbo“模型。它也能很好地翻译文本,并且更便宜。

价格:

GPT-3.5-turbo:每1,000个标记0.002美元

GPT-4:每1,000个提示标记0.06美元,每1,000个回应标记0.12美元

要获取API密钥,您需要访问此链接并注册。

注册后,您需要创建一个新的API密钥并保存它。这将在未来模块的设置中指定。

创建密钥后,您可以充值OpenAI余额。如果您使用GPT-3.5-turbo模型,5美元足以翻译大约600-1,000个产品,具体取决于描述的长度。

为了向API发送请求,我们需要以JSON格式发送POST请求到以下URL:

让我们回到编写模块的过程。我们将使您可以在编辑产品时直接翻译描述。

为了测试我们的模块,我将在我的Prestashop中添加多种语言。为此,我将转到菜单“International->Localization->India”,然后点击“Import”按钮。

然后,Tamil语、印地语和孟加拉语将添加到您的系统中。

现在,在编辑产品时,您可以选择几种语言:

现在,我们需要在产品编辑界面上添加一个按钮。当按下此按钮时,我们的模块将向OpenAI API发送请求。首先,让我们设计我们的按钮。在您的模块目录中,创建一个.tpl模板文件。我将其命名为translate_button.tpl

然后,添加以下代码:

这是一个简单的按钮,当按下时,向控制器的地址(处理程序)发送一个带有产品ID和选定语言的请求,然后控制器提供响应。我们还没有控制器;我们稍后将创建它。它将获取id_product language_code,将产品描述发送到ChatGPT,然后保存接收到的数据并提供响应。

现在,为了使此按钮出现在产品编辑页面上,我们需要为我们的模块类添加一个钩子,该钩子在打开产品编辑页面时被调用。

为此,在productlocal.php文件的productlocal 类中添加以下方法:

但这还不够。为了为不同的用户正确设置我们模块的访问权限,我们需要为我们的模块创建一个新的选项卡(在管理面板中的菜单项),并且不一定要显示此选项卡。

要在安装模块时创建一个新的选项卡,您需要将以下方法添加到productlocal 类中:

我们现在还需要修改安装和卸载方法:

现在,在安装我们的模块之后,我们应该在产品编辑页面上看到我们模块的钩子:

点击“配置”按钮,然后,我们的按钮就会显示出来:

太棒了,我们有了按钮。点击后,JS会向控制器发送一个请求。现在我们需要创建控制器。如果你细心的话,你会注意到在文章开头,我在我们的模块类的构造代码中创建了一个参数:

AdminProductlocal将是我们的控制器的名称。在创建选项卡时,我还在代码中指定了这个控制器。

要为管理面板创建一个新的控制器,我们需要在我们的模块目录下创建一个名为controllers/admin/的目录。

在这个目录中,我们创建一个名为AdminProductlocalController.php的文件。请注意,控制器文件的名称应该与控制器名称相同,只是在末尾添加了“Controller”一词。

我们控制器的代码如下所示:

现在,在我们的模块类中,只剩下创建translateDescription 方法了,该方法将以id_product language_code 作为输入参数,翻译产品描述,并返回响应。

但首先,让我们创建一个方法,该方法将与OpenAI API交换数据。让我们使这个方法接受文本、文本类型和要翻译成的语言作为输入,并将其作为输出返回翻译后的文本。

为了翻译产品名称,我们将使用以下请求提示向ChatGPT发送请求:

而对于翻译简短和完整的产品描述,我们将使用以下请求提示向ChatGPT发送请求:

我们特别要求ChatGPT在错误情况下以{not-found}{already-done}作为响应,以便我们更容易处理不正确的答案。

现在我们的方法接受文本和语言作为输入,并根据文本类型构建提示并向API发送请求。然后返回翻译后的文本。

现在是最终和主要的方法的时候,我们的控制器引用的方法,即translateDescription

这个方法将接受被编辑产品的id_product 和语言,使用requestTranslateToChatGPT 方法发送翻译请求,翻译产品名称和简短和完整的描述,然后替换名称,保存产品,并将其操作结果提供给我们的控制器。或者,它将返回一个错误作为响应。

在我们的例子中,translateDescription 方法的代码将类似于:

我们的模块已经准备就绪。

还有一个小但可选的操作:我们可以通过管理面板添加配置和更改我们的模块的参数,特别是api_key model。为此,我们需要向我们的模块添加几个方法:displayForm — 显示用于编辑参数的表单,以及getContent 方法,在编辑时保存参数。

现在,作为一个测试,让我们安装我们的模块,选择印地语,并点击“翻译描述”按钮。经过漫长的等待,您将看到消息“产品翻译成功”。

现在您需要刷新页面。刷新后,您将看到翻译后的描述。

如果您不想手动每次刷新页面,您可以将JS代码location.reload();添加到translate_button.tpl文件中。

就是这样。像往常一样,您可以通过修改提示请求来扩展您的模块的功能,例如让ChatGPT检查您的文本是否有错误,或者更改描述为更短或更长。

您可以在GitHub代码库中查看该模块的完整代码。