まず、OpenAI を利用してみましょう。プロンプト(リクエストメッセージ)をAIに投げて回答を得てみましょう
そもそもFileMakerは「リレーショナルデータベース」です。
「データベース」は「データを箱に貯めて利活用することが目的」です。
AIと接続することにより、AIの回答をFileMakerのレコードに追加できると使い方によって大きな効果が得られます。
https://auth.openai.com/log-in
こちらからログインします
参考資料:
https://qiita.com/kurata04/items/a10bdc44cc0d1e62dad3
参考資料 - 1:
https://platform.openai.com/docs/pricing
参考資料 - 2:
https://ai-market.jp/technology/chatgpt-4-turbo/#i-3
https://platform.openai.com/settings/organization/usage
FileMaker で API を使い AI に接続するには、cURL を利用します
(* cURL とは URL を使ってデータを転送するためのコマンドラインツールです )
例:
curl https://api.openai.com/v1/chat/completions \ ** エンドポイント -H "Content-Type: application/json" \ ** ヘッダ -H "Authorization: Bearer $OPENAI_API_KEY" \ ** 認証(API Key) -d ※ データ
※データの例は以下
{ "max_tokens" : 300, "messages" : [ { "content" : [ { "text" : "** プロンプトが入ります **", "type" : "text" }, { "image_url" : { "url" : "data:image/jpeg;base64," }, "type" : "image_url" } ], "role" : "user" } ], "model" : "gpt-4-turbo" }
基本構造 (キー と 値 のセット)
{ "項目" : "値" }
配列: 値を並べたもの
配列 - 1 (単に並べた場合)
[ "A", "B", "C" ]
配列 - 2 (配列に キー と 値 を追加している)
[ {"都道府県": "岐阜県", "市区町村": "大垣市", "市外局番": "0584" } ]
応用例
{ "取引先": [ {"会社名":"ワークスペース", "住所":"下呂市", "電話番号":"0576-12-1234"} ] }
基本構文
JSONGetElement ( json ; キーまたは索引またはパス )
書き方:
上の応用例から会社名を取得する
JSONGetelement ( $変数; "取引先[0]会社名" )
** 配列の先頭は 0番目、以降 1番目、2番目 ...
基本構文
JSONFormatElements ( $変数 )
基本構文
JSONSetElement ( json ; キーまたは索引またはパス ; 値 ; タイプ )
書き方:
上の応用例のとおりに書く
JSONSetElement ( ""; [ "取引先[0]会社名"; "ワークスペース"; JSONString]; [ "取引先[0]住所"; "下呂市"; JSONString]; [ "取引先[0]電話番号"; "0576-20-4316"; JSONString] )
** 長いJSONデータの書き方 = 小さいものから順番に大きくなるように書いてゆく
ここでは、シンプルに2つのテーブルと8つのフィールドだけを使い
openAIにAPI連携する方法を示します
テーブル名: レポート
フィールド:
テーブル名: Common
Commonテーブルは設定情報を格納するだけなので、実質1テーブル3フィールドで構成されます。
1. 先に設定 (Commonテーブル) のレイアウトを作成します
2. 続いて、(レポートテーブル) のレイアウトを作成します
変数を設定
変数名: $api_key
値: レポート_Common::OpenAIAPIキー
変数を設定
変数名: $image_data
値:
/* ----- ここから ----- */ Let( [ImageData = "data:image/jpeg;base64," & Base64Encode ( レポート::画像サムネイル )]; Substitute ( ImageData; [Char(13); ""]; [Char(10); ""] ) ) /* ----- // ここまで ----- */
変数を設定
変数名: $content_array
値:
/* ----- ここから ----- */ JSONSetElement ( "[]" ; [ "[0].type"; "text"; JSONString ]; [ "[0].text"; レポート_Common::写真解析プロンプト; JSONString ]; [ "[1].type"; "image_url"; JSONString ]; [ "[1].image_url.url"; $image_data; JSONString ] ) /* ----- // ここまで ----- */
変数を設定
変数名: $messages_array
値:
/* ----- ここから ----- */ JSONSetElement ( "[]" ; [ "[0].role"; レポート_Common::Role; JSONString ]; [ "[0].content"; $content_array; JSONArray ] ) /* ----- // ここまで ----- */
変数を設定
変数名: $json_payload
値:
/* ----- ここから ----- */ JSONSetElement ( "" ; [ "model"; レポート_Common::OpenAIモデル; JSONString ]; [ "messages"; $messages_array; JSONArray ]; [ "max_tokens"; 300; JSONNumber ] ) /* ----- // ここまで ----- */
変数を設定
変数名: $curl_options
値:
/* ----- ここから ----- */ "-X POST " & "-H \"Content-Type: application/json\" " & "-H \"Authorization: Bearer " & $api_key & "\" " & "--data " & Quote ( $json_payload ) /* ----- // ここまで ----- */
URLから挿入
ターゲット: $result
URLを指定: レポート_Common::エンドポイント
cURLオプションの指定: $curl_options
フィールド設定
フィールド名: レポート::ai画像解析レポート
値: JSONGetElement ( $result; "choices[0]message.content" )
レコード/検索条件確定 [ ダイアログあり: オフ ]
以上で、スクリプトを実行すると、プロンプトに基づいてAIが答えを返してくれるはずです。