例 3: 「OpenAI Chat Completions API (GPT-3.5、GPT-4) - 行」の構成
この例では、「OpenAI Chat Completions API (GPT-3.5、GPT-4) - 行」構成で OpenAI 分析コネクタを使用する方法を学びます。基本的な演習を通じて、データ モデルやチャートの数式に機能を組み込む方法を紹介します。
このコネクタ構成の機能は、「OpenAI Completions API (GPT-3) - 行」構成の機能と非常に似ています。ただし、これら 2 つの構成では異なるモデルが使用されているため、応答も異なります。さらに、これら 2 つの構成ではパラメーター名が異なるため、自分の構成に合うチュートリアルの例を参照してください。Completions の構成については、「例 1: 「OpenAI Completions API (GPT-3) - 行」の構成」を参照してください。
Azure OpenAI コネクタを使用して、この例を完了することもできます。Azure OpenAI コネクタを使用する場合、OpenAI プラットフォームではなく、Microsoft Azure プラットフォームを通じてモデルとやり取りを行います。
始める前に:
この例を完了する前に、次のステップを完了する必要があります。
-
OpenAI プラットフォーム アカウントを作成する
-
OpenAI API キーを取得する
-
分析接続機能を有効にする Qlik Cloud
-
適切なコネクタ構成を使用して接続を作成する
ロード スクリプトで OpenAI コネクタを使用する
Qlik Sense アプリを作成します。これにロード スクリプトを追加して、OpenAI プラットフォームと通信します。このスクリプトでロードしたテーブルは、アプリのデータ モデルでアクセスできるようになります。
下記のステップを実行します。詳細については、OpenAI 接続からのデータの選択とロード を参照してください。
OpenAI へ送信するデータのテーブルを作成する
最初のステップは、OpenAI に送信するリクエストを含むテーブルを作成することです。リクエストのデータの行は、「Completion」と呼ばれています。各項目のテキストは、テーブルの 1 つの項目 (列) に行として含まれている必要があります。この列の各行は、OpenAI API によって完成されるテキストを示しています。
関連項目には 2 つ目の追加項目を設けることができますが、これは構成で指定された項目名と一致する必要があります。これは、OpenAI に送信されない特別項目ですが、Qlik データ モデルを生成する目的で応答にアタッチされます。
アプリで、データ ロード エディターを開いて、次のコードを新しいスクリプト セクションにペーストします。
SourceTable:
NoConcatenate
LOAD
RowNo() as RowId,
Text
Inline
[Text
translate from English to French: What is the time you go to work?];
このテーブルには、Text と呼ばれる項目が含まれていますが、これには OpenAI に尋ねている質問が 1 つ含まれています。追加の質問は、既存の質問のセルの下に新しい個別のセルとして追加できます。[RowId] 項目は、[関連項目] であり、アプリのデータ モデルに回答をリンクするために次のステップで使用されます。
OpenAI load ステートメントの作成
次のステップは、OpenAI と通信する別の Load ステートメントを作成することです。このステートメントでロードするテーブルは、リクエスト データを送信するのに使用しているテーブルと項目の名前を指しています。要するに、リクエスト項目に対する OpenAI の回答を提供するために、スクリプトによって 2 番目のテーブルがロードされているということです。
スクリプトのこの部分を生成するには、使用する接続の [データの選択] ウィザードを使うことができます。これは、提供するプロパティの名前を含むテンプレート スクリプトを生成します。または、ウィザードを使わずにスクリプト エディターにこのテーブルを手動で追加できます。
データ ロード エディターの [データ ソース] パネルで使用している接続を見つけて をクリックします。これにより、 [データを選択] ウィザードが開きます。
[データの選択] ウィザードを使用している際は、2 つのプロパティを提供する必要があります:
-
常駐テーブルの名前。これは、質問が OpenAI に送信されるテーブルです。この場合、SourceTable です。
-
データ項目の名前。これは、OpenAI に送信される質問を含む項目です。この場合、Text です。
[テーブル] で、openai と呼ばれるテーブルのチェックボックスをクリックします。
[スクリプトの挿入] をクリックすると、新しいテーブルがロード スクリプトに追加されます。
OpenAI load ステートメントが追加されたため、ロード スクリプトは次のようになります。
これでロード スクリプトを実行できます。
アプリにデータをロードする
スクリプトが完成したら、[データのロード] をクリックします。これは OpenAI との通信を実行し、テーブルをアプリのデータ モデルに挿入します。
データ モデル ビューアを開いて、2 つのテーブルが予想通りリンクされていることを確認します。[プレビュー] ペインで、私たちが尋ねた質問に対する OpenAI の回答が 2 番目のテーブルに含まれています。
アプリに読み込まれたデータを使って、分析コンテンツを生成できるようになりました。このデータを使って作成したチャートでは、OpenAI 接続を参照する必要はありません。OpenAI 接続を (ロード スクリプトで使用するのではなく) チャートの数式で直接使用する方法を学習するには、OpenAI コネクタをチャートの数式で使用する を参照してください。
OpenAI コネクタをチャートの数式で使用する
ロード スクリプトを使用してアプリのデータ モデルに OpenAI の質問と回答を追加するだけでなく、アプリのチャートで直接これらの操作を実行することもできます。これは、OpenAI と通信するためにロード スクリプトでテーブルを使用する代替の方法として使用できます。
単一項目のデータは、ユーザーと OpenAI 間で行ったり来たりします。多くの場合、ロード スクリプト接続に使用されるコードは、いくつかの顕著な相違点はあるものの、チャートで再利用することができます。
詳細については、ビジュアライゼーション数式での OpenAI 接続の使用 を参照してください。
データ リクエスト ボリュームに関する注意事項
OpenAI 接続は、データ行が 1 行または少数のチャートの数式でのみ使用することをお勧めします。チャートの数式を使用して OpenAI に大量のデータを送信することは推奨されていません。
各リクエストで送信する行数を把握しておくことが重要です。チャートの数式での接続の設定に誤りがあると、想定外の大きいリクエストが発生する可能性があります (例: チャートでのデータモデルの使用が不適切なため、同じ質問で同じ行が表示される)。サードパーティのプラットフォームとやり取りする前に、チャートの数式の計算で使用される項目と、データ モデルにおけるそれらの位置づけが、サードパーティとの財務契約や請求の取り決めにどのような影響を与えるかを必ず認識してください。外部プラットフォームの使用量が増えると、発生するコストも高くなる可能性があります。
次のガイドラインに従って、リクエストのサイズを軽減および制限してください。
-
[テキストと画像] チャートの数式でのみ接続を使用します。特に 1 つ以上の軸がすでに追加されているテーブルに式を追加する場合は、テーブル オブジェクトで OpenAI 接続を使用しないことを強く推奨します。
-
チャートの数式がアプリのデータ モデルにリンクされている場合、アプリで 1 つの選択が行われたときだけチャートを計算するように、式の中で if 文を使用します。これにより、チャートが OpenAI に送信するリクエストの行数を大幅に減らすことができます。
-
OpenAI 接続を使用して大きなリクエストを送信する場合、チャートの数式ではなくロード スクリプトで接続を使用し、データがデータ モデルに事前にロードされるようにします。
演習: 基本的なチャートの数式の作成
次の手順を実行します。
-
Qlik Sense アプリを作成し、高度な編集モードで新しいシートを開きます。
情報メモチャートの数式に使用する分析接続は、アプリを作成するスペースですでに作成済みである必要があります。これは、アプリ内のデータ ロード エディター、または Analytics アクティビティ センターの [作成] ページから実行できます。 詳細については、「OpenAI 接続の作成」を参照してください。 -
テキストと画像のチャートをシートにドラッグします。
-
プロパティ パネルの [データ] > [メジャー] でメジャーを追加し、[] をクリックして数式エディタを開きます。
-
次の数式を数式エディタに貼り付けます。
endpoints.ScriptAggrStr('{"RequestType":"endpoint", "endpoint":{"connectionname":"Chat_Completions_GPT_3.5_4_Rows","column":"choices.message.content"}}', 'Translate this text from english to spanish: The sun was rising over the new tomorrow with a tinge of excitement.')
情報メモこの例では、単一行のデータのみを送信し、データ モデルへの接続がないため、if ステートメントを使用しなくても問題ありません。他のシナリオでは、if ステートメントを使用して、アプリで単一の項目値が選択された場合にのみチャートが計算されるようにします。 例については、「簡単な例」を参照してください。情報メモこれと同一のコードがアプリで正しく機能するためには、OpenAI 接続も、数式で connectionname と指定されたものと同じ Name 値で設定されている必要があることに注意してください。このチュートリアルで使用する値については、「接続の作成」を参照してください。 -
[適用] をクリックします。
演習: 変数を使用してテキスト入力ボックスを作成する
あるいは、質問文字列をアプリ内で作成した変数名に置き換えることで、アプリ消費者が数式と対話することなく独自の質問を入力できる入力ボックスを作成できます。
このシンプルなインターフェイスを使用すれば、リアルタイムで生成される文脈的情報でアプリのデータを強化することができます。
次の手順を実行します。
-
アプリを作成して、いくつかのデータやビジュアライゼーションを新しいシートに追加します。
-
をクリックして、変数を作成します。この演習では、Name vUserQuestion を提供します。残りのパラメータをブランクのままにします。
-
アセット パネルから、変数入力チャートをシートにドラッグします。これは、[拡張機能] > [Qlik ダッシュボード バンドル] の下にあります。
-
[変数入力] チャートのプロパティ パネルで、[スタイル] > [変数] を展開します。
-
[名前] の下で、[vUserQuestion] を選択します。
-
[表示の設定] で、[入力ボックス] を選択します。
-
アセット パネルから、テキスト & 画像チャートをシートにドラッグします。
-
プロパティ パネルの [データ] >[メジャー] でメジャーを追加し、[] をクリックして数式エディタを開きます。
-
次の数式を数式エディタに貼り付けます。
if(vUserQuestion <> '', endpoints.scriptAggrStr('{"RequestType":"endpoint", "endpoint":{"connectionname":"Chat_Completions_GPT_3.5_4_Rows","column":"choices.message.content"}}',vUserQuestion))
情報メモこれと同一のコードがアプリで正しく機能するためには、OpenAI 接続も、数式で connectionname と指定されたものと同じ Name 値で設定されている必要があることに注意してください。このチュートリアルで使用する値については、「接続の作成」を参照してください。 -
[適用] をクリックします。
-
ニーズに合わせて、これらの入力と回答ボックスのサイズを変更します。
これで、編集メールを終了して、入力ボックスに質問を入力できるようになりました。Enter を押すか、シートの任意の箇所をクリックすると、回答ボックスに OpenAI からの回答が自動入力されます。
この演習での OpenAI 接続は、アプリのデータ モデルとまったく通信しませんが、アプリにロードされたデータと完全に統合され、アプリで選択したことに反応する、より洗練されたアプリを作成することができます。
スペースでの作業については、「変数の作成」と「変数入力コントロール」を参照してください。
ロード スクリプトとチャートの数式モードとの違い
これらのチャートの数式では、前半のロード スクリプト レッスンで入力したコードを再利用しています。次のリストは、ロード スクリプト バージョンとチャートの数式の最も重要な違いを表しています。
-
ScriptEval を ScriptAggrStr に変更しました。これは、単一行のデータを送信して、単一行が戻るのを期待するということを概説しています。これは、この場合の変数や低数値などのようなカスタム データを処理する際に必要となります。「Str」は、テキスト値を送受信していることを示しています。
-
新しいプロパティ column を、choices.message.content の値を使って追加しました。これは、endpoint オブジェクトにネストされています。構成文字列に対するこの追加項目は、コネクタから戻される項目を指定するのに必要です。チャートの数式では、1 つの項目のみが使用されるため、どれかを指定する必要があります。
詳細については、「サーバーサイド拡張構文」を参照してください。