knowledge AutoMateをChatGPTと連携させるタスクサンプル

API連携が可能なAutoMateはChatGPTのAPIを使用することで、タスクの一部としてChatGPTを組み込むことが可能です。
この記事ではシンプルな例として、ダイアログを使用してユーザーの質問の受け付けとその回答を表示するサンプルをご紹介します。

動きのイメージ映像はこちら

以下、タスクのサンプルです。
なお、このタスクをお手元で実行するためには、あらかじめOpenAIのホームページからアカウント作成とAPIキーの生成を行う必要があります。

<AMVARIABLE NAME="var_count" VALUE="1" DESCRIPTION="会話の往復回数(ループの終了条件で使用)" />
<AMVARIABLE NAME="var_body" DESCRIPTION="HTTPリクエストのRequest body" VALUE="" />
<AMVARIABLE NAME="var_display" DESCRIPTION="ダイアログ表示用メッセージ" VALUE="" />
<AMVARIABLE NAME="var_messages" DESCRIPTION="ダイアログに入力されたメッセージ" VALUE="" />
<AMVARIABLE NAME="var_response" DESCRIPTION="HTTPリクエストのレスポンス(JSON)から抽出した回答" VALUE="" />
<AMVARIABLE NAME="var_result" DESCRIPTION="HTTPリクエストのレスポンス(JSON)" VALUE="" />
<!--OpenAIのWebページにて生成したAPIキーを変数に初期値として設定-->
<AMVARIABLE NAME="var_apikey" VALUE="xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" DESCRIPTION="ChatGPT APIのAPI Key" />
<!--会話履歴を格納するデータセットを作成-->
<AMDATASET RESULTDATASET="ds_history" COLUMNS="role,content" DELIMITER="comma" DESCRIPTION="ChatGPTとの会話履歴" />
<!--Loopはダイアログの「キャンセル」で終了する-->
<AMLOOP ACTIVITY="expression" EXPRESSION="True" />
<!--質問の受け付けと会話履歴を表示するダイアログボックスを表示-->
<AMSHOWDIALOG ACTIVITY="input" RESULTVARIABLE="var_messages">%var_display%

メッセージを入力してください(キャンセルを押すと終了):</AMSHOWDIALOG>
<!--質問内容を会話履歴のデータセットの最終行に設定-->
<AMDATASET ACTIVITY="insert_row" DATASET="ds_history" ROWLOCATION="end"><COLUMNSETTER COLUMNNAME="role" VALUE="user" /><COLUMNSETTER COLUMNNAME="content" VALUE="%var_messages%" /></AMDATASET>
<AMREGION NAME="送信用JSONデータ作成" COLLAPSE="no" />
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_body">{
  "model": "gpt-3.5-turbo",
  "messages": [</AMVARIABLE>
<AMLOOP ACTIVITY="dataset" DATASET="ds_history" />
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_body">%var_body%
{"role": "%ds_history.role%", "content": "%ds_history.content%"},</AMVARIABLE>
<AMLOOP ACTIVITY="end" />
<AMTEXT ACTIVITY="trim" TEXT="%var_body%" RESULTVARIABLE="var_body" ACTION="remove_end" REMOVE="user" CHARACTERS="," />
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_body">%var_body%
  ]
}</AMVARIABLE>
<AMENDREGION />
<!--送信用に作成されたJSON文字列をHTTPメソッドを使用してChatGPTのAPIにPOSTし、レスポンスの文字列を変数に格納-->
<AMHTTP ACTIVITY="post" URL="https://api.openai.com/v1/chat/completions" DATA="%var_body%" RESULTVARIABLE="var_result"><HEADER NAME="Content-Type" VALUE="application/json" /><HEADER NAME="Authorization" VALUE="Bearer %var_apikey%" /><FIELD NAME="model" VALUE="gpt-3.5-turbo" /><FIELD NAME="messages" VALUE="%var_messages%" /></AMHTTP>
<!--変数に格納されたレスポンスの文字列からJSONオブジェクトを作成-->
<AMJSON JSONOBJECT="json_chat.%var_count%" JSONSTRING="%var_result%" />
<!--JSONオブジェクトの中から、質問の回答にあたる要素を変数に格納-->
<AMJSON ACTIVITY="get_values" JSONOBJECT="json_chat.%var_count%" PATH="choices[0].message.content" RESULTVARIABLE="var_response" RESULTDATASET="" />
<!--会話履歴のデータセットの最終行に、質問の回答を格納-->
<AMDATASET ACTIVITY="insert_row" DATASET="ds_history" ROWLOCATION="end"><COLUMNSETTER COLUMNNAME="role" VALUE="assistant" /><COLUMNSETTER COLUMNNAME="content" VALUE="%var_response%" /></AMDATASET>
<AMREGION NAME="ダイアログ用メッセージ作成" COLLAPSE="no" />
<!--会話履歴のデータセットの内容をダイアログ表示用の変数に展開-->
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_display">%ds_history(1).role%:%ds_history(1).content%</AMVARIABLE>
<AMLOOP ACTIVITY="dataset" DATASET="ds_history" FROM="2" />
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_display">%var_display%
%ds_history.role%:%ds_history.content%</AMVARIABLE>
<AMLOOP ACTIVITY="end" />
<AMENDREGION />
<AMVARIABLE ACTIVITY="increment" RESULTVARIABLE="var_count" />
<!--ループの先頭に戻り、質問履歴と質問の受け付けダイアログが表示される-->
<AMLOOP ACTIVITY="end" />

【APIキーの取得方法】
タスクで使用するAPIキーは、以下手順で取得可能です。

1. OpenAIのホームページの画面右上"Log in"を選択し、ログイン(アカウントを作成する際は右横の"Sign up"を選択し、ページの指示に従ってアカウントを作成)する。

2. ログイン後、表示される画面から"API"を選択する。

3. 画面右上のアカウントのアイコンをクリックし、表示されるメニューから”View API keys”を選択する。

4. "Create new secret key"をクリックする。

5. 表示されるダイアログに任意のAPIキーの名前を設定し、"Create secret key"を押す。

6. APIキーが発行される。値は一度しか表示されないためコピーし、テキストファイルなどに貼り付けて保持する。