Press "Enter" to skip to content

如何使用JavaScript从Oracle数据库中调用Hugging Face AI

在本文中,我将向您展示如何使用在免费的Oracle数据库中运行的JavaScript程序快速创建一个完全免费的应用程序,并调用Hugging Face AI,将结果存储在数据库中,然后可以使用SQL、JSON、REST或任何其他语言访问。所有源代码都可以在此处获得。

一般情况下,应用程序的流程和AI应用程序的流程都涉及到应用程序调用AI服务,然后将信息存储在数据库中,以便稍后检索和处理(例如,使用OML)或进行分析和查询。

通过从数据库本身发出命令,数据会立即存储,因此更可靠,因为它正在处理中,不需要额外的网络调用来持久化。此外,通过将逻辑(甚至代码)驻留在数据库中,可以隐式和固有地利用Oracle数据库的高可用性、管理性和可观察性等功能。

这是Oracle数据库的独特功能,因为它包含Java,并且正如我们将在本博客中看到的那样,数据库本身还包括JavaScript运行时引擎。

Hugging Face开发了用于构建使用机器学习的应用程序的工具。它最为人们所熟知的是其为自然语言处理应用程序构建的transformers库以及允许用户共享机器学习模型和数据集的平台。它在过去几年中变得非常流行。

简而言之,我们将执行以下操作:

  1. 创建一个帐户并选择一个模型。
  2. 创建Oracle数据库和数据库用户。
  3. 添加一个带有证书的钱包,以允许进行HTTPS调用。
  4. 创建一个表。
  5. 在数据库中运行一个简短的JavaScript程序,调用Hugging Face AI模型并将结果存储在表中。
  6. 可选择使用SQL、JSON、REST等查询这些结果。

设置Hugging Face帐户和AI模型

转到https://huggingface.co并注册。转到您的个人资料,并单击“设置”按钮。

单击“访问令牌”,创建一个令牌,并将其值复制以供以后使用。

单击“模型”并选择一个模型。在这种情况下,我们将在“自然语言处理”部分选择一个“问答”模型。

选择一个模型(可能是较受欢迎的模型之一),注意左侧的“模型卡”中的信息,然后选择右侧的“部署”下拉菜单。

选择“Inference API”,然后选择“JavaScript”选项,以查看调用该模型的示例代码片段。

设置Oracle数据库

我们可以使用Oracle数据库的任何版本,从21c开始。在云上,我们可以使用Oracle始终免费的自主数据库(这也很好,因为我们可以通过互联网公开它,并在几分钟内使游戏真正全球/在线可用),或者我们可以使用Oracle 23c免费版本,在本地安装或使用容器映像。当然,我们也可以将本地用于开发,云用于生产等等,这两个选项都非常快速。

始终免费的Oracle云数据库选项

您可以在此处设置Oracle云始终免费的自主数据库。提示非常直观。只需在Oracle Database菜单屏幕上选择“自主事务处理”,如下所示,然后单击“创建自主数据库”按钮。您可以选择所有默认设置,只需提供一个管理员用户密码。

Oracle数据库免费选项

您可以在此处设置Oracle数据库免费版23c。

使用容器映像非常简单。只需执行下面的一行代码,将-e ORACLE_PASSWORD=Welcome12345替换为您选择的密码,并将-v oracle-volume:/somedirectory替换为目录位置(如果您只希望具有内存中的数据库,则可以完全省略它)。请注意--add-host docker.for.mac.host.internal:host-gateway参数允许容器外部的调用。这是适用于Mac的设置,如果在其他操作系统上运行,则会有所不同。

docker pull 
container-registry.oracle.com/database/free:latest; docker run --add-host docker.for.mac.host.internal:host-gateway -e ORACLE_PASSWORD=Welcome12345 -v oracle-volume:/somedirectory container-registry.oracle.com/database/free:latest

设置 SQLcl(或数据库操作)并连接

如果您使用的是云数据库,您可以通过在OCI控制台中单击数据库操作,然后选择SQL来管理云数据库的SQL和JavaScript。

您还可以按照以下步骤安装SQLcl来管理提到的任一数据库/选项:

  1. 从此位置下载并安装。这将提供一个可执行文件[SQLcl_INSTALL_DIR]/bin/sql,我们将用它来管理数据库。为了方便起见,您可以将[SQLcl_INSTALL_DIR]/bin添加到您的PATH中。

  2. 使用您的SQLcl位置替换[SQLcl_INSTALL_DIR],并替换为您在创建数据库时提供的作为ORACLE_PASSWORD的密码进行登录。

这是一个使用本地安装的示例(例如,Oracle Database Free容器映像):

这是一个使用云数据库的示例(例如,Oracle Always Free Autonomous):

创建钱包

创建一个钱包来保存从运行在数据库中的JavaScript到Hugging Face的SSL/HTTPS调用的证书。

我们将创建Hugging Face API SSL证书的PEM,将其存储在钱包中,将钱包(特别是ewallet.p12文件)上传到数据库,并指示数据库在HTTPS调用中使用该证书。具体地说,我们将指示Oracle数据库中的JavaScript fetch命令映射/使用的UTL_HTTP包在HTTPS调用中使用该证书。

1. 首先,使用以下命令获取Hugging Face的SSL证书(api-infeerence.hugging.face.co:443),并将其保存到PEM文件中。

2. 在SQLcl提示符处发出以下命令,创建一个钱包,将PEM添加到钱包中,并通过显示结果进行验证。 -cert参数指向您刚刚创建的PEM文件。

3. 现在您有一个包含Hugging Face API证书(pem)的钱包目录,如果尚未这样做,请打开另一个终端窗口,克隆或下载src repos(本文开头链接的位置),cd到根目录(huggingface-javascript-oracle),并将ewallet.p12文件复制到src/main/resources目录中。换句话说:

4. 返回SQLcl终端,并从src repos运行/安装sql/writefile.sql文件。

5. 这将安装我们将从小型Java实用程序调用的write_file存储过程,该实用程序将上传我们的ewallet.p12到数据库以用于HTTPS调用。返回到src repos终端(再次从根目录(huggingface-javascript-oracle)),运行以下命令,根据需要替换数据库连接值。例如,在使用Oracle Free容器映像数据库的情况下:

您应该看到类似于HuggingFaceFromOracleDatabaseApplication ewallet.p12 wallet uploaded to DATA_DUMP_DIR的输出。

6. 返回SQLcl终端窗口,并运行以下命令以获取上传ewallet.p12文件的DATA_DUMP_DIR的位置。

您应该看到类似于以下内容的输出。

7. sql/create_aijs_acl.sql将指示数据库(UTL_HTTP包)使用ewallet.p12中的证书对主体aijs进行HTTPS调用。在此文件中,将前面的/dba_directories查询返回的路径替换为两个wallet_path的值,并替换[WALLET_PASSWORD]的值。

wallet_path => 'file:/opt/oracle/admin/FREE/dpdump/FB9997ED60890BBDE0536402000AF33F',
[...]
'file:/opt/oracle/admin/FREE/dpdump/FB9997ED60890BBDE0536402000AF33F', '[WALLET_PASSWORD]'

8. 现在运行以下SQL文件来创建aijs用户,其必要的授权和ACLs(请注意,这些可以进一步加强以提高安全性)。

9. 现在连接用户并创建一个表来存储对Hugging Face的调用结果。

现在一切准备就绪可供运行。

运行应用程序并管理结果

最后,从数据库中的JavaScript代码运行HuggingFace查询:

然后,通过执行SQL查询来检查存储在表中的JSON结果。

通过查看我们刚刚执行的代码,我们可以看到JavaScript代码片段:

有关Hugging Face的有用参数和调试信息可以在文档中找到。

现在可以使用SQL或JSON(同时,由于新的JSON二元性功能)以及REST或甚至MongoDB API来查询、分析等处理结果。

Oracle数据库是用于AI的完美数据库,原因如下:

  • 用于矢量表示和存储的本地数据类型:RAW、BLOB、JSON
  • 内存列存储器用于存储和搜索矢量嵌入,具有SIMD内核以实现令人惊叹的性能
  • 可扩展的索引框架用于创建数据模型特定的索引(例如,文本、空间)
  • 本机Oracle机器学习API – 建模、分类、评分、聚类等
  • DML、并行加载、分区、高级压缩、并行查询、RAC、分片等

还可以从Oracle数据库内部调用Oracle OCI AI和其他服务。

结论

本文介绍了如何使用JavaScript从Oracle数据库内部调用Hugging Face API,从而展示了一个强大的功能组合,非常适合各种AI解决方案,并且对JavaScript开发人员友好。

与数据库中的JavaScript相关的其他博客,例如使其成为可能的多语言引擎(MLE)等内容,可以在Martin Bach的帖子和这篇关于在23c中导入JavaScript ES模块的帖子中找到。

期待您的任何评论或问题,并非常感谢您阅读。

Leave a Reply

Your email address will not be published. Required fields are marked *