国産iPaaS(HULFT Square) を使ってChatGPTにAWSのエラー原因を教えてもらったらこうなった

こんにちは。γ-GTPの値が高いsugimon:grinning:です。
今日は話題のChatGPTのWebAPIをHULFT Square（iPaaS）から呼んでみようと思います。

まず設定手順ですが下記のような流れでやってみました。
１）OpenAIのアカウント取得
２）OpenAIのAPI Keys取得
３）API Referenceの確認
４）事前準備
５）HULFT Squareスクリプト作成


## １）OpenAIのアカウント取得
こちらのURLのSIGN UPからIDを作りました
https://openai.com/api/

## ２）OpenAIのAPI Keys取得
アカウント取得後、下記のページでAPIを発行しました。
https://platform.openai.com/account/api-keys
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/62c2c2b9-e0b0-5b90-f274-32937a955d5c.png" width=70%>


## ３）API Referenceの確認
今回はcompletionという文章生成の機能をコールしてみます。
下記のようなAPI仕様をしていましてJSON形式のようですね。
https://platform.openai.com/docs/api-reference/completions

model（言語モデル指定）、prompt（問合せ文）、max_tokens（返事のMaxトークン数）あたりがあれば試せそうです。今回使ってみる指定は下記のとおりです。

    {
      "model": "text-davinci-003",
      "prompt": "AWSのエラーメッセージ「AWS was not able to validate the provided access credentials」の原因は？",
      "max_tokens": 200
    }


:::note info
HULFT Squareでは数多くのクラウドサービス、SaaSとデータ連携するシーンがあります。自社のSaaS導入が進むに連れ、運用担当者はSaaS毎にエラーコードやエラー原因をマニュアル等で探す大変さが出てくるのではないでしょうか。そんな時、連携処理中に発生したエラーメッセージの原因をChatGPTが教えてくれたら、その回答をメール本文にセットして自動メール通知することも出来ます！　ChatGPTの回答精度が上がれば現実的に利用可能になる将来もあるかもしれませんね。
:::

本来でしたら連携処理の中でエラーメッセージを動的に取得してjsonデータの中に仕込むことになりますが、今回はAPI検証ということで直接メッセージ文は静的に指定してしまいます。なお、トークンとは自然言語処理で扱われる単語または単語の断片の単位のことようで、ざっくり200にしておきました。


## ４）事前準備
データ連携処理を作る前に２つだけ事前の準備を行います。

#####  １．コネクションの新規作成（ChatGPTのWeb API接続設定）
HULFT Squareの管理画面からコネクションを新規作成します。

| 設定項目 | 値 |
|:-----------|:------------|
|URL| https://api.openai.com/v1/completions|

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/da5c9c24-cd09-f0da-e3da-09ac76c8d51d.png" width=90%>


#####  ２．JSONファイルを用意する
WebAPIを呼び出す際、HULFT SquareにリクエストとレスポンスのJSON形式を覚えさせる必要があります。そのため、それぞれのJSONサンプルデータをファイルに保存しておきます。ファイル拡張子は.jsonでも.txtでも構いません。
ここではあくまでJSONの構造だけ分かればよいので、値の中身は任意で問題ありません。

リクエスト用.json（余計な項目を省くため自分で作りました。上述と同じものです。）

    {
      "model": "text-davinci-003",
      "prompt": "AWSのエラーメッセージ「AWS was not able to validate the provided access credentials」の原因は？",
      "max_tokens": 200
    }

レスポンス用.json（API Referenceのサンプルからコピーしてきました）

    {
      "id": "cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7",
      "object": "text_completion",
      "created": 1589478378,
      "model": "text-davinci-003",
      "choices": [
        {
          "text": "\n\nThis is indeed a test",
          "index": 0,
          "logprobs": null,
          "finish_reason": "length"
        }
      ],
      "usage": {
        "prompt_tokens": 5,
        "completion_tokens": 7,
        "total_tokens": 12
      }
    }


## ５）HULFT Squareスクリプト作成
HULFT Squareの管理画面からプロジェクト、スクリプトを新規作成すると下記のようなノンコーディングの開発画面が表示されます。今回はRESTコネクタの「POST実行」というオペレーションを使います。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/060a304a-6a45-4339-2880-f9ce04f9b434.png" width=70%>


プロパティ設定画面が開きますので必要な設定値を入れておきます。

　
#### 必須設定
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/fec8e4a8-da07-4e12-9ec1-d1764b158d97.png" width=70%>

| 設定項目 | 値 |
|:-----------|:------------|
|接続先|（前述で新規作成したコネクション設定を選びます）
|パス|（コネクション設定の方でURLを最後まで指定したのでここは空で大丈夫です）

　
#### リクエスト設定
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d6ce80e4-6e32-85e2-5c76-7bb89f98b55f.png" width=70%>

| 設定項目 | 値 |
|:-----------|:------------|
|データ入力元|データ
|データ形式|JSON
|JSONファイルを指定して入力スキーマを設定...|（リクエスト用.jsonを読み込ませる）

（入力スキーマ設定はRESTコネクタのお作法的なものなのですが初めての人には何の意味があるのか不明だと思いますので解説記事を別途書いたほうがいいかもですね

　

#### レスポンス設定
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/86ec0cb6-2334-e699-58dc-9356a4843ac1.png" width=70%> 

| 設定項目 | 値 |
|:-----------|:------------|
|データ入力元|データ
|データ形式|JSON
|JSONファイルを指定して入力スキーマを設定...|レスポンス用.jsonを読み込ませる

　
#### ヘッダ設定 - リクエストヘッダ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ead34960-59df-2401-4f1c-4933a17573e5.png" width=70%>

| 名前 | 値 |
|:-----------|:------------|
|Content-Type|application/json
|Authorization|Bearer  \<API Key\>|

 


ここまででRESTコネクタのプロパティ設定が終わりました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/f40fbddc-0d3f-3a00-3bf3-8bc38812e169.png" width=60%>


次にRESTコネクタの入力スキーマに値をセットしていきますので、「マッパー」を下記のように設定していきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/9d0c398a-33c8-e755-cde5-d04956d76697.png" width=60%>
 

マッパーの中で「単一行文字列定数」というロジックを４つ配置してリクエストパラメータをセットしていきます。

| 設定項目 | 値 |
|:-----------|:------------|
|model|text-davinci-003
|prompt|AWSのエラーメッセージ「AWS was not able to validate the provided access credentials」の原因は？
|max_tokens|200
|max_tokens - type|number

API Referenceを見るとmax_tokensだけ数値型となっていましたので、ここではmax_tokensのtype指定に「number」（数値型）を入れます。これを入れないとデフォルト値（文字列型）としてリクエストが飛び、APIサーバから型の不正エラーが返されてしまいます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/95b818af-291b-e26e-2e82-923926636f9e.png" width=100%>

 

次にAPIのレスポンス内容をスクリプト変数に格納するため、変数マッパーを配置します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/66f9dd9d-d385-9139-c1fb-9cc447f4add1.png" width=60%>
 

変数マッパーを開くとRESTコネクタの出力スキーマが展開されていることがわかります。ChatGPTの回答文がroot – choices – element - text に格納されてきますので、スクリプト変数varと線を繋ぎます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/293f28b1-2199-9326-5985-db3a35f15b26.png" width=90%>
 

ここまででスクリプト開発は終了です。
スクリプトをデバッグ実行した結果はこちらです。
トークン200では文面が途中で切れてしまっているようですが、しっかり回答がもらえています！
 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/66f6b0d6-28fa-bb26-83d7-ad98d2d11028.png" width=100%>

##  最後に
さていかがでしたでしょうか。

今回はHULFT Squareを使用しましたが、DataSpiderでも同様にChatGPTを呼び出す事ができます。
また、私はマッパーの設定時にmax_tokensのtype指定に「number」を指定し忘れてしまっていたため、若干ハマりの時間がありましたが、昨今のSaaS Web APIとしてはシンプルな設計で使いやすいものだったかと思います。

皆さんもぜひ業務自動化の中でChatGPTの活用シーンを検討されてはいかがでしょうか。最後までお付き合い頂きありがとうございました。