
目次
- Calc Writer のスクリプト
- ChatGPT API を利用するには
- API を実行する方法
- リクエストの内容
- ChatGPT API のメッセージオブジェクト
- 日本語環境での利用
- まとめ
生成 AI の技術がビジネスでも活用され始めているなか、Claris FileMaker 2024 (バージョン 21 ) でも生成 AI を利用したセマンティック検索が可能となりました。
(参考動画)Claris Web セミナー : Claris FileMaker 2024 では、AI と連携することが可能になりました
しかし、生成 AI の可能性はそれだけにとどまりません。やはり FileMaker のカスタム App 開発者からすれば「生成 AI を App 開発に活用できないか」と思われるのは当然でしょう。 そこで、今回は生成 AI を利用して FileMaker の計算式を作成してくれるサンプル App 「Calc Writer」を題材に、その裏側で何が行われているのか、主に ChatGPT API を利用したリクエストの中身に焦点を当てて解説します。実際のカスタム App もダウンロードいただけますのでぜひご自身でもお試しください。
Calc Writer については Claris Roadshow Osaka 2024 のオープニングキーノートでもご紹介していますので、まずはこちらをご覧ください。
1. Calc Writer のスクリプト
「Calc Writer」にはたくさんのスクリプトが作成されています。「LLM providers」フォルダには OpenAI 以外にも Anthropic、Cohere、LM Studio の API を実行するためのスクリプト、「Utilities」フォルダには画面制御などに利用しているサブスクリプトやスクリプトトリガが含まれていますので興味がある方はこちらも参考にしてください。

Calc Writer のスクリプト
その中で、今回注目するスクリプトは次の 2 つです。
- OnFirstWindowOpen・・・実行するために必要な API Key を保存しています。
- [sbr] Generate calculation expression - OpenAI・・・説明フィールドに入力した内容から Open AI の API を呼び出して結果(FileMaker の計算式)を得ています。
2. ChatGPT API を利用するには
スクリプトの詳細に入る前に ChatGPT API を使用するための下準備について少し触れておきます。 OpenAI 社の API を利用するためには OpenAI のアカウント作成が必要です。その後、Open AI の管理画面より API Key を発行し、それをカスタム App の中で指定することで API が利用できます。まだアカウントをお持ちでない方は Open AI 社の Web サイトからアカウント作成しておきましょう。
*API を利用するためには API 利用のクレジットを購入する必要があります。
API Key の取得ができたら OnFirstWindowOpen スクリプトのグローバル変数 $$APIkey に登録します。このスクリプトは初回起動時しか動作しませんので API Key の登録後は手動で実行が必要です。

OnFirstWindowOpen スクリプトトリガに設定されたスクリプト
3. API を実行する方法
API の実行については、[sbr] Generate calculation expression - OpenAI スクリプトから OpenAI の API を呼び出しています。FileMaker のカスタム App から外部サービスの API を呼び出すには、[URL から挿入] スクリプトステップと cURL オプションを利用します。このスクリプトステップおよびオプションの詳細については、過去にご紹介した動画「cURLを使ったAPI連携の基礎と応用」を参考にしてください。
4. リクエストの内容
[URL から挿入] スクリプトステップと cURL オプションを使っていることがわかったところで、もう少し詳細に見ていきましょう。
このスクリーンショットは実際のスクリプトの前半部分です。

スクリプト [sbr] Generate calculation expression - OpenAI
まず、ChatGPT 側に渡すデータの用意する必要がありますが、ここではローカル変数 $messages に JSON 形式で必要なメッセージオブジェクトを設定し、グローバル変数 $$JSONdata に使用する OpenAI のモデル(gpt-4-turbo)の指定と、ローカル変数 $messages の内容を設定しています。
そしてその次に、[URL から挿入] スクリプトステップで API を実行しています。
ポイントとなるのはローカル変数 $messages に設定したメッセージオブジェクトというものです。この中で、質問内容や AI の役割設定、返答を希望する内容などを API の仕様に沿って記述します。この書き方次第で、得られる結果の良し悪しが変わってきます。
ちなみに、利用する GPT モデルによってはそもそも期待する情報を持っていない(学習されていない)ことなどもあるため、必ず完璧な正解を提供してくれるものではないことを理解しておくことも必要ですね。
5. ChatGPT API のメッセージオブジェクト
それではメッセージオブジェクトの中身をもう少し掘り下げてみましょう。

メッセージオブジェクトには「content」と「role」という設定があり、「role」には「system」、「user」、「assistant」の 3 つが設定できます。これは OpenAI の API 仕様で決められているものです。すべて JSON 形式で記述しますので JSON 形式の基礎は理解しておく必要があります。
それぞれの設定について見ていきましょう。
content
各 role に対して与える情報や指示を記述する部分です。記述する内容は対象の role や ChatGPT に対する質問内容に応じて変わります。
role
ChatGPT における 3 つの役割(system, user, assistant)を指定します。それぞれ異なる役割を持っており、その役割に応じた情報や指示を content として指定します。
では、それぞれの role について 1 つずつ見てみましょう。
system
system では ChatGPT 側に期待する振る舞いや、前提事項を指定します。
今回のサンプルでは以下の内容が例文として入っています。

日本語では以下のような内容となります。

ご覧のように、ChatGPT 側の役割や回答するにあたっての前提事項が記述されていますね。
user
user ではユーザ(利用者)からの要求内容を入れます。
今回のサンプルでは以下の内容が例文として入っています。
- Calculate the square root of 113. Output: Number
(113 の平方根を計算する。出力: 数字)
- Get the name of the current user. Output: String
(現在のユーザの名前を取得する。出力: 文字列)
- Generate the first 20 numbers of the Fibonacci sequence. Output: A return-separated list of numbers
(フィボナッチ数列の最初の 20 個の数字を生成する。出力: 改行区切りの数字のリスト)
assistant
assistant では ChatGPT 側に期待する結果を指定します。以前の応答を入れたり、希望する動作の例や回答の選択肢を示す使い方も可能です。
今回のサンプルでは user の要求内容に対する解答例として以下が入っています。
- Sqrt ( 113 )
- Get ( UserName )
- While 関数を用いた複雑な計算式
これらの内容をまとめて、ローカル変数 $messages にはこのような JSON 形式で記述されています。(content や While 関数の内容は省略しています)

ちなみに、「```」は FileMaker の計算式やスクリプトの中では見かけない記述ですがバッククォートを 3 つ入力しています。Markdown 記法の複数行のコードブロックを作成するものになります。
6. 日本語環境での利用
これまで全て英語での記載になっていますが、FileMaker Pro の日本語環境を意識した場合、Get ( UserName ) 関数は Get ( ユーザ名 ) と書いた方がよいのではないか?と思うかもしれません。
結論から言いますと日本語環境の関数名を与えると上手くいきませんでした。
試しに、Get ( ユーザ名 ) や Get ( 日付 ) という日本語の関数名を使った例を user と assistant に対して与えてテストしてみました。尋ねてみたのは「今月末の日付を計算する」ための計算式です。この内容の場合、本日の日付を返す関数 Get ( 日付 ) を利用する必要があります。ただ、この関数は英語環境では Get ( CurrentDate ) のため、日本語の結果を返す中で ”CurrentDate” の部分を翻訳してしまい、Get ( 現在日付 ) や Get ( 現在の日付 ) といった誤った関数名が結果に表示されることがありました。これでは正しい動作を得ることができません。
FileMaker Pro の日本語環境では、計算式の編集ダイアログに Get ( CurrentDate ) のような英語名の関数を入力しても自動で日本語の関数名に自動変換してくれますので、このサンプルファイルが返す計算式が英語関数であっても困ることはありません。
このような誤認識はおそらく日本語環境下での学習が足りないために起きている事象だと思いますので、今後 GPT モデルの学習が進むにつれてこういった課題も克服するのではないでしょうか。
7. まとめ
このようなメッセージオブジェクトを用いることで ChatGPT API から結果が得られています。こういった内容を記述するスキルのことは「プロンプトエンジニアリング」と呼ばれ、生成 AI から適切な解答を引き出すためのスキルとして注目されています。
なお、本文中でも記載しましたが、今回のサンプルは ChatGPT を用いている以上必ず正しい結果が返ってくるとは限りません。間違った結果が返ってきても再度実行することで正しい結果に変わったり、質問内容の言い回しを変えることで得られる結果が変わりますので、このあたりは現時点での AI の特性とご理解いただき、色々試してみてください。