セマンティック検索を実行
指定されたフィールドでセマンティック検索を実行して検索テキストと使用するモデル、または埋め込みベクトルで指定されたレコードセットを絞り込みます。
オプション
-
[クエリー:] では、クエリーが [自然言語] (テキスト) または [ベクトルデータ] を埋め込むかを指定します。
-
[レコードセット] では、[すべてのレコード] または [現在の対象レコード] を検索するかどうかを選択します。
-
[ターゲットフィールド] では、検索するテキストまたはオブジェクトフィールドを指定します。フィールドの内容は埋め込みベクトルである必要があります。テキストフィールドの場合は JSON 配列、オブジェクトフィールドの場合はバイナリデータとして指定します。
-
[返される数] は、対象レコードとして返す意味的に類似したレコードの数を指定する数式です。 指定されていない場合、デフォルトのレコード数は最大 10 です。
-
[コサイン類似度条件] では、データのコサイン類似度を [コサイン類似度の値] と比較する方法を指定します。指定されていない場合、対象レコードはコサイン類似度条件によって制限されません。
-
[コサイン類似度の値] では、 [コサイン類似度条件] とともに使用してデータが意味的に類似しているか非類似かを判断するしきい値を指定します。この数式には -1 (非類似) と 1 (類似) までの値を指定する必要があります。
-
[結果を保存] では、対象レコードをレコード ID および降順でソートしたコサイン類似度の JSON 配列としてテキストフィールドまたは変数に保存します。
[クエリー:] が [自然言語] の場合にのみ使用できるオプション:
-
[アカウント名:] では、このスクリプトステップで使用する AI アカウントのテキスト式を指定します。現在のファイルで、[AI アカウント設定] スクリプトステップを使用してアカウントを設定し、このスクリプトステップが実行される前にこの名前を割り当てることができます。
-
[埋め込みモデル:] では、埋め込みベクトルを生成するモデルの名前を指定します。モデル名はモデルプロバイダから提供されるテキスト式で指定します。
-
[テキスト:] では、自然言語テキストのクエリーのテキスト式を指定します。結果のテキストは埋め込みベクトルのモデルに送信され、[ターゲットフィールド] の埋め込みベクトルと類似性を比較します。
[クエリー:] が [ベクトルデータ] の場合にのみ使用できるオプション:
-
[ベクトル:] では、検索するテキストまたはイメージを表す埋め込みベクトルを指定します。これはオブジェクトフィールドへの参照など、オブジェクトデータを返す式です。結果はこのベクトルデータが表すテキストまたはイメージと意味的に類似します。
互換性
製品 | サポート |
FileMaker Pro | はい |
FileMaker Go | はい |
FileMaker WebDirect | はい |
FileMaker Server | はい |
FileMaker Cloud | はい |
FileMaker Data API | はい |
カスタム Web 公開 | はい |
起点バージョン
21.0
説明
このスクリプトステップは [ターゲットフィールド] の内容がクエリーと意味的に類似するレコードを検索します。テキストを検索する場合、これは 検索実行のように文字どおりのキーワードの一致を検索するよりも有用な結果を得ることができます。
イメージを検索する場合、検索しているイメージを記述する自然言語テキストまたはテキスト埋め込みベクトルを指定できます。または、検索しているイメージに類似するイメージの埋め込みベクトルを指定できます。
このスクリプトステップには [クエリー:] オプションによって決定される 2 つの操作モードがあります:
-
[自然言語] に設定した場合は、クエリーを [テキスト:] オプションに自然言語テキストとして指定します。このスクリプトステップはそのクエリーテキストを埋め込みベクトルの変換に指定されたモデルに送信します。これがこのモードで AI アカウント名および埋め込みモデルが必要とされる理由です。
-
[ベクトルデータ] に設定した場合は、埋め込みベクトルをクエリーのオブジェクトデータとして指定します。特定のクエリーを頻繁に使用する場合は、モデルからその都度取得するよりも、これらのクエリーの埋め込みベクトルを一度取得して格納する方が効率的な場合があります。
検索するイメージに埋め込みベクトルを指定する場合このオプションを使用します。[ターゲットフィールド] のイメージ埋め込みベクトルと同じイメージ埋め込みモデルを使用して ([ベクトル:]) オプションのベクトルを生成する必要があります。
イメージおよびテキストの埋め込みベクトルの場合、FileMaker Pro で別途提供、または FileMaker Server にインストールされるオープンソースモデルサーバーでサポートされているモデルを使用できます。Claris エンジニアリングブログを参照してください。
このスクリプトステップは現在のテーブル内のすべてのレコードまたは現在の対象レコード内のレコードのみ ([レコードセット] オプションで設定) のいずれかで、[ターゲットフィールド] のデータとクエリーの意味的類似性 (または非類似性) を比較します。結果はコサイン類似度条件を満たす [返される数] 以下のレコード数に絞り込まれる対象レコードです。結果の対象レコードは降順のコサイン類似度でソートされるため最も関連性の高いレコードが最初になります。
メモ
-
正規化された埋め込みベクトルが必要です。互換性とパフォーマンスを確保するために、すべての埋め込みベクトルは同じモデルから生成する必要があります。異なるモデルからの埋め込みベクトルの混在はサポートされていません。
例 1
AI アカウントを設定して「会議詳細」レイアウトに移動してから、すべてのレコードの「会議::メモ_埋め込み」オブジェクトフィールドで [テキスト:] (自然言語) のセマンティック検索を実行します。このフィールドには「会議::メモ」フィールドの内容の埋め込みベクトルが含まれています (対象レコードに埋め込みを挿入の例 1 を参照)。より有用な結果を得るために、返される数を 10 に制限して、[テキスト:] と「会議::メモ_埋め込み」フィールドの内容のコサイン類似度を 0.4 よりも大きい値に設定します。結果の対象レコードは関連性の高い順にソートされます。
AI アカウント設定 [アカウント名: "my-account" ; モデルプロバイダ: OpenAI ; API キー: "sk-RZCtpWT..."]
レイアウト切り替え [「会議詳細」 (会議) ; アニメーション: なし]
セマンティック検索を実行 [クエリー: 自然言語 ; アカウント名: "my-account" ; 埋め込みモデル: "text-embedding-3-small" ; テキスト: "採用, 業務内容, 研修プラン" ; レコードセット: すべてのレコード ; ターゲットフィールド: 会議::メモ_埋め込み ; 返される数: 10 ; コサイン類似度条件: 次の値より大きい ; コサイン類似度の値: .4]
例 2
AI アカウントを設定して「会議詳細」レイアウトに移動してから、検索するテキストをユーザに尋ねます。GetEmbedding 関数がテキストをモデルに送信して、[フィールド設定] スクリプトステップが埋め込みベクトルをグローバルオブジェクトフィールドの「会議::入力」に格納します。「会議::メモ_埋め込み」オブジェクトフィールドに「会議::メモ」フィールドの内容の埋め込みベクトルが含まれていると仮定すると (対象レコードに埋め込みを挿入の例 1 を参照)、[セマンティック検索を実行] はすべてのレコードで「会議::入力」と「会議::メモ_埋め込み」のベクトルデータを比較して返される数と類似度条件を満たす対象レコードを返します。
AI アカウント設定 [アカウント名: "my-account" ; モデルプロバイダ: OpenAI ; API キー: "sk-RZCtpWT..."]
レイアウト切り替え [「会議詳細」 (会議) ; アニメーション: なし]
カスタムダイアログを表示 ["次に関するメモが含まれる会議を検索:" ; $Input]
フィールド設定 [会議::入力 ; GetEmbedding ("my-account" ; "text-embedding-3-small" ; $Input)]
セマンティック検索を実行 [クエリー: ベクトルデータ ; 会議::入力 ; レコードセット: すべてのレコード ; ターゲットフィールド: 会議::メモ_埋め込み ; 返される数: 10 ; コサイン類似度条件: 次の値より大きい ; コサイン類似度の値: .5 ; 結果を保存: $$result]
[結果を保存] オプションを選択した場合、3 つのレコードを返す指定されたクエリーに対して、JSONFormatElement ($$result) は次のように返します:
[
{
"recordId" : "7",
"similarity" : 0.999999947111836
},
{
"recordId" : "1",
"similarity" : 0.529809641529481
},
{
"recordId" : "5",
"similarity" : 0.524595621039394
}
]
例 3
テキストの説明に最も一致するイメージのセットを検索します。スクリプトで FileMaker Server によってインストールされたオープンソースモデルサーバーの AI アカウントを設定し、「会議詳細」レイアウトに移動してすべてのレコードを表示してから、イメージの埋め込みモデルを使用する「会議::イメージ」フィールド内のイメージの埋め込みベクトルを取得して「会議::イメージ_埋め込み」オブジェクトフィールドにバイナリデータとして格納します。[セマンティック検索を実行] は同じアカウントを使用してテキストの埋め込みモデルに自然言語のクエリーテキスト (「テーブルの周りに座っている人々」) を送信してから、結果をすべてのレコードの「会議::イメージ_埋め込み」と比較して類似度条件を満たす対象レコードを返します。
AI アカウント設定 [アカウント名: "my-account" ; モデルプロバイダ: カスタム ; エンドポイント: "https://my-server.example.com:8080/" ; SSL 証明書の検証 ; API キー: グローバル::API キー]
レイアウト切り替え [「会議詳細」 (会議) ; アニメーション: なし]
全レコードを表示
対象レコードに埋め込みを挿入 [アカウント名: "my-account" ; 埋め込みモデル: "clip-ViT-B-32" ; ソースフィールド: 会議::イメージ ; ターゲットフィールド: 会議::イメージ_埋め込み]
セマンティック検索を実行 [クエリー: 自然言語 ; アカウント名: "my-account" ; 埋め込みモデル: "sentence-transformers/clip-ViT-B-32-multilingual-v1" ; テキスト: "テーブルの周りに座っている人々" ; レコードセット: すべてのレコード ; ターゲットフィールド: 会議::イメージ_埋め込み ; コサイン類似度条件: 次の値より大きい ; コサイン類似度の値: .7 ]