GPTsのActionを使ってHULFT SquareのAPIを呼び出す

# 本当のインテリジェンスを得たい
ますますデータは複雑化しています。セキュリティやガバナンスなど悩みどころも増加中です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161223/80696099-675e-ebcb-1226-f7a782234065.png)

最近は上記の絵を使いつつ、どこでETLすべきかとかの話をよくするのですが、GPTsを使うとこの辺りの考え方が変わりそうなので、まずはHULFT SquareとGPTsの連携方法を記しておこうと思います。

## HULFT Square側の設定
### スクリプト作成
DataSpiderやHULFT Squareをお使いの方であれば馴染み深いですが簡単です。取得データをコネクタを使って取得します。そして、変数を作成し、「スクリプト出力変数として使用する」でOKです。ここでは "response"として定義します。
なお、ここではHSQ StorageにあるCSVファイルを読み込んで回答しています。もちろんRDBなどへのアクセスも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161223/ed9c0c6c-ae57-b8d6-4764-e103c7e01c20.png)
MapperはシンプルにCSVを読み込んでresponseに格納しています。特定文字列の変換などを行うことでよりセキュアにすることも可能です。(MapperはCSVから型を自動で読み込むので何も操作せずこの状態にできます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161223/8e988175-be82-d82d-29aa-250fe017607b.png)
### APIクライアントの作成
セキュリティはとても大事です。誰がアクセスできるかを指定します。ここで指定したユーザーのTokenをGPTsから利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161223/d9ee2e5d-3c2a-e85d-f476-408e4a5c907b.png)
### APIプロジェクトの作成
最初に作ったスクリプトを指定します。そして、レスポンスの設定をします。戻り値はすでに定義ずみの"response"を指定します。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161223/15f8a065-91ce-48dc-5d36-b369b91f2209.png)
### REST APIジョブの設定
これまでに作成したものをAPIとして外部からのリクエストを受けられるように設定します。
プロジェクトとセキュリティ設定であるAPIクライアントを選ぶだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161223/64fc93f0-92b4-808d-ca32-cc5dc470af64.png)

## GPTsの設定
### GPTsの作成
My GPTsからGPTsを作成し、新しいアクションを作成します。
### 認証の設定
API Key, Bearerを指定します。API KeyにはHULFT SquareのREST Jobにアクセスできるユーザーのアクセストークンを貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161223/005c3023-69a9-6e3d-f696-e16787391f9e.png)
なお、アクセストークンは以下から取得します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161223/6ba32230-a8cd-a5f6-07a7-6cbc3cc5e718.png)
### スキーマ定義
以下は最低限動くだけのサンプルですが、ChatGPTに聞いても教えてくれます。なお、operationIdに適切な名前を書くことで、GPTsとしての正確性も高まります。
```
openapi: 3.1.0
info:
  title: Sample API
  description: Description of your API.
  version: 0.1.0
servers:
  - url: https;//(APIとしてHULFT Squareで表示されたもの)
    description: Main API server
paths:
  /RPACom:
    get:
      operationId: getEmployeeExpenseData
      summary: Retrieve employee's expense data
      responses:
        "200":
          description: Successful response
          content:
            application/xml:
              schema:
                type: object
                properties:
                  exampleField:
                    type: string

```
### 動作確認
テストボタンを押して動作確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161223/df6450cf-c2b5-05df-add2-64bfe152cbd1.png)
エラーが出た場合は右側のWindowで質問するとどんなエラーか教えてくれます。
### 保存して公開
これで自由に使えるようになります。わざわざ「アクションを叩いて」とか言わなくても必要なことを教えてくれます。
以下のような感じで、レスポンスに含まれる情報を分析した上で教えてくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161223/ef3ea84c-619e-dd44-ea73-2008f1f792ec.png)


# 最後に
まだ、大きなレスポンスなどはエラーになるようだが一定レベルであれば、回答されたデータを元に分析結果を出してくれます。
もちろん、セキュリティやガバナンスやデータの変換などの前処理が不要になるわけではないが、どこで何を行うか？というアーキテクチャは少し変わりそうに感じています。

とても楽しみな世界が待っている。