FileMakerとAIの連携ガイド - openAI API 接続して画像を文章に変換させる(2025.05版)

AIの使い方

まず、OpenAI を利用してみましょう。プロンプト(リクエストメッセージ)をAIに投げて回答を得てみましょう

プロンプトの例

レシート画像から日付(yyyy/mm/dd形式)、取引先(購入店名)、支払金額(合計欄)、消費税消費税額(内消費税額等の記載額)を
カンマ区切りで抽出してください。回答は円記号は不要でカンマ区切りの値のみで結構です。(画像を添付して投げてみます)

Claris FileMakerとAIを接続するメリット

そもそもFileMakerは「リレーショナルデータベース」です。
「データベース」は「データを箱に貯めて利活用することが目的」です。

AIと接続することにより、AIの回答をFileMakerのレコードに追加できると使い方によって大きな効果が得られます。

Open AIとの接続と利用方法について

予備知識

openAI API 認証

https://auth.openai.com/log-in
こちらからログインします

キャプチャ画像

API キーの取得

キャプチャ画像

参考資料:
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"
}

FileMakerでのJSONの読み書き方法

JSONデータ

  1. 基本構造 (キー と 値 のセット)

    { "項目" : "値" }
  2. 配列: 値を並べたもの

    配列 - 1 (単に並べた場合)

    [ "A", "B", "C" ]

    配列 - 2 (配列に キー と 値 を追加している)

    [ {"都道府県": "岐阜県", "市区町村": "大垣市", "市外局番": "0584" } ]
  3. 応用例

    { "取引先": [ {"会社名":"ワークスペース", "住所":"下呂市", "電話番号":"0576-12-1234"} ] }

FileMakerでJSONデータを分解する

基本構文

JSONGetElement ( json ; キーまたは索引またはパス )

書き方:
上の応用例から会社名を取得する

JSONGetelement ( $変数; "取引先[0]会社名" )

** 配列の先頭は 0番目、以降 1番目、2番目 ...

FileMakerでJSON形式のデータを人の目でも読みやすくする

基本構文

JSONFormatElements ( $変数 )

FileMakerでJSONデータを作成する

基本構文

JSONSetElement ( json ; キーまたは索引またはパス ; 値 ; タイプ )

書き方:
上の応用例のとおりに書く

JSONSetElement ( 
  "";
  [ "取引先[0]会社名"; "ワークスペース"; JSONString];
  [ "取引先[0]住所"; "下呂市"; JSONString];
  [ "取引先[0]電話番号"; "0576-20-4316"; JSONString]
)

** 長いJSONデータの書き方 = 小さいものから順番に大きくなるように書いてゆく

では、FileMakerで作成しよう

ここでは、シンプルに2つのテーブルと8つのフィールドだけを使い
openAIにAPI連携する方法を示します

テーブル1. レポート (画像を格納して、格納した画像から文章を作成するテーブル)

テーブル名: レポート

フィールド:

テーブル2. 汎用性のあるテーブル (設定テーブル)

テーブル名: Common

Commonテーブルは設定情報を格納するだけなので、実質1テーブル3フィールドで構成されます。

リレーション:

  1. レポートテーブルとCommonテーブル(T/O名はレポート_Commonとする)をデカルト積[X]で接続します。
  2. Commonテーブル
キャプチャ画像

レイアウトを作成しよう

1. 先に設定 (Commonテーブル) のレイアウトを作成します

キャプチャ画像

2. 続いて、(レポートテーブル) のレイアウトを作成します

キャプチャ画像

スクリプトを書いて試してみよう

1. APIキーを変数に追加する

変数を設定

変数名: $api_key

値: レポート_Common::OpenAIAPIキー

2. 画像データ(サムネイル)をエンコード(テキスト化)する

変数を設定

変数名: $image_data

値:

/* ----- ここから ----- */
Let(
  [ImageData = "data:image/jpeg;base64," & Base64Encode ( レポート::画像サムネイル )];

  Substitute ( 
    ImageData;
    [Char(13); ""];
    [Char(10); ""]
  )
)
/* ----- // ここまで ----- */

3. 最も小さい単位のJSONを作成

変数を設定

変数名: $content_array

値:

/* ----- ここから ----- */
JSONSetElement ( "[]" ;
  [ "[0].type"; "text"; JSONString ];
  [ "[0].text"; レポート_Common::写真解析プロンプト; JSONString ];
  [ "[1].type"; "image_url"; JSONString ];
  [ "[1].image_url.url"; $image_data; JSONString ]
)
/* ----- // ここまで ----- */

4. 次に小さい単位のJSONを作成

変数を設定

変数名: $messages_array

値:

/* ----- ここから ----- */
JSONSetElement ( "[]" ;
  [ "[0].role"; レポート_Common::Role; JSONString ];
  [ "[0].content"; $content_array; JSONArray ]
)
/* ----- // ここまで ----- */

5. 最後に大きい値のJSONでまとめる

変数を設定

変数名: $json_payload

値:

/* ----- ここから ----- */
JSONSetElement ( "" ;
  [ "model"; レポート_Common::OpenAIモデル; JSONString ];
  [ "messages"; $messages_array; JSONArray ];
  [ "max_tokens"; 300; JSONNumber ]
)
/* ----- // ここまで ----- */

6. cURLのリクエスト文を完成させる

変数を設定

変数名: $curl_options

値:

/* ----- ここから ----- */
"-X POST " &
"-H \"Content-Type: application/json\" " &
"-H \"Authorization: Bearer " & $api_key & "\" " &
"--data " & Quote ( $json_payload )
/* ----- // ここまで ----- */

7. openAIに投げかける

URLから挿入

ターゲット: $result

URLを指定: レポート_Common::エンドポイント

cURLオプションの指定: $curl_options

8. 取得した解析結果をフィールドに格納する

フィールド設定

フィールド名: レポート::ai画像解析レポート

値: JSONGetElement ( $result; "choices[0]message.content" )

9. 保存

レコード/検索条件確定 [ ダイアログあり: オフ ]

以上で、スクリプトを実行すると、プロンプトに基づいてAIが答えを返してくれるはずです。