モデルから応答を生成

ユーザプロンプトに対するテキスト形式の応答を AI モデルから取得します。

オプション 

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

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

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

  • [自律モード] ではこのスクリプトステップがツールとの自動インタラクションをどのように処理するかを制御します:

    • オン: モデルが最終結果に到達するまでツールを繰り返し呼び出すことができる自動マルチステップインタラクションを有効にします。

    • オフ: 最初のツール呼び出しの後にインタラクションを 1 回実行して停止します。ツール呼び出しの実行や [応答:] への結果の返答は行いません。手作業による処理およびデバッグができます。ツール呼び出しが行われない場合、[応答:] にモデルからの結果が返されます。

  • [応答:] ではスクリプトステップの結果を保存するフィールドまたは変数を指定します。フィールドを指定して [ストリーム] を選択する場合、フィールドは現在のレイアウト上にある必要があります。

  • [指示] ではモデルに追加するコンテキストまたは動作ガイドラインを表すテキスト式を指定します。

  • [メッセージ:] では以前のインタラクションからモデルにコンテキストを提供するためのメッセージ履歴を含むフィールドまたは変数を指定します。メッセージは JSON オブジェクトの配列です。各 JSON オブジェクトにはメッセージのテキスト (content) および内容の提供者 (role) のキーと値のペアが含まれている必要があります。提供者はユーザ ("user") またはモデル ("assistant") のいずれかです。例:

    コピー

      {
        "content": "クパチーノの気温は?",
        "role": "user"
      },
      {
        "content": "クパチーノの気温は摂氏 22 度です。",
        "role": "assistant"
      }
    ]
  • [メッセージ履歴の保存先:] ではスクリプトステップがメッセージ履歴を保存する変数を指定します。形式は [メッセージ:] と同じで、このスクリプトステップ実行時のメッセージのペアが末尾に追加されます。

    現在のスクリプトが終了した後もメッセージ履歴を持続させる場合、グローバル変数 (FileMaker クライアントセッションが終了するまで持続する) を使用するか、変数の値をフィールドに格納します。変数の使用または [フィールド設定] スクリプトステップを参照してください。

  • [メッセージ履歴のカウント:] では [メッセージ履歴の保存先:] で指定した変数に含める過去のメッセージのペア (ユーザの質問とアシスタントの回答) の数を制御する数値式を指定します。

  • [温度 (Temperature)] ではプロンプトに対するモデルの応答のランダム性または創造性を制御します。低い値はより決定論的で、事実に基づいた結果を返します。高い値はより創造的で、予期しない、または一貫性の低い結果を返します。使用している特定のモデルの有効な範囲については、モデルプロバイダのマニュアルを参照してください。

  • [ツールの定義] では処理中にモデルが呼び出すことができる利用可能なツールの JSON 配列を指定します。後述の「ツールの定義」を参照してください。

  • [モデルからのツール呼び出し:] ではモデルによって実行されたツール呼び出しに関する情報を格納する場所を指定します。これはデバッグやモデルによるツールの使用の監査に役立つ場合があります。

  • [ストリーム] では応答する方法を制御します:

    • オン: 応答は (単語ごとまたは一定のフレーズで) 段階的に取得および送信されます。これを指定すると FileMaker クライアントの応答性が向上したように感じます。

    • オフ: 応答全体を取得してから表示します。これを指定すると完全な応答を待っている間は FileMaker クライアントが応答していないように見える場合があります。

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

  • [Web ビューアで JavaScript を実行:] ではスクリプトステップの完了後にターゲットの Web ビューアで実行する JavaScript コードを指定します。このオプションは次のスクリプトステップとして [Web ビューアで JavaScript を実行] スクリプトステップを実行するのと似ていますが、 [ストリーム] オプションが [オン] の場合、応答は JavaScript 関数に渡され Web ビューアにストリーミングされます。

    • [Web ビューア:] では現在のレイアウト上の Web ビューアのオブジェクト名を指定します。

    • [関数名:] は Web ビューアで呼び出す JavaScript 関数の名前です。

互換性 

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

起点バージョン 

22.0

説明 

このスクリプトステップはカスタム App と AI モデル間のマルチステップインタラクションを促進し、モデルが必要に応じてツール呼び出しでデータにアクセスして操作できるようにします。スクリプトステップは [自律モード:] オプションに基づいて 2 つの異なるモードで動作し、それぞれが異なるレベルでインタラクションの自動化および制御を行います。

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

  1. このスクリプトステップは [ユーザプロンプト:]、任意の [指示:]、[メッセージ:] からの会話コンテキスト、および利用可能な [ツールの定義:] を構成した [モデル:] に送信します。

  2. モデルはプロンプトを分析して、直接応答できるか追加の情報の収集や処理の実行にツールを使用する必要があるかどうかを判断します。

  3. ツールが必要な場合、モデルは利用可能なツールの定義およびユーザの要求に基づいて適切な引数を含むツール呼び出しを生成します。

  4. このスクリプトステップがモデルからツール呼び出しを受け取り FileMaker クライアントがそれらを実行します。ツールの実行には SQL クエリーなどのあらかじめ定義されたツールや、独自のカスタム関数の呼び出しが含まれる場合があります。

  5. このスクリプトステップはツールの実行結果をモデルに送り返し、処理を続行するために必要なデータまたは確認をモデルに提供します。

  6. プロンプトに完全に対応するには追加のツールが必要であるとモデルが判断した場合、さらにツール呼び出しが生成される場合があります (手順 3 から 5 を繰り返します)。この反復プロセスはモデルが包括的な応答を返すのに十分な情報を取得するまで続きます。

  7. モデルが必要なツールインタラクションをすべて完了すると、ツールの結果を含む最終的な応答が生成されて元のユーザプロンプトが処理されます。

  8. このスクリプトステップは最終的な応答を受け取り、指定された [応答:] ターゲットに格納し、オプションで [メッセージ履歴の保存先:] のインタラクションの履歴を更新します。

[自律モード] オプションではインタラクションの処理方法を決定します:

  • オン: ツールとの自動マルチステップインタラクションを有効にして、完全なワークフロー (手順 1 から 8) を自動的に実行します。AI モデルが要求の実行にツールが必要であると判断した場合、自動的に適切なツールを呼び出して最終結果に達するまで処理を続行します。モデルは必要に応じて以前のツール実行の結果に基づきツール呼び出しを複数回行うことができます。このモードは複数のテーブルにわたるデータの分析、レポートの生成、またはマルチステップ処理の実行など、複数のツールインタラクションを必要とする複雑なタスクのためのものです。

  • オフ: AI モデルとのインタラクションを 1 回実行し、手順 1 から 3 のみを実行して最初のツール呼び出しの後に停止します。モデルがツールが必要であると判断した場合、ツールを自動的に実行せずにスクリプトステップが停止して [モデルからのツール呼び出し:] のツール呼び出し情報を返します。このモードはツールインタラクションのデバッグ、モデルが使用しようとするツールの理解、またはツールの実行を手動で制御する際に役立ちます。ツール呼び出しを確認してから手動で実行するかアプローチを変更するかを決定することができます。

このスクリプトステップとモデルの間の情報のフローは AI の機能を有効にしながら機密データの安全性を保ちます。モデルはプロンプト、指示、およびツールの結果によって明示的に提供された情報のみを受け取ります。FileMaker データベースまたはファイルに直接アクセスすることはできません。ツール呼び出しは制御された FileMaker 環境内で実行されるため、モデルの分析および推論機能を活用しながら FileMaker アカウントとアクセス権によるデータのアクセスと処理の完全な制御を維持することができます。

ツールの定義

ツールの使用 (一部のモデルプロバイダでは関数呼び出しとも呼ばれます) によってモデルは FileMaker Pro カスタム App を呼び出してモデルが最終的な応答を生成するために必要なことを実行または提供することができます。自律モードでは、モデルは最終的な応答の生成が完了するまで複数のツールを繰り返し呼び出すことができます。[ツールの定義] オプションでは、次のツールを定義できます:

  • execute_sql: 指定された SQL クエリーを実行するあらかじめ定義されたツールで、[自然言語で SQL クエリーを実行] スクリプトステップと同じ方法でモデルによって渡された SQL ステートメントを実行できます。

  • retrieve_image: SQL クエリー、テーブル名、およびオブジェクトフィールド名で指定されたオブジェクトフィールドからイメージを取得するあらかじめ定義されたツール。

  • カスタム関数: ファイル内で定義されたカスタム関数。カスタム関数の使用を参照してください。

ツールの定義はモデルプロバイダが要求する JSON 形式を使用して指定します。通常、定義はオブジェクトの配列であり、それぞれがツールの名前、ツールが実行する内容の詳細、ツールを使用する際にモデルが従う必要のあるルールです。各入力引数にはその名前、データタイプ、および説明を指定します。モデルがツールを確実に使用するための十分に詳細な説明が必要です。あらかじめ定義されたツールを使用する場合、次に示す定義を使用して開始します。モデルが最適な結果を得るために必要に応じて修正します。

ツールの定義のデバッグに役立てるには、[モデルからのツール呼び出し:] オプションをモデルがツールを呼び出す方法や呼び出したかどうかを確認できるフィールドまたは変数に設定します。これはツールの定義で提供した説明で追加または変更が必要な箇所を明確にします。

ツールの定義およびツール呼び出しに使用する特定の JSON 形式については、AnthropicCohere、および OpenAI などのモデルプロバイダのマニュアルを参照してください。

execute_sql

関数名

execute_sql

 

関数の説明

Respond to the user’s questions by executing the appropriate SQL query using this function. Strictly follow these rules:\r 1. The input should be a fully formed SQL query.\r 2. Perform separate SQL instead of one nested SQL.\r 3. Escaping special characters for SQL query.\r 4. If the result of the toolCall is a raw string that reads 'empty' or 'null', the answer should contain the quoted raw string, which is case sensitive.\r 5. Convert the user’s request into an SQL query using standard SQL syntax only. Ensure that table names and field names match exactly as they appear in the database schema.

 

引数名

sql_query

 

引数の説明

Generate a fully formed SQL query based on following rules:\r 1. Enclose all table and field names in double quotes.\r 2. Format dates as \"DATE 'YYYY-MM-DD'\", times as \"TIME 'HH:MM:SS'\" and timestamps as \"TIMESTAMP 'YYYY-MM-DD HH:MM:SS'\".\r 3. Return queries in plain text (not JSON).\r 4. Use \"FETCH FIRST n ROW ONLY\" instead of \"LIMIT\".\r 5. Support single queries only.\r 6. No semicolon is needed at the end of SQL query.\r 7. Don't generate nested SQL queries.\r 8. Use \"LIKE\" instead of \"ILIKE\".\r 9. Keep all comparisons case-sensitive.\r 10. Do not include fields that are not included in the question.\r 11. Use unquoted ROWID in queries.\r 12. Only utilize the following database schema:\r

モデルに使用させるスキーマをこの説明の最後に追加します。含めるテーブルオカレンスに対して GetTableDDL 関数で返されるデータ定義言語 (DDL) のスキーマを指定します。

 

戻り値: 文字列として返される SQL クエリーの結果。

retrieve_image

関数名

retrieve_image

 

関数の説明

This function MUST be called whenever the user asks for any image-related data, such as photos, profile pictures, avatars, or any visual representation stored in the database. Use this to fetch image data by constructing an SQL query that returns the ROWID (unquoted) of the relevant row. Always prefer this over other functions for image retrieval.

 

引数 1 の名前

sql_query

 

引数 1 の説明

An SQL query used to locate the ROWID of the row containing the desired image. Example: SELECT ROWID FROM \"Contacts\" WHERE \"Last Name\" = 'Smith'. \r\r Only utilize the following database schema:\r

モデルに使用させるスキーマをこの説明の最後に追加します。含めるテーブルオカレンスに対して GetTableDDL 関数で返されるデータ定義言語 (DDL) のスキーマを指定します。

 

引数 2 の名前

table

 

引数 2 の説明

イメージフィールドを含むテーブルの名前。

 

引数 3 の名前

field

 

引数 3 の説明

イメージが格納されているオブジェクトフィールド。

 

戻り値: 次の形式の JSON データで、Base64 でエンコードされた文字列としてイメージが含まれています。

コピー
[
  {
    "data": "/9j/4AAQ...//2Q=="
  }
]

カスタム関数

カスタム関数を呼び出すツールの定義については、次のガイドラインに従ってください:

  • 関数について:

    • name キーで、[カスタム関数を編集] ダイアログボックスで定義したカスタム関数の正確な名前を使用します。

    • description キーで、カスタム関数が実行する内容や、カスタム関数を使用する際にモデルが従う必要のあるルールを詳細に説明します。

  • 引数について:

    • [カスタム関数を編集] ダイアログボックスで定義した引数とまったく同じ数の引数を同じ順序で定義します。引数名が同じである必要はありません。

    • description キーで、モデルが引数に提供する必要がある内容について詳細な説明を提供します。

    • type キーの値を「string」に設定します (引数は常にテキストとして扱われます)。

メモ 

  • 一般的なエラーメッセージにはモデルが使用する適切なツールを決定できない場合の「プロンプトに対して SQL ステートメントが返されませんでした」やツールの定義が存在しないカスタム関数を参照する場合の「関数が見つかりません」などがあります。

例 1 

AI アカウントを設定して「連絡先」レイアウトに移動してから、ユーザが質問を入力するダイアログボックスを表示します。[モデルから応答を生成] スクリプトステップはプロンプトおよび最近のメッセージ履歴をモデルに送信して結果を「応答」フィールドにストリームします。このような簡単な質問と回答のやり取りでは、自律モードは選択されません。モデルとのコンテキストを現在の FileMaker クライアントセッション間で維持するには、スクリプトステップは [メッセージ履歴の保存先:] オプションを使用して直近 10 件のメッセージを $$Messages グローバル変数に保存します。スクリプトステップは [メッセージ:] オプションを使用して、同じセッション内でこのスクリプトが再度実行された場合に $$Messages 変数の値をモデルに送信します。[ツールの定義] オプションが使用されていないため、モデルはデータに関する質問に答えることができません。

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


レイアウト切り替え [「連絡先」(連絡先)]

カスタムダイアログを表示 ["質問を入力してください" ; $UserPrompt]

モデルから応答を生成 [アカウント名: "my-account" ; モデル: グローバル::モデル名 ; ユーザプロンプト: $UserPrompt ; 応答: 連絡先::応答; メッセージ: $$Messages ; メッセージ履歴の保存先: $$Messages ; メッセージ履歴のカウント: 10 ; ストリーム]

例 2 

AI アカウントを設定し、「連絡先」レイアウトに移動してから、「連絡先」テーブルのデータについて尋ねるプロンプトをモデルに送信し、モデルはツールを使用して応答を生成します。最大 10 件のメッセージが $$Messages で「メッセージ」グローバルフィールドに保存されるため、FileMaker クライアントセッション間でコンテキストが保持されます。

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

レイアウト切り替え [「連絡先」(連絡先)]

変数を設定 [$Instructions ; 値: "あなたはデータベースの情報を照会できる便利なアシスタントです。常に明確で正しい形式で応答します。"]

変数を設定 [$UserPrompt ; "Acme Anvils からの連絡先の数と、それらの名前と電子メールアドレスを教えてください。営業所がある都市にいる連絡先の後にアスタリスクを追加してください。」]

モデルから応答を生成 [アカウント名: "my-account" ; モデル: グローバル::モデル名 ; ユーザプロンプト: $UserPrompt ; 応答: 連絡先::応答 ; モデルからのツール呼び出し: $$ToolCalls ; 指示: $Instructions ; メッセージ: グローバル::メッセージ ; メッセージ履歴の保存先: $$Messages ; メッセージ履歴のカウント: 10 ; ツールの定義: グローバル::ツール定義 ; ストリーム]

フィールド設定 [グローバル::メッセージ ; $$Messages]

「ツール定義」フィールドにはモデルプロバイダ OpenAI について JSON 形式を使用した次の内容が含まれています:

コピー
[
  {
    "function": {
      "description": "Respond to the user’s questions by executing the appropriate SQL query using this function. Strictly follow these rules:\r 1. The input should be a fully formed SQL query.\r 2. Perform separate SQL instead of one nested SQL.\r 3. Escaping special characters for SQL query.\r 4. If the result of the toolCall is a raw string that reads 'empty' or 'null', the answer should contain the quoted raw string, which is case sensitive.\r 5. Convert the user’s request into an SQL query using standard SQL syntax only. Ensure that table names and field names match exactly as they appear in the database schema.",
        "name": "execute_sql",
        "parameters": {
          "properties": {
            "sql_query": {
              "description": "Generate a fully formed SQL query based on following rules:\r 1. Enclose all table and field names in double quotes.\r 2. Format dates as \"DATE 'YYYY-MM-DD'\", times as \"TIME 'HH:MM:SS'\" and timestamps as \"TIMESTAMP 'YYYY-MM-DD HH:MM:SS'\".\r 3. Return queries in plain text (not JSON).\r 4. Use \"FETCH FIRST n ROW ONLY\" instead of \"LIMIT\".\r 5. Support single queries only.\r 6. No semicolon is needed at the end of SQL query.\r 7. Don't generate nested SQL queries.\r 8. Use \"LIKE\" instead of \"ILIKE\".\r 9. Keep all comparisons case-sensitive.\r 10. Do not include fields that are not included in the question.\r 11. Use unquoted ROWID in queries.\r 12. Only utilize the following database schema:\rCREATE TABLE \"連絡先\" (\r\"名\" varchar(255),\r\"姓\" varchar(255),\r\"電子メール\" varchar(255),\r\r\"都市\" varchar(255),\r\"会社\" varchar(255)\r);\r\r",
              "type": "string"
            }
          },
          "type": "object",
          "required": ["sql_query"]
        }
      },
      "type": "function"
  },
  {
    "function": {
      "description": "指定した都市に会社の営業所があるかどうかを確認してください。ある場合この関数は「yes」を返します。そうでない場合「no」を返します。",
        "name": "CityHasSalesOffice",
        "parameters": {
          "properties": {
            "city": {
              "description": "都市名",
              "type": "string"
            }
          },
          "type": "object",
          "required": ["city"]
        }
      },
      "type": "function"
  }
]

execute_sql については、上記の関数の説明および引数の説明を使用します。sql_query 引数では、上記の description を使用して「連絡先」テーブルのスキーマをその後に追加します。

カスタム関数 CityHasSalesOffice は指定された都市に営業所があるかどうかに応じて「yes」または「no」を返します。

「応答」フィールドにストリーミングされる応答の例:

コピー
Acme Anvils からの連絡先は 4 件あります。名前、電子メールアドレス、および営業所のある都市にいる場合はアスタリスクでそのことを示します:

1. Alea Marks, aleamarks165@example.com
2. Kelly Holden, kellyholden1361@example.com *
3. Kelsey Cummings, kelseycummings1396@example.com
4. Kuame Savage, kuamesavage7146@example.com

$$ToolCalls 変数には execute_sql および CityHasSalesOffice へのいくつかの呼び出しが含まれています。

コピー
[
  {
    "index": 0,
    "id": "call_e7...",
    "type": "function",
    "function": {
      "name": "execute_sql",
      "arguments": "{\"sql_query\":\"SELECT COUNT(*) FROM \\\"連絡先\\\" WHERE \\\"会社\\\" = 'Acme Anvils'\"}"
    }
  },
  {
    "index": 0,
    "id": "call_o0...",
    "type": "function",
    "function": {
      "name": "execute_sql",
      "arguments": "{\"sql_query\":\"SELECT \\\"名\\\", \\\"姓\\\", \\\"電子メール\\\", \\\"都市\\\" FROM \\\"連絡先\\\" WHERE \\\"会社\\\" = 'Acme Anvils'\"}"
    }
  },
  {
    "index": 0,
    "id": "call_ev...",
    "type": "function",
    "function": {
      "name": "CityHasSalesOffice",
      "arguments": "{\"city\": \"Onitsha\"}"
    }
  },
  {
    "index": 1,
    "id": "call_IC...",
    "type": "function",
    "function": {
      "name": "CityHasSalesOffice",
      "arguments": "{\"city\": \"Berlin\"}"
    }
  },
  {
    "index": 2,
    "id": "call_Pw...",
    "type": "function",
    "function": {
      "name": "CityHasSalesOffice",
      "arguments": "{\"city\": \"Saint-Malo\"}"
    }
  },
  {
    "index": 3,
    "id": "call_Uy...",
    "type": "function",
    "function": {
      "name": "CityHasSalesOffice",
      "arguments": "{\"city\": \"Wanneroo\"}"
    }
  }
]