FileMaker と ChatGPT を連携してみた (画像編)
OpenAI が展開している ChatGPT などの AI が巷を賑わせている。
今回は、Claris FileMaker で作成されたカスタム App に格納されている画像を ChatGPT を利用して類推してみたという備忘録です。
1. OpenAI のアカウントの作成
2. 支払い情報の設定
3. SECRET KEYの取得
4. FileMaker Pro でカスタム App を作成
カスタム関数の作成 (任意)
スクリプトの作成
# 画像を認識させるスクリプト in file 画像を認識させる
# ChatGPT に画像を判断してもらう。
# 20240426 p388cell
#
#
ウインドウの固定
ユーザによる強制終了を許可 [ オン ]
#
変数を設定 [ $json ; 値: Get ( スクリプト引数 ) ]
変数を設定 [ $prompt ; 値: JSONGetElement ( $json ; "prompt" ) ]
変数を設定 [ $field_name ; 値: JSONGetElement ( $json ; "field_name" ) ]
変数を設定 [ $base64 ; 値: JSONGetElement ( $json ; "base64" ) ]
変数を設定 [ $OPENAI_API_KEY ; 値: CF_API_KEY ]
#
変数を設定 [ $model ; 値: "gpt-4-vision-preview" ]
変数を設定 [ $temperature ; 値: .7 ]
変数を設定 [ $role ; 値: "user" ]
変数を設定 [ $extension ; 値: Let( [ ~filename = GetContainerAttribute( 画像を認識させる::画像ファイル; "filename" ) ]; GetValue( Substitute( ~filename; "."; ¶); PatternCount( ~filename; ".") + 1 ) ) ]
#
#
#
If [ IsEmpty ( $json ) ]
カスタムダイアログを表示 [ "確認" ; "スクリプト引数が設定されていません。" ]
現在のスクリプト終了 [ テキスト結果: False ]
Else If [ IsEmpty ( $prompt ) ]
カスタムダイアログを表示 [ "確認" ; "プロンプトが設定されていません。" ]
現在のスクリプト終了 [ テキスト結果: False ]
Else If [ IsEmpty ( $field_name ) ]
カスタムダイアログを表示 [ "確認" ; "結果を格納するフィールドが指定されていません。" ]
現在のスクリプト終了 [ テキスト結果: False ]
End If
#
Loop [ フラッシュ: 常に ]
Exit Loop If [ not IsEmpty ( $OPENAI_API_KEY ) or $last_message_choice = 2 ]
カスタムダイアログを表示 [ "確認" ; "OPENAI_API_KEYが設定されていません。openai のサイトに移動して、API key を取得してください。" ; $OPENAI_API_KEY ]
変数を設定 [ $last_message_choice ; 値: Get ( 最終メッセージ選択 ) ]
End Loop
#
If [ $last_message_choice = 2 ]
現在のスクリプト終了 [ テキスト結果: False ]
End If
#
変数を設定 [ $url ; 値: "https://api.openai.com/v1/chat/completions" ]
変数を設定 [ $payload ; 値: JSONSetElement( $payload; [ "model"; $model; JSONString ]) ]
変数を設定 [ $payload ; 値: JSONSetElement( $payload;[ "temperature"; $temperature; JSONNumber ]) ]
If [ IsEmpty ( $base64 ) ]
変数を設定 [ $payload ; 値: JSONSetElement( $payload; [ "messages[0]role"; $role; JSONString ]; [ "messages[0]content"; $prompt; JSONString ] ) ]
Else
変数を設定 [ $payload ; 値: JSONSetElement( $payload; [ "messages[0]role"; $role; JSONString ]; [ "messages[0]content[0]type"; "text"; JSONString ]; [ "messages[0]content[0]text"; $prompt; JSONString ]; [ "messages[0]content[1]type"; "image_url"; JSO… ]
End If
#
テキストを挿入 [ 選択 ; ターゲット: $cURL ; 「curl --location --request POST 'https://api.openai.com/v1/completions' \ --header "Content-Type: application/json" \ --header "Authorization: Bearer $OPENAI_API_KEY" \ -d @$payload」 ]
変数を設定 [ $cURL ; 値: Substitute( $cURL; [ "$OPENAI_API_KEY"; $OPENAI_API_KEY ]; [ "_____prompt_____"; $prompt ] ) ]
URL から挿入 [ 選択 ; ダイアログあり: オフ ; ターゲット: $result ; $url ; cURL オプション: $cURL ]
#
変数を設定 [ $error ; 値: JSONGetElement ( $result ; "error.message" ) ]
#
If [ not IsEmpty ( $error ) ]
カスタムダイアログを表示 [ $error ]
現在のスクリプト終了 [ テキスト結果: False ]
End If
#
フィールドを名前で設定 [ $field_name ; JSONGetElement ( $result ; "choices[0].message.content" ) ]
#
レコード/検索条件確定 [ ダイアログあり: オフ ]
#
現在のスクリプト終了 [ テキスト結果: True ]
#
#
#
#
#
#
#
#
引数は次のように渡します。
JSONSetElement(
"";
[
"prompt";
"この画像について説明してください。";
JSONString
];
[
"field_name";
GetFieldName( 画像を認識させる::結果);
JSONString
];
[
"base64";
Base64Encode( 画像を認識させる::画像ファイル);
JSONString
]
)
サンプル
SECRET KEY は自分のものを利用してください。
参考にさせていただいたサイト
その後見つけた情報
ドンピシャ(ChatGPTとFileMakerと画像の連携)の情報でした。
お金
まだ少ししか試していない。意外とコストは低いかもしれない?
以上、備忘録でした。
この記事が気に入ったらサポートをしてみませんか?