使用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代码库中查看该模块的完整代码。