# 例 – OpenAI 分析コネクタのロード スクリプトとチャートの数式を作成する

これらの例では、OpenAI 分析コネクタを使用して大規模な言語モデルと対話する方法を説明します。これらの例では、AI によって生成されたテキスト コンテンツをデータ モデルとチャートの数式に組み込む方法を示す基本的な演習を紹介します。

これらの例では、OpenAI 分析コネクタの OpenAI Chat Completions API 構成を使用します。

Azure OpenAI コネクタを使用して、この例を完了することもできます。Azure OpenAI コネクタを使用する場合、OpenAI プラットフォームではなく、Microsoft Azure プラットフォームを通じてモデルとやり取りを行います。

## 始める前に:

この例を完了する前に、次のステップを完了する必要があります。

* OpenAI プラットフォーム アカウントを作成する

* OpenAI API キーを取得する

* Qlik Cloud で分析接続機能を有効にする

* 適切なコネクタ構成を使用して接続を作成する

詳細については、次を参照してください。

* [OpenAI プラットフォーム アカウントと Qlik Cloud 環境の設定](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/ac-openai-tutorial.htm#Set)

* [接続の作成](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/ac-openai-tutorial.htm#Create)

## ロード スクリプトで OpenAI コネクタを使用する

Qlik Sense アプリケーションを作成します。これにロード スクリプトを追加して、OpenAI プラットフォームと通信します。このスクリプトでロードしたテーブルは、アプリケーションのデータ モデルでアクセスできるようになります。

下記のステップを実行します。詳細については、[OpenAI 接続からのデータの選択とロード](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/ac-openai-load.htm) を参照してください。

### 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 番目のテーブルがロードされているということです。

スクリプトのこの部分を生成するには、使用する接続の [データの選択] ウィザードを使うことができます。これは、提供するプロパティの名前を含むテンプレート スクリプトを生成します。または、ウィザードを使わずにスクリプト エディターにこのテーブルを手動で追加できます。

データ ロード エディターの [データ ソース] パネルで使用している接続を見つけて the データを選択 icon をクリックします。これにより、 [データを選択] ウィザードが開きます。

データ ロード エディターの分析接続のための [データの選択] ボタン

データ ロード エディターの分析接続のための [データの選択] ボタン

データ ロード エディターの分析接続のための [データの選択データの選択] ボタン ![データ ロード エディターの「データの追加」タブに、「データの選択」アイコンの吹き出しが表示されます](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_analytic_connection_select-data_gui3.png)

[データの選択] ウィザードを使用する場合は、次の 2 つのプロパティを指定する必要があります。

* 常駐テーブルの名前。これは、質問が OpenAI に送信されるテーブルです。この場合、`SourceTable` です。

* データ項目の名前。これは、OpenAI に送信される質問を含む項目です。この場合、`Text` です。

[テーブル] で、openai と呼ばれるテーブルのチェックボックスをクリックします。

データ ロード エディターの [データの選択] ウィザード

データ ロード エディターの [データの選択] ウィザード

データ ロード エディターの [データの選択データの選択] ウィザード ![「データの選択」ウィザードでは、ユーザーが入力した常駐テーブルとデータ項目の値が表示され、それに応じて分析コネクタから返される可能性のある列のリストが表示されます。](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_openai_connection_select-data_wizard_chat.png)

[スクリプトの挿入] をクリックすると、新しいテーブルがロード スクリプトに追加されます。

OpenAI load ステートメントが追加されたため、ロード スクリプトは次のようになります。

```
SourceTable:
NoConcatenate
LOAD 
RowNo() as RowId,
Text
Inline
[Text
translate from English to French: What is the time you go to work?];

[openai]:
LOAD
[id],
[object],
[created],
[model],
[prompt_tokens],
[completion_tokens],
[total_tokens],
[choices.message.role],
[choices.message.content],
[choices.index],
[choices.finish_reason],
[RowId]
EXTENSION endpoints.ScriptEval('{"RequestType":"endpoint", "endpoint":{"connectionname":"OpenAI_Examples_Intro"}}', SourceTable);
```

情報メモこれと同一のコードがアプリケーションで正しく機能するためには、OpenAI 接続も、上記のロード スクリプトで `connectionname` と指定されたものと同じ Name 値で設定されている必要があります。このチュートリアルで使用する値については、「[接続の作成](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/ac-openai-tutorial.htm#Create)」を参照してください。

これでロード スクリプトを実行できます。

### アプリケーションにデータをロード中

スクリプトが完成したら、[データのロード] をクリックします。これは OpenAI との通信を実行し、テーブルをアプリケーションのデータ モデルに挿入します。

情報メモスクリプトのロード時にエラーが発生した場合、接続構成のオプションのセカンダリ [関連項目] とロード スクリプトの間に不一致がある可能性があります。接続の構成で [関連項目] を定義した場合、リクエスト スクリプトにも含まれるようにします。

データ モデル ビューアを開いて、2 つのテーブルが予想通りリンクされていることを確認します。[プレビュー] ペインで、尋ねた質問に対する OpenAI の回答が 2 番目のテーブルに含まれています。

OpenAI 接続から作成されたデータ モデル

OpenAI 接続から作成されたデータ モデル

OpenAIOpenAI 接続から作成されたデータ モデル ![2 つのテーブルを含む結果のデータモデルを表示しているデータ モデル ビューア。](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_openai_connection_data_model_chat.png)

アプリケーションにロードされたデータを使用して、分析コンテンツを生成できるようになりました。このデータを使用して作成するチャートでは、OpenAI 接続を参照する必要はありません。OpenAI 接続を (ロード スクリプトで使用するのではなく) チャートの数式で直接使用する方法を学習するには、[OpenAI コネクタをチャートの数式で使用する](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/ac-openai-tutorial-example-3.htm#Using) を参照してください。

## OpenAI コネクタをチャートの数式で使用する

ロード スクリプトを使用してアプリケーションのデータ モデルに OpenAI の質問と回答を追加するだけでなく、アプリケーションのチャートで直接これらの操作を実行することもできます。これは、OpenAI と通信するためにロード スクリプトでテーブルを使用する代替値となります。

単一項目のデータは、ユーザーと OpenAI 間で行ったり来たりします。多くの場合、ロード スクリプト接続に使用されるコードは、いくつかの顕著な相違点はあるものの、チャートで再利用することができます。

詳細については、[ビジュアライゼーション数式での OpenAI 接続の使用](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/ac-openai-use.htm) を参照してください。

### データ リクエスト ボリュームに関する注意事項

OpenAI 接続は、データ行が 1 行または少数のチャートの数式でのみ使用することをお勧めします。チャートの数式を使用して OpenAI に大量のデータを送信することは推奨されていません。

各リクエストで送信する行数を把握しておくことが重要です。チャートの数式での接続の設定に誤りがあると、想定外の大きいリクエストが発生する可能性があります (例: チャートでのデータモデルの使用が不適切なため、同じ質問で同じ行が表示される)。サードパーティのプラットフォームとやり取りする前に、チャートの数式の計算で使用される項目と、データ モデルにおけるそれらの位置づけが、サードパーティとの財務契約や請求の取り決めにどのような影響を与えるかを必ず認識してください。外部プラットフォームの使用量が増えると、発生するコストも高くなる可能性があります。

次のガイドラインに従って、リクエストのサイズを軽減および制限してください。

* チャートの数式を操作するときは、テキスト オブジェクト (Dashboard bundle から) 内の接続のみを使用します。特に 1 つ以上の軸がすでに追加されているテーブルに式を追加する場合は、テーブル オブジェクトで OpenAI 接続を使用しないことを強く推奨します。

* チャートの数式がアプリケーションのデータ モデルにリンクされている場合、アプリケーションで 1 つの選択が行われたときだけチャートを計算するように、式の中で if 文を使用します。これにより、チャートが OpenAI に送信するリクエストの行数が大幅に削減されます。

* OpenAI 接続を使用して大きなリクエストを送信する場合、チャートの数式ではなくロード スクリプトで接続を使用し、データがデータ モデルに事前にロードされるようにします。

### 演習: 基本的なチャートの数式の作成

次の手順を実行します。

1. Qlik Sense アプリケーションを作成し、編集モードで新しいシートを開きます。

   情報メモチャートの数式に使用する分析接続は、アプリケーションを作成するスペースですでに作成済みである必要があります。これは、アプリケーション内のデータ ロード エディター、または 分析 アクティビティ センターの [作成] ページから実行できます。詳細については、「[OpenAI 接続の作成](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/ac-openai-create.htm)」を参照してください。

2. アセット パネルで、 [チャート] を開きます。

3. [ダッシュボード オブジェクト] で、 [テキスト] オブジェクトをシートにドラッグします。

4. プロパティ パネルの [データ] &gt;[メジャー] でメジャーを追加し、 [the 式 icon] をクリックして数式エディターを開きます。

5. 次の数式を数式エディタに貼り付けます。

   ```
   endpoints.ScriptAggrStr('{"RequestType":"endpoint", "endpoint":{"connectionname":"OpenAI_Examples_Intro","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` ステートメントを使用して、アプリケーションで単一の項目値が選択された場合にのみチャートが計算されるようにします。 例については、「[簡単な例](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/ac-openai-use.htm#Quick)」を参照してください。

   情報メモこれと同一のコードがアプリケーションで正しく機能するためには、OpenAI 接続も、数式で `connectionname` と指定されたものと同じ Name 値で設定されている必要があることに注意してください。このチュートリアルで使用する値については、「[接続の作成](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/ac-openai-tutorial.htm#Create)」を参照してください。

6. [適用] をクリックします。

OpenAI の応答が表示された Qlik Sense [テキスト] オブジェクト

OpenAI の応答が表示された Qlik Sense [テキスト] オブジェクト

OpenAIOpenAI の応答が表示された Qlik SenseQlik Sense [テキストテキスト] オブジェクト ![OpenAI からの回答が表示された Qlik Sense シート オブジェクト。](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_openai_connection_chart_expression-sheet.png)

### 演習: 変数を使用してテキスト入力ボックスを作成する

あるいは、質問文字列をアプリケーション内で作成した変数名に置き換えることで、アプリケーション消費者が数式と対話することなく独自の質問を入力できる入力ボックスを作成できます。

このシンプルなインターフェイスを使用すれば、リアルタイムで生成される文脈的情報でアプリケーションのデータを強化することができます。

次の手順を実行します。

1. アプリケーションを作成して、いくつかのデータやビジュアライゼーションを新しいシートに追加します。

2. the 変数 icon をクリックして、変数を作成します。この演習では、Name vUserQuestion を提供します。残りのパラメータをブランクのままにします。

3. アセット パネルから、変数入力チャートをシートにドラッグします。これは、the カスタム オブジェクト icon [] &gt; [Qlik ダッシュボード バンドル] にあります。

4. [変数入力] チャートのプロパティ パネルで、 [スタイル] &gt; [変数] を展開します。

5. [名前] の下で、[vUserQuestion] を選択します。

6. [表示の設定] で、 [入力ボックス] を選択します。

7. アセット パネルで、the カスタム オブジェクト icon [] &gt; [Qlik ダッシュボード バンドル] から、シート上に [テキスト] オブジェクトをドラッグします。

8. プロパティ パネルの [データ] &gt;[メジャー] でメジャーを追加し、 [the 式 icon] をクリックして数式エディターを開きます。

9. 次の数式を数式エディタに貼り付けます。

   ```
   if(vUserQuestion <> '', endpoints.scriptAggrStr('{"RequestType":"endpoint", "endpoint":{"connectionname":"OpenAI_Examples_Intro","column":"choices.message.content"}}',vUserQuestion))
   ```

   情報メモこれと同一のコードがアプリケーションで正しく機能するためには、OpenAI 接続も、数式で `connectionname` と指定されたものと同じ Name 値で設定されている必要があることに注意してください。このチュートリアルで使用する値については、「[接続の作成](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/ac-openai-tutorial.htm#Create)」を参照してください。

10. [適用] をクリックします。

11. ニーズに合わせて、これらの入力と回答ボックスのサイズを変更します。

これで、編集メールを終了して、入力ボックスに質問を入力できるようになりました。Enter を押すか、シートの任意の箇所をクリックすると、回答ボックスに OpenAI からの回答が自動入力されます。

一般的なデータと OpenAI に質問する入力ボックスが表示されたシンプルなシート

一般的なデータと OpenAI に質問する入力ボックスが表示されたシンプルなシート

一般的なデータと OpenAIOpenAI に質問する入力ボックスが表示されたシンプルなシート ![OpenAI からの回答が表示された Qlik Sense シート オブジェクト。](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_openai_simple_text-input.png)

この演習での OpenAI 接続は、アプリケーションのデータ モデルとまったく通信しませんが、アプリケーションにロードされたデータと完全に統合され、アプリケーションで選択したことに反応する、より洗練されたアプリケーションを作成できます。

スペースでの作業については、「[変数の作成](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Variables/create-variable-using-dialog.htm)」と「[変数入力コントロール](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Visualizations/DashboardBundle/variable-input.htm)」を参照してください。

### ロード スクリプトとチャートの数式モードとの違い

これらのチャートの数式では、前半のロード スクリプト レッスンで入力したコードを再利用しています。次のリストは、ロード スクリプト バージョンとチャートの数式の最も重要な違いを表しています。

* ScriptEval を ScriptAggrStr に変更しました。これは、単一行のデータを送信して、単一行が戻るのを期待するということを概説しています。これは、この場合の変数や低数値などのようなカスタム データを処理する際に必要となります。「Str」は、テキスト値を送受信していることを示しています。

* 新しいプロパティ column を、choices.message.content の値を使って追加しました。これは、endpoint オブジェクトにネストされています。構成文字列に対するこの追加項目は、コネクタから戻される項目を指定するのに必要です。チャートの数式では、1 つの項目のみが使用されるため、どれかを指定する必要があります。

詳細については、「[サーバーサイド拡張構文](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/sse-syntax.htm)」を参照してください。

## 詳細を見る

* [サーバーサイド拡張構文](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/sse-syntax.htm)
* [GetSelectedCount - チャート関数](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FieldFunctions/getselectedcount.htm)
* [数式での変数の使用](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Variables/work-with-variables.htm)