自然言語で検索実行

自然言語プロンプトと現在のレイアウト上のフィールド一覧をモデルに送信し、FileMaker の検索条件を取得して検索を実行します。

オプション 

  • [アカウント名:] では、このスクリプトステップで使用する AI アカウントのテキスト式を指定します。現在のファイルで、[AI アカウント設定] スクリプトステップを使用してアカウントを設定し、このスクリプトステップが実行される前にこの名前を割り当てることができます。

  • [モデル:] では使用するテキスト生成モデルの名前を指定します。モデル名をテキスト式として指定します。サポートされているモデルについては、FileMaker 動作環境を参照してください。

  • [プロンプト:] ではモデルに送信する自然言語の要求または質問のテキスト式を指定します。

  • [取得:] でモデルから取得する応答のタイプを指定します。

    • 検索結果: モデルによって生成された検索条件を実行して現在のウインドウで対象レコードを更新します。

    • 検索結果 (JSON 形式): モデルによって生成された検索条件を実行して対象レコードのデータを JSON オブジェクトとして返します。現在のウインドウの対象レコードは変更されません。

    • 検索条件 (JSON 形式): 検索を実行しません。モデルによって生成された FileMaker の検索条件を JSON オブジェクトとして返します。

  • [プロンプトテンプレート名:] では [プロンプトテンプレートを構成] スクリプトステップを使用して構成されたカスタムプロンプトテンプレートの名前を指定します。このオプションを使用すると AI モデルから最適な応答を得るための追加のプロンプトを設計できます。

  • [引数:] ではモデルプロバイダがサポートする追加の引数のキーと値のペアで構成される JSON オブジェクトのテキスト式を指定します。例: {"温度": 0.7, "種": 42} サポートされている引数のキー名とその有効な範囲については、モデルプロバイダのマニュアルを参照してください。

    context_prompt キーはメインのプロンプトの前にモデルに追加の命令やコンテキストを加える特別な引数です。例: {"context_prompt": "Treat 'today' as 07/08/2025"}

  • [応答のターゲット:] ではスクリプトステップの結果を保存するフィールドまたは変数を指定します。

互換性 

製品 サポート
FileMaker Pro はい
FileMaker Go はい
FileMaker WebDirect はい
FileMaker Server はい
FileMaker Cloud はい
FileMaker Data API はい
カスタム Web 公開 はい

起点バージョン 

22.0

説明 

このスクリプトステップを使用すると、[検索実行] スクリプトステップのような検索条件を指定せずに自然言語を使用してデータに対して FileMaker 検索条件を実行できます。AI モデルを使用して自然言語プロンプトを解釈し、現在のレイアウト上で利用できるフィールドを分析し、適切な FileMaker 検索条件 (および必要な場合はソート順) を生成します。

このスクリプトステップとモデルの間のインタラクションは通常次の手順で実行されます:

  1. このスクリプトステップは現在のレイアウト上の検索で使用できるすべてのフィールドを識別します。これらのフィールドに関する情報 (GetFieldsOnLayout 関数の出力に似ています) とプロンプトを指定したモデルに送信します。(これにはオプションのプロンプトテンプレートで指定されたプロンプトおよび context_prompt 引数が含まれます。)

  2. モデルがプロンプトおよびレイアウトフィールドの情報を分析し、指定したレコードを取得するための FileMaker 検索条件およびソート順を生成します。

  3. スクリプトステップが生成された検索条件とソート順を受け取ります。

  4. スクリプトステップが [取得:] オプションに基づいて処理を実行します。

[取得:] オプションはモデルが検索条件を生成した後に何を実行するかを決定します:

取得 機能

検索結果

生成された検索条件を現在のレイアウト上で実行し、手順 4 で対象レコードを更新します。モデルがソート順を生成した場合、対象レコードもそれに応じてソートされます。このオプションが選択されている場合、[応答のターゲット] は使用できません。

検索結果 (JSON 形式)

生成された検索条件を実行し、手順 4 で結果の対象レコードのデータを JSON オブジェクトとして [応答のターゲット] に返します。JSON 構造は FileMaker Data API で実行される検索条件に対する応答と同じです。これには対象レコードのデータ、データ情報 (対象レコード数やレコードの合計数など)、およびメッセージ (エラーや警告) が含まれます。次の例と [FileMaker Data API を実行] スクリプトステップの例を参照してください。

検索条件 (JSON 形式)

検索を実行しません。手順 4 で、生成された FileMaker 検索条件およびソート順を JSON オブジェクトとして [応答のターゲット] に返します。このオプションはモデルが生成した検索条件を正確に確認できるため主にデバッグに役立ちます。JSON 構造は FileMaker Data API 呼び出しで検索条件の実行に使用される query および sort 配列に似ています。次の例および FileMaker Data API ガイドの「検索の実行」を参照してください。実行します。

メモ 

  • 現在のレイアウト上の検索でアクセスできるフィールドのみがモデルに送信されます。検索で使用できるフィールドを決定する条件の詳細については、このスクリプトステップと同じ条件を使用する GetFieldsOnLayout 関数を参照してください。モデルに送信されたものと同じ情報 (レイアウト名、フィールド名、タイプ、および説明) が GetFieldsOnLayout によって返されます。

  • [データベースの管理] ダイアログボックスで入力したフィールドコメントはモデルに送信されるフィールド情報に含まれます。コメントにフィールドの目的の説明を入力するとモデルの性能を向上させて有用な検索条件を生成することができます。フィールドの定義と変更を参照してください。モデルに送信されるフィールドコメントの制御の詳細については、GetFieldsOnLayout 関数を参照してください。

  • [プロンプトテンプレート名:] を指定した場合、このスクリプトステップは [プロンプトテンプレートを構成] スクリプトステップで構成されたテンプレートを使用します。プロンプトテンプレートでは :schema: (レイアウトフィールド情報で置換)、:question: ([プロンプト:] で置換)、および :context: ([引数:] の context_prompt 引数で置換) などの定数を使用できます。

  • AI モデルは複数の言語で処理できるため、このスクリプトステップは多言語での検索に使用できます。

  • 関連するレコードが見つからない場合、[応答のターゲット] (使用した場合) にメッセージが返され、Get (最終エラー) 関数はエラー 401 (「検索条件に一致するレコードがありません」) を返します。

  • このスクリプトステップでは統計関数を必要とする検索は実行できません (たとえば、フィールド内で最も高い値を持つレコードの検索など)。ただし、モデルはそのようなレコードを識別するのに役立つソート条件を含む検索条件を返す場合があります (たとえば、レコードを「価格」フィールドで降順にソートするなど)。

例 1 

AI アカウントを設定し、「連絡先」レイアウトに移動してから、このスクリプトステップを使用して現在のレイアウトで「鈴木」という名前の連絡先を検索します。このスクリプトステップは現在のレイアウト上で検索できるフィールドおよび「鈴木という名前の連絡先を検索」というプロンプトをモデルに送信します。モデルが検索条件 (「名前」フィールドの「鈴木」の検索) を送り返し、このスクリプトステップが検索を実行し、現在のウインドウで対象レコードを更新します。

コピー
AI アカウント設定 [アカウント名: "my-account" ; モデルプロバイダ: OpenAI ; API キー: "sk-..."]

レイアウト切り替え [「連絡先」(連絡先) ; アニメーション: なし]

自然言語で検索実行 [アカウント名: "my-account" ; モデル: "gpt-4o" ; プロンプト: "鈴木という名前の連絡先を検索" ; 取得: 検索結果]

例 2 

AI アカウントを設定し、ユーザにクエリーを要求してから、検索を実行して結果の対象レコードのデータを JSON として $$FoundSetData 変数に返します。クエリーは現在のレイアウト上で実行されます。

コピー
AI アカウント設定 [アカウント名: "my-account" ; モデルプロバイダ: OpenAI ; API キー: "sk-..."]

レイアウト切り替え [「製品」(製品) ; アニメーション: なし]

カスタムダイアログを表示 ["製品を検索:" ; $$UserPrompt]

If [not IsEmpty ($$UserPrompt)]

    自然言語で検索実行 [アカウント名: "my-account" ; モデル: "gpt-4o" ; プロンプト: $$UserPrompt ; 取得: 検索結果 (JSON 形式) ; 応答のターゲット: $$FoundSetData]
    
    カスタムダイアログを表示 ["対象レコードのデータ:" ; JSONFormatElements ($$FoundSetData)]
    
End If

プロンプトが「価格が 600 未満の製品を検索し、価格で降順に並べ替える」と仮定すると、$$FoundSetData に保存される可能性のある出力 (JSONFormatElements を使用してフォーマット) は次のとおりです:

コピー
{
    "messages"
    [
        {
            "code" : "0",
            "message" : "OK"
        }
    ],
    "response"
    {
        "data"
        [
            {
                "fieldData"
                {
                    "Price" : 599,
                    "ProductID" : 107,
                    "ProductName" : "保護眼鏡",
                    "Status" : "在庫あり"
                },
                "modId" : "0",
                "portalData" : {},
                "recordId" : "61"
            },
            {
                "fieldData"
                {
                    "Price" : 550,
                    "ProductID" : 122,
                    "ProductName" : "パテナイフ",
                    "Status" : "在庫あり"
                },
                "modId" : "0",
                "portalData" : {},
                "recordId" : "76"
            }
        ],
        "dataInfo"
        {
            "database" : "注文システム",
            "foundCount" : 2,
            "layout" : "製品",
            "returnedCount" : 2,
            "table" : "製品",
            "totalRecordCount" : 42
        }
    }
}

例 3 

AI アカウントを設定し、検索条件に定義済みのプロンプトを使用するカスタムプロンプトテンプレートを設定します。定義済みのプロンプトには次を含めた検索条件を JSON 形式で記述します: Use the following information as context: \":context:\"

「製品」レイアウトに移動して後でコンテキストに使用するために $$Today 変数を自然言語フレーズに設定した後、このスクリプトステップはプロンプトテンプレートで使用されている :context: 定数を [引数:] の context_prompt キーの値に置き換えます。次に、プロンプト「今日作成されたレコードを検索して製品名でソート」とともにモデルに送信します。

モデルは検索条件を JSON オブジェクトとして$$FindRequestJSON 変数に返すので、これをデバッグ目的で使用できます。

コピー
AI アカウント設定 [アカウント名: "my-account" ; モデルプロバイダ: OpenAI ; API キー: "sk-..."]

プロンプトテンプレートを構成 [テンプレート名: "今日の検索" ; モデルプロバイダ: OpenAI ; テンプレートタイプ: 検索条件 ; 検索条件プロンプト: "Generate and only return a JSON layout query to perform a find request..."]

レイアウト切り替え [「製品」(製品) ; アニメーション: なし]

変数を設定 [$$Today ; 値: "今日は " & Get (日付)]

自然言語で検索実行 [アカウント名: "my-account" ; モデル: "gpt-4o" ; プロンプト: "今日作成されたレコードを検索して製品名でソート" ; 取得: 検索条件 (JSON 形式) ; 引数: JSONSetElement ("{}" ; "context_prompt" ; $$Today ; JSONString) ; 応答のターゲット: $$FindRequestJSON]

カスタムダイアログを表示 ["生成された検索条件" ; JSONFormatElements ($$FindRequestJSON)]

現在の日付が 07/08/2025 でレイアウトに「製造日」フィールドと「製品名」フィールドがあると仮定すると、$$FindRequestJSON (JSONFormatElements を使用してフォーマット済み) に保存される可能性のある出力は次のとおりです:

コピー
{
    "layouts" : "製品",
    "query"
    [
        {
            "製品::製造日" : "07/08/2025"
        }
    ],
    "sort"
    [
        {
            "fieldName" : "製品::製品名",
            "sortOrder" : "ascend"
        }
    ]
}