JavaScriptを使用してOracle Database内からCoreとHugging Face AIを呼び出す方法(SQL、JSON、RESTを使用して結果を保存してアクセス) (2023/08/20)

JavaScriptを使用してOracle Database内からCoreとHugging Face AIを呼び出す方法(SQL、JSON、RESTを使用して結果を保存してアクセス) (2023/08/20)

https://medium.com/oracledevs/how-to-call-hugging-face-ai-from-within-an-oracle-database-using-javascript-store-and-access-6cc3e0c291ce

投稿者:Paul Parkinson


このブログでは、無料のOracle Database内で実行され、Hugging Face AI(データベースに格納され、SQL、JSON、Restまたはその他の言語を使用してアクセス可能な結果)をコールするJavaScriptプログラムを使用して、完全に無料のアプリケーションをすばやく作成する方法を説明します。もちろん、すべてのソースはここにあります。



一般的なアプリケーションとAIアプリケーションの共通のフローには、特にAIサービスをコールするアプリケーションが含まれ、その後、その情報をさらに取得して処理(OMLの使用など)したり、後で分析および問合せ(あるいはその両方)できるデータベースに情報を格納します。


データベース自体からコマンドを発行すると、データは即時に格納されるため、処理中のため信頼性が向上し、永続化するために追加のネットワーク・コールは必要ありません。さらに、ロジック(およびコードも)をデータベースに配置することで、パワーOracle Databaseの高可用性、管理、可観測性などを暗黙的に、本質的に活用できます。


これは、Javaを含むOracle Databaseの一意の機能であり、このブログでは、データベース自体にJavaScriptランタイム・エンジンが表示されます。


Hugging Faceは、機械学習を使用してアプリケーションを構築するためのツールを開発します。これは、ユーザーが機械学習モデルとデータセットを共有できるようにする、自然言語処理アプリケーションとそのプラットフォーム用に構築されたトランスフォーマ・ライブラリに最も注目されています。ここ数年で非常に人気が高まっています。


要するに、私たちは...


  1. cohere.comまたはhuggingface.coアカウントを作成し、アクセス・トークンを作成してコピーし、モデルを選択します。
  2. Oracle Databaseを作成します。
  3. データベース・ユーザーおよび表を作成します。
  4. データベースで短いJavaScriptプログラムを実行して、CohereまたはHugging Face AIモデルをコールし、結果を表に格納します。
  5. SQL、JSON、Restなどを使用して、これらの結果を問い合せます。


CohereアカウントおよびAIモデルの設定


https://cohere.comに移動して「Sign Up」に移動し、プロファイルに移動して「Settings」ボタンをクリックします。


「ダッシュボード」、「APIキー」の順にクリックし、キーを作成(またはトライアルを使用)して、後で使用するためにその値をコピーします。




APIリファレンス・リストを表示して選択するには、APIリファレンスをクリックし、ページの左側にあるハンバーガー・メニュー/アイコンを選択します。この場合、「生成」セクションとCo.Generateを選択します。



モデルを呼び出すサンプル・コード・スニペットを表示するには、「Ianguage」を選択し、JavaScriptオプションを選択します。




Hugging FaceアカウントおよびAIモデルの設定


https://huggingface.coに移動して「Sign Up」に移動し、プロファイルに移動して「Settings」ボタンをクリックします。


「アクセス・トークン」をクリックし、トークンを作成し、後で使用するためにその値をコピーします。



「モデル」をクリックし、モデルを選択します。この場合、質問回答の「自然言語処理」セクションでモデルを選択します。



モデル(一般的と思われるモデル)を選択し、左側のモデル・カードの情報を確認してから、右側の「Deploy」ドロップダウン・メニューを選択します。



モデルを呼び出すサンプル・コード・スニペットを表示するには、「Inference API」を選択し、JavaScriptオプションを選択します。




Oracle Databaseの設定


Oracle Database 23cの任意のフレーバを使用できます。クラウドでは、23cを使用する必要がある場合に、今年後半にOracleのAlways FreeのAutonomous Databaseを使用できます。Oracle 23c Freeバージョンは、現在利用可能であるため、コンテナ・イメージをローカルにインストールまたは使用できます。もちろん、開発やクラウドなどにローカルを使用でき、これらのオプションのいずれかを設定するのは非常に迅速です...



Oracle Database Free...


ここに移動してOracle Database Free 23cを設定できます。


コンテナ・イメージの使用は非常に簡単です。単にイメージをプルできます。


docker pul container-registry.oracle.com/database/free: 最新


次に、次の1行を実行して、-e ORACLE_PASSWORD=Welcome12345を任意のパスワードに置き換えます(再起動後も変更を永続化するために、-v oracle-volume:/somedirectoryパラメータをディレクトリの場所に追加することもできます)。コンテナからのコールを許可する--add-host docker.for.mac.host.internal:host-gatewayパラメータに注目してください。これはmacsの設定であり、別のOSで実行している場合は異なります。


docker run -d -p 1521:1521 - add-host docker.for.mac.host.internal:host-gateway -e ORACLE_PASSWORD=Welcome12345 gvenzl/oracle-free



SQLcl (またはデータベース・アクション)の設定および接続


SQLclをインストールしてデータベースを管理できます。


  • この場所https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/download/からダウンロードしてインストールすると、データベースの管理に使用する[SQLcl_INSTALL_DIR]/bin/sql実行可能ファイルが提供されます。便宜上、[SQLcl_INSTALL_DIR]/binをPATHに追加できます。
  • ログインして[SQLcl_INSTALL_DIR]をSQLclの場所に置き換え、Welcome12345をデータベースの作成時にORACLE_PASSWORDとして指定した場所に置換します。ローカル・インストール(Oracle Database Freeコンテナ・イメージなど)を使用する場合の例を次に示します:
  • [SQLcl_INSTALL_DIR]/bin/sql /nolog SQL> connect sys@//localhost:1521/freepdb1 as sysdba Password? (**********?) ************* Connected.



JavaScriptを介してCohereまたはHugging Face (あるいはその両方)を呼び出す適切な権限を持つユーザーを作成します。


次のSQLファイルを実行して、aijsユーザーとその必要な権限付与およびACLを作成します(セキュリティを向上させるためにさらに強化できることに注意してください)。


SQL> @sql/create_aijs_user.sql
SQL> @sql/create_aijs_acl.sql


次に、ユーザーを接続し、Hugging Faceへのコールの結果を格納する表を作成します。


SQL> connect aijs/Welcome12345;
SQL> create table huggingfacejson (id json);
SQL> create table coherejson (id json);


すべて実行の準備ができました。


データベースのJavaScriptコードからCohereまたはHuggingFace問合せを実行します


コーヒーの例

SQL> @sql/coherequery.sql


PL/SQLプロシージャが正常に完了しました。


次に、SQL問合せを実行して、表に格納されているJSON結果を確認します。

SQL> select * from coherejson;

[{"id":"1b42f8f9-ea6d-4a65-8f02-bdcf89d9bd79","generations":[{"id":"d6467c0b-4a78-4dd4-b822-c1e2bfa4ecb0","text":"\n LLMs or Large Language Models are artificial intelligence tools that can read, summarize and translate texts and"}],"prompt":"Please explain to me how LLMs work","meta":{"api_version":{"version":"1"}}}


直前に実行したコードを確認すると、作成されたJavaScriptモジュールと呼び出されている関数を確認できます。

create or replace mle module cohere_module language javascript as import "mle-js-fetch"; import "mle-js-oracledb"; export async function cohereDemo(apiToken) { if (apiToken === undefined) { throw Error("must provide an API token"); } const modelId = "generate"; const restAPI = `https://api.cohere.ai/v1/${modelId}`; const headers = { accept: 'application/json', 'content-type': 'application/json', "Authorization": `Bearer ${apiToken}` }; const payload = { max_tokens: 20, return_likelihoods: 'NONE', truncate: 'END', prompt: 'Please explain to me how LLMs work' }; const resp = await fetch( restAPI, { method: "POST", headers: headers, body: JSON.stringify(payload), credentials: "include" } ); const resp_json = await resp.json(); session.execute( `INSERT INTO COHEREJSON (id) VALUES (:resp_json)`, [ JSON.stringify(resp_json) ] ); } / create or replace procedure coherequery( p_API_token varchar2 ) as mle module cohere_module signature 'cohereDemo(string)'; / -- this is how you can test the API call begin utl_http.set_wallet('system:'); coherequery('[yourcoheretokenhere]'); end; /


ハグの面の例

SQL> @sql/huggingfacequery.sql

PL/SQL procedure successfully completed.


次に、SQL問合せを実行して、表に格納されているJSON結果を確認します。

SQL> select * from huggingfacejson; [{"score":0.16964051127433777,"token":2053,"token_str":"no","sequence":"the answer to the universe is no."},{"score":0.07344779372215271,"token":2498,"token_str":"nothing","sequence":"the answer to the universe is nothing."},{"score":0.05803246051073074,"token":2748,"token_str":"yes","sequence":"the answer to the universe is yes."},{"score":0.043957971036434174,"token":4242,"token_str":"unknown","sequence":"the answer to the universe is unknown."},{"score":0.04015727713704109,"token":3722,"token_str":"simple","sequence":"the answer to the universe is simple."}]


直前に実行したコードを確認すると、作成されたJavaScriptモジュールと呼び出されている関数を確認できます。

create or replace mle module huggingface_module language javascript as import "mle-js-fetch"; import "mle-js-oracledb"; export async function huggingfaceDemo(apiToken) { if (apiToken === undefined) { throw Error("must provide an API token"); } const payload = { inputs: "The answer to the universe is [MASK]." }; const modelId = "bert-base-uncased"; const headers = { "Authorization": `Bearer ${apiToken}` }; const restAPI = `https://api-inference.huggingface.co/models/${modelId}`; const resp = await fetch( restAPI, { method: "POST", headers: headers, body: JSON.stringify(payload), credentials: "include" } ); const resp_json = await resp.json(); session.execute( `INSERT INTO HUGGINGFACEJSON (id) VALUES (:resp_json)`, [ JSON.stringify(resp_json) ] ); } / create or replace procedure huggingfacequery( p_API_token varchar2 ) as mle module huggingface_module signature 'huggingfaceDemo(string)'; / -- this is how you can test the API call begin utl_http.set_wallet('system:'); huggingfacequery('[hf_yourhuggingfacetokenhere]'); end; /


Hugging Faceの有用なパラメータおよびデバッグ情報は、ここにあります。


SQLまたはJSON (新しいJSONの二重機能により同時に)、REST、またはMongoDB APIを使用して、結果の問合せ、分析などを実行できるようになりました。Oracle Databaseは、特に、次の機能がすでに現在使用可能なベクター・データベースであるため、様々な理由でAIに最適なデータベースです。


  • ベクトル表現および記憶域のネイティブ・データ型: RAW、BLOB、JSON
  • インメモリー列ストア。SIMDカーネルを使用したベクター埋込みの格納と検索により、優れたパフォーマンスを実現
  • データ・モデル固有の索引(テキスト、空間など)を作成するための拡張可能な索引付けフレームワーク
  • ネイティブOracle Machine Learning API - モデリング、分類、スコアリング、クラスタリングなど
  • さらに、OracleをVector Databaseとして有効にする他の多くの機能
  • DML、パラレル・ロード、パーティション化、拡張圧縮、パラレル問合せ、RAC、シャーディングなど。


Oracle OCI AIおよびその他のサービスをOracleデータベース内から呼び出すこともできます。



まとめ


このブログでは、JavaScriptを使用してOracle Database内からHugging Face APIを呼び出す方法について説明し、幅広いAIソリューションとJavaScript開発者にぴったりの強力な機能の組合せを実証しました。


データベースのJavaScriptに関連する他のブログ、一般に、それを可能にするMultiLingual Engine (MLE)などは、Martin BachのブログおよびJavaScriptモジュールに関するこの投稿にあります。マーティンとルーカスのおかげです。


ご意見やご質問はお待ちしておりますので、お時間を大変お待ちしております。


コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

ミリ秒の問題: BCCグループとOCIが市場データ・パフォーマンスを再定義する方法(AWSに対するベンチマークを使用) (2025/11/13)

Oracle DatabaseをOCI Object Storageの不変バケットにバックアップする理由と方法 (2024/05/27)