リテラル検索を改善し、Cortex Analystの反応を向上させる¶
このトピックでは、Cortex Analystがより正確な SQL クエリを生成できるように、リテラル文字列検索を改善する方法について説明します。質問に答えるために正しい SQL クエリを書くには、フィルタリングの対象となる正確なリテラル値を知っている必要があります。これらの値は質問から直接抽出できるとは限らないので、何らかの検索が必要になるかもしれません。
例えば、ユーザーがこんな質問をしたとします。
What was my overall sales of iced tea in Q1?
次のクエリを試してみてください。
SELECT DISTINCT name FROM product WHERE name LIKE '%iced%tea%'
自分でこのプロセスを経験したことがある人なら、これが完璧な解決策でないことはわかるでしょう。例えば、このクエリでは「アイスティー」という商品は表示されませんが、「スパイスティー」という商品は表示されます。
Cortex Analystは、リテラル使用を改善するために2つのソリューションを提供しています。
セマンティックモデル で、提供されたサンプル値をセマンティック検索。
Cortex Search Service を使ったセマンティック検索。
そこでCortex Searchとの統合が役立ちます。Cortex Search は、テキストデータに対して低レイテンシで高品質な「ファジー」検索を可能にする機能です。Cortex Searchサービスを作成して、基になるデータベース列のセマンティック検索を行い、ユーザーの質問に答える SQL クエリでCortex Analystが使用するために必要なリテラル値を見つけることができます。
サンプル値に対するセマンティック検索¶
比較的カーディナリティの低い次元(約1~10個の明確な値)では、次元の応答の構造を示すのに十分なサンプル値を指定して、サンプル値探索を使用することをお勧めします。このソリューションでは、セマンティックモデルのサイズを最小限に増やすだけで、ストレージを追加する必要はありません。
Cortex Analystは、質問の SQL クエリを生成する前に、質問と提供されたサンプル値のセマンティック類似性検索を行い、クエリを記述するために必要な適切なリテラル値を特定します。セマンティック類似性検索は、前述のファジー文字列照合クエリアプローチよりも関連性の高いリテラルを検索する可能性があることに注意してください。
検索されたサンプル値の固定サイズのセットのみが、 SQL クエリを記述するために必要なリテラルとして、 LLM に提示されます。つまり、より多くのサンプル値を追加しても、 LLM のコンテキストウィンドウを超える危険はないということです。
Cortex Search Serviceを使ったセマンティック検索¶
高いカーディナリティ (10個以上の明確な値) を持つディメンションや、値が頻繁に変更されるディメンションでは、Cortex Search Serviceを使用してリテラルを検索できます。このソリューションはデータの重複を減らし、セマンティックモデルを簡潔に保ちます。
Cortex Search Serviceには、追加のストレージとコンピューティングコストがかかります。詳細については、 コストの考慮事項 をご参照ください。
注釈
このプレビューでは、論理ディメンションごとに1つのCortex Search Serviceのみがサポートされています。
Cortex Analystセマンティックモデルの論理ディメンションにCortex Search Serviceを作成するには、2つのオプションがあります。
Cortex Search Serviceを作成するには、Cortex Analyst UI を使用します。これは、手動で設定するよりもシンプルでエラーが発生しにくくなるため、推奨されるアプローチです。
SQL コードを使用して手動でCortex Search Serviceを作成します。このアプローチはより柔軟ですが、コードを記述する必要があります。
オプション1:Cortex Analyst UI を使用する¶
Cortex Analystセマンティックモデルの作成 UI を使用して、SnowsightでCortex Search Serviceを作成できます。このアプローチでは、SQL または YAML の記述や編集は必要なく、ほとんどの用途に適しています。
Snowsightで、AI/ML > Cortex Analyst > Create new model にナビゲートします。モデル作成フローに従って、Cortex Analystセマンティックモデルを作成します。Cortex Search Serviceを設定する画面は、このフローの最後にあります。
UI でディメンションを定義するとき、リテラルマッチングを改善するテキスト値を含む列を選択します。ウィザードは、カーディナリティの高い列を自動的に選択しますが、他の列を選択することもできます。次に、UI で新しいサービスの設定を選択し、フローを完了するとサービスを自動的に作成できます。
サービスは、選択したデータベースとスキーマにプロビジョニングされます。一旦作成されると、サービスは自動的にセマンティックモデルにリンクされます。(ウィザードはサービスとリンクする YAML も生成します。)
オプション2:手動でCortex Search Serviceを作成する¶
以下の手順は、Cortex Analystセマンティックモデルの論理ディメンションにCortex Search Serviceを手動で設定する方法を示しています。
Cortex Search Serviceを作成する
CREATE OR REPLACE CORTEX SEARCH SERVICE my_logical_dimension_search_service ON my_dimension WAREHOUSE = xsmall TARGET_LAG = '1 hour' AS ( SELECT DISTINCT my_dimension FROM my_logical_dimension_landing_table );`
以下のyamlスニペットを使用して、セマンティックモデルにCortex Search Serviceを含めます。
tables: - name: my_table base_table: database: my_database schema: my_schema table: my_table dimensions: - name: my_dimension expr: my_column cortex_search_service: service: my_logical_dimension_search_service literal_column: my_column # optional database: my_search_database # optional schema: my_search_schema # optional
以下のフィールドは、
cortex_search_service
ではオプションとなります。literal_column
: 検索インデックスがデフォルトになります。database
: 指定したベーステーブルのデータベースがデフォルトになります。schema
: 指定したベーステーブルのスキーマがデフォルトになります。