makeを使ってNotionのdatabase itemsからLLMをチューニングするためのデータセット(JSONファイル)を作ってみたい

2023.08.28

内部の情報をもとにしたAIチャットぼっとを試作する際に利用するためのデータセットのサンプルとして、Notionのデータベースのアイテムを利用してみます。

想定するシナリオですが、

  • 人間がよくある質問集 といったものをNotionのデータベースを使って登録している
  • makeでNotionのデータベースをウォッチ
  • 抽出したアイテムの情報を使ってデータセットを作成する

になります。

前提

Notionのデータベースをmakeに表示できるようにする

Notionのインターナる接続の場合、デフォルトではデータベースIDフィールド>検索オプションにデータベースは表示されません。Notionアカウントから手動でMakeアプリに追加する必要があります。

Makeに追加したいNotionのデータベースに入り、右上の...をクリックし、接続の追加をクリックし、

以前作成したIntegrationを検索してクリックし、確認をクリックします。

Limitには、1回の実行で

makeのシナリオ作成

シナリオを新規作成し、Notionのアプリケーションを追加します。

トリガ−となるモジュールを追加

ここでは、Notionのデータベースに登録されるアイテムを監視するモジュールを追加します。

Watch Database Itemsを選択します。

Notionへの接続設定を追加します。

ADDをクリックすると、詳細画面が立ち上がるので、

Connection type を Notion internalにし、接続名と、前提条件であるNotionのInternal Integration Secretをコピーしたものを貼り付けます。

データベースのウォッチ条件を選択します。アイテムが作られた時間か、更新された時間か のどちらかになります。

ウォッチするDatabase IDがわかっているのであれば入力します。

検索することもできるますので、出てきたデータベースを選択しましょう

Limitには、1回の実行で処理する最大数を入力します。

Array Aggregator モジュールを追加

Array AggregatorモジュールをNotionモジュールの後に接続します。

モジュールのセットアップで、Source Moduleで追加しているNotionモジュールを選択する。他のフィールドはそのままにしておきます。

Json作成のモジュールを追加

Array Aggregatorモジュールの後にJSON > Create JSONモジュールを接続します。

モジュールのセットアップには、JSON形式を記述するデータ構造が必要です。 Create a data structure ボタンをクリックして、データ構造のセットアップを開きます。

このデータ構造を作成する最も簡単な方法は、JSONサンプルから自動生成することです。

Generatorボタンをクリックし、JSON サンプルを Sample data フィールドに貼り付けます。

複数のデータを扱うため、配列にしたJSONを使用.

サンプル)

{
 "faq":[
  {
   "id":  "ID",
   "product": "Product",
   "input": "Input",
   "instruction": "Instruction",
   "output": "Output"
  }
 ]
}

保存をクリックする。データ構造セットアップの仕様フィールドに、生成された構造が含まれるはずです。

Data structure nameを適切なものに変更しておきましょう。

保存後、JSONモジュールのセットアップで、ルート配列属性に対応するフィールドがマッピング可能に表示されるようになりました。

フィールドの横にあるMapボタンをクリックして、

Array Aggregatorモジュールから出力されたアイテム(Array[])を、このモジュールに渡します。

その後、OKを押してJSONモジュールのセットアップは完了です。

Array Aggregatorモジュールの更新

Array Aggregatorモジュールのセットアップを開きます。

Target structure typeをカスタムから、先ほど作成したJSONモジュールのフィールドに変更します。

notionモジュールから出力された項目を適切なフィールドにマッピングします

OKをクリックして Array Aggregator モジュールのセットアップを終了します。

シナリオを実行してみる

Run Onceを押して、作成したシナリオを実行し、JSONとして出力されているか確認します。

設定通りにOUTPUTされるようになるはずです。

JSONモジュールで作成したJSONは、 HTTPリクエストのボディとして使用したり、Webhookのレスポンスとして返したりすることができます。

ファイルとして保存することも可能ですので、今後の使い方によってどのように扱うかを決めていきましょう。

※ 今回のようにJSONに変換するモジュールはシナリオの最後のモジュールではあってはならないと警告が出ます。

※ 今回はGoogle ドライブに保存するようにしてみました

~~~~~~

LLMのトレーニング用データセットとして使うため(質問応答のようなタスクに使うには、モデルの性能向上のためInstruction-tuningという方法を使うといいらしい)、 Notionのデータベースにまとめていった情報を自動的にjsonファイルにしてみました。

今回は新規の作成しか試せていませんが、データ元となるNotionの方で更新があったり、削除された時の出力も考えないといけませんね。