Snowflake AI & ML StudioでLLMサービスを試してみた

Snowflake AI & ML StudioでLLMサービスを試してみた

Clock Icon2025.04.16

はじめに

データ事業本部ビッグデータチームのkasamaです。
今回はSnowflake AI & ML Studioで簡単に動かせるLLMサービスを試していきたいと思います。

前提

SnowflakeのSnowflake AI & ML Studioでは、Cortex PlaygroundCortex Search ServiceCortex Analystという3つのLLMサービスを簡単に試せます。
https://docs.snowflake.com/guides-overview-ai-features

今回準備するデータは以前のブログで使用したsampleデータを活用します。

https://dev.classmethod.jp/articles/tried-snowflake-cortex-agents/#sample%25E3%2583%2587%25E3%2583%25BC%25E3%2582%25BF%25E4%25BD%259C%25E6%2588%2590

Cortex Playground

Cortex Playgroundは、モデル出力の比較やデータへの問い合わせができます。後で応答結果をみてもわかりますが、裏側ではLLM関数の1つであるCOMPLETE関数を実行しています。

https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-playground

Cortex LLM Playground を使用するには、Snowflake Cortex LLM 関数を呼び出す権限を含む CORTEX_USER データベースロールが必要です。詳細については、以下をご確認ください。

https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-functions#label-cortex-llm-privileges

まず、Snowsightにログインし、「AI & ML」→「Studio」→「Cortex Playground」を開きます。開いたら、試しに以下のpromptを実行してみます。

snowflakeについて教えて

「View Code」で確認するとCOMPLETE関数を実行していることがわかります。
Screenshot 2025-04-15 at 21.13.43
Screenshot 2025-04-15 at 21.13.49

右上の「Compare」というボタンからmodelを選択し、それぞれのmodelに対し同じ質問をして出力を比較することができます。
Screenshot 2025-04-15 at 21.18.55

ちなみにmodelの選定については以下の記載が参考になりました。
https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-functions#choosing-a-model

次にtravel_reviewstableへの問い合わせを試したいと思います。

プロンプトボックスの「+ Connect your data」ボタンをクリックします。
「Connect your Data Source」では、ドロップダウンからデータベースtravel_intelligence、スキーマdata、テーブルtravel_reviewsを選択します。

Screenshot 2025-04-15 at 21.30.19

「Select a column with data to process」では、テキストデータカラムを選択します。今回はレビューの本文が含まれているreview_textを選択します。

Screenshot 2025-04-15 at 21.42.16

「Select a filter column」では、フィルターするための特定カラムを選択します。特定の目的地でフィルタリングするためにdestinationを選択します。

Screenshot 2025-04-15 at 21.44.54

「Select DESTINATION」で沖縄を選択し、以下のシステムプロンプトを入力します。

以下のホテルレビューから、以下の情報を抽出してください:
1. 主なポジティブポイント(3つ)
2. 主なネガティブポイント(あれば2つまで)
3. このホテルの最も印象的な特徴
4. 改善すべき点(あれば)

箇条書きで簡潔にまとめてください。

Screenshot 2025-04-15 at 21.51.04

こちらも先ほどと同様にCOMPLETE関数が実行されていました。
Screenshot 2025-04-15 at 21.53.10

Create a Cortex Search Service

次にCortex Search Serviceを作成していきます。
Cortex Searchは、Snowflakeデータに対して低遅延で高品質な検索を可能にするサービスです。埋め込みやインフラメンテナンスを心配することなく、数分でハイブリッド(ベクトルとキーワード)検索エンジンを構築できます。主に検索拡張生成(RAG)とエンタープライズ検索の2つのユースケースに適しており、大規模言語モデルを活用したアプリケーションのための検索体験を提供します。
https://docs.snowflake.com/ja/user-guide/snowflake-cortex/cortex-search/cortex-search-overview
https://docs.snowflake.com/en/sql-reference/sql/create-cortex-search

「AI & ML」→「Studio」→「Create a Cortex Search Service」を開きます。

今回はtravel_reviewsをsearch対象のtableとして選択します。
Screenshot 2025-04-16 at 7.04.18
Screenshot 2025-04-16 at 7.10.53

「Select a search column」では、検索対象となるテキストカラムであるREVIEW_TEXTを選択します。
Screenshot 2025-04-16 at 7.13.15

以下のカラムを属性(Attribute)として選択します。

  • CUSTOMER_NAME
  • DESTINATION
  • HOTEL_NAME
  • RATING
  • TRIP_TYPE

Attribute Columnsは、検索結果をフィルタリングするための条件として使用できるカラムです。ユーザーが検索クエリを入力すると、このテキスト列の内容に対して検索が行われます。例えば以下のフィルターです。

  • 「沖縄のホテルのレビューだけを見たい」→ DESTINATION で「沖縄」をフィルター
  • 「評価が4.5以上のレビューだけを見たい」→ RATING で「4.5以上」をフィルター
  • 「家族旅行のレビューだけを見たい」→ TRIP_TYPE で「家族旅行」をフィルター

Screenshot 2025-04-16 at 7.16.27

「Select columns to include in the service」では、全てのカラムを選択します。これらのカラムはすべて検索結果に含まれ、検索時にアクセスできるようになります。検索カラムと属性カラムは自動的に含まれますが、他のカラムも検索結果に表示したい場合は選択する必要があります。
Screenshot 2025-04-16 at 7.21.55

「Configure your Search Service」では、Target Lagの単位をhoursからminuteに変更します。この設定は元データが変更された場合に検索インデックスが更新される頻度を指定します。それ以外はデフォルトのまま設定完了となります。
Screenshot 2025-04-16 at 7.24.48
Screenshot 2025-04-16 at 7.27.16

試しにSQLワークシートでSQLを実行したところ、問題なく検索してデータを抽出できました。

SELECT PARSE_JSON(
  SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
    'TRAVEL_INTELLIGENCE.DATA.travel_review_search',
    '{
      "query": "温泉が素晴らしいホテル",
      "columns": ["review_text", "hotel_name", "destination", "rating"],
      "limit": 5
    }'
  )
)['results'] AS results;

Screenshot 2025-04-16 at 7.29.12

SELECT PARSE_JSON(
  SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
    'TRAVEL_INTELLIGENCE.DATA.travel_review_search',
    '{
      "query": "露天風呂からの景色が美しい",
      "columns": ["review_text", "hotel_name", "destination", "rating"],
      "filter": {"@eq": {"destination": "北海道"}},
      "limit": 3
    }'
  )
)['results'] AS results;

Screenshot 2025-04-16 at 7.29.41

Cortex Analyst

最後にCortex Analystを試したいと思います。Cortex Analystは、自然言語で質問するだけでSnowflake内のデータから回答を得られる、LLMを活用したサービスです。ユーザーが自然言語で質問すると、Cortex Analystはそのテキストとsemantic modelをもとにSQLクエリを自動生成し、Snowflake内のデータを検索して回答を提供します。

semantic modelは、ビジネスユーザーの言葉とデータベーススキーマの間のギャップを埋めるための仕組みです。ビジネスユーザーは業務用語で質問しますが、データベースでは技術的な略語で保存されていることが多く、この乖離がCortex Analystの精度を下げる原因となっています。

  • semantic modelの役割
    • ビジネス用語とデータベースの紐付け: 「収益」が「純収益」を意味し、「先月」が「前の暦月」を意味するなどの定義を提供
    • コンテキストの追加: データに関する追加の意味情報を提供し、質問の意図を正確に理解
    • 高精度な回答の実現: 適切なマッピングにより、Cortex Analystが正確な回答を提供可能に
  • semantic modelの構成要素
    • 論理テーブル: 物理的なデータベーステーブルまたはビューを表現
    • ファクト: 売上、コスト、数量などの数値データ
    • ディメンション: 製品、顧客、場所などのカテゴリデータ
    • 時間ディメンション: 日付、月、年などの時間関連データ
    • フィルター: 特定のデータサブセットに結果を制限する条件
    • メトリクス: ビジネスパフォーマンスを測定する指標(SUM()やAVG()などの集計関数を使用)
    • リレーションシップ: 共有キーを通じて論理テーブル間を接続

semantic modelはyaml形式で定義され、読みやすくかつ技術的な概念を明確に定義できるバランスを取っています。Snowsightのsemantic model generatorを使用して簡単に作成することができます。
https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst
https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst/semantic-model-spec#label-semantic-model-generator

「AI & ML」→「Studio」→「Cortex Analyst」を開きます。StageとSemantic Viewsを選択できます。semantic modelの定義となるyamlをStageに持つか、Snowflake Managedな場所にViewとして持つかの違いだと思います。Semantic Viewsについては、最新機能なので、ドキュメントを確認できませんでした。今回は試す意味もありSemantic Viewsを選択し、「+Create new」を選択します。

Screenshot 2025-04-16 at 21.25.27

「Location to store」では、travel_intelligence.dataを選択し、Nametravel_booking_analyticsDescriptionは以下を入力します。

このセマンティックモデルは旅行予約データを分析するためのものです。予約状況、旅行タイプ別の売上、旅行代理店のパフォーマンス、キャンセル率などの分析に使用できます。旅行日、予約金額、旅行タイプなどの情報を含み、ビジネスユーザーが自然言語で旅行予約データに関する質問ができるようにします。

Screenshot 2025-04-16 at 21.34.28

「Select tables」では、travel_intelligence.data.booking_metricsを選択します。
Screenshot 2025-04-16 at 21.38.35

「Select columns」では全てのカラムを選択します。
Screenshot 2025-04-16 at 21.41.03

これでsemantic modelを自動で作成してくれました。「Edit yaml」を選択するとyamlファイルが参照できます。
Screenshot 2025-04-16 at 21.52.43
Screenshot 2025-04-16 at 21.55.28

試しに以下の質問してみました。回答のSQLを見る限りは正確に回答できていそうだと思いました。

旅行タイプ別の平均予約金額を教えて

Screenshot 2025-04-16 at 21.59.03

キャンセル率が最も高い旅行代理店はどこですか?

Screenshot 2025-04-16 at 22.06.14

旅行タイプごとの予約数を教えてください

Screenshot 2025-04-16 at 22.07.09

保存後に、Schemaに紐づくSemantic Viewsを確認すると作成したSemantic Viewを確認することができます。
Screenshot 2025-04-16 at 22.10.38
Screenshot 2025-04-16 at 22.10.53

最後に

回答の精度や細かい動作までは確認できていませんが一通りの機能は確認できたので、参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.