
Snowflake Intelligenceが一般提供!公式チュートリアルを使用してCortex AnalystとCortex Searchに触れながらSnowflake Intelligenceを試してみた
かわばたです。
Snowflake BULD期間中にSnowflake Intelligenceが一般提供となりました。
今回はSnowflake Intelligenceを試していきます。
【公式ドキュメント】
対象読者
- Snowflake Intelligenceについて確認したい方
- Snowflake上で、非構造化データ・構造化データ問わず、自然言語で問い合わせたい方
- Snowflake上で、データに基づいたメール配信などを行えるエージェントを構築したい方
検証環境と事前準備
検証環境
- SnowflakeトライアルアカウントEnterprise版
概要
Snowflake Intelligenceは、Cortex AISQL、Cortex Analyst、およびCortex Searchを基盤として、Snowflakeに保存されているデータに対して、AIを使用し『自然言語』で検索したり、高度な分析を行うことができます。
- Snowflake Intelligence:エージェントを使用するプラットフォーム
- Cortex Agents:Snowflake Intelligence内で動作するAIコンポーネント
と考えると分かりやすいと思います。
主なメリットとしては、下記になります。
| メリット | 内容 |
|---|---|
| 専門知識が不要 | SQLが書けないビジネスユーザーでも「今月の売上トップ5の製品をグラフで見せて」のようにチャット形式で質問するだけで、Snowflakeが自動でSQLを生成・実行し、答えやグラフを表示してくれます。 |
| データ移動が不要 | 従来はAIを使用するために、外部にデータを出して利用していましたが、Snowflake内で完結するため、セキュリティやプライバシーの面で安全です。 |
具体的な使用方法
- SQL生成:「ダイナミックテーブルを用いたSQLクエリを書いて」
- Snowflake IntelligenceチュートリアルにSnowflakeドキュメントを使用するエージェントを作成することができるのでそちらを試していきます。
- データ分析:「東京エリアの過去3ヶ月の売上推移を教えて」
- グラフ作成:「製品カテゴリ別の販売数を棒グラフにして」
- こちらもCortex AnalystとCortex Searchを使用するチュートリアルがあるため試していきます。
Snowflakeドキュメントを使用するエージェントの作成
Snowflake Documentationのインストール
Snowflakeドキュメントをナレッジベースとして使用するエージェントの作成を行っていきます。
-
Snowflake Marketplaceから
Snowflake Documentationを検索し、クリックします。

-
下記画面に遷移するので、取得を押下します。

-
下記画面がポップアップするので、取得を押下します。

-
これで
Snowflake Documentationのダウンロードが完了しました。

エージェントを作成するロールに、新しく作成されたデータベースの権限を追加します。
今回はトライアルとして、ACCOUNTADMINロールを使用します。
=====================================================
事前設定
=====================================================
USE ROLE accountadmin;
=====================================================
エージェントを作成用
=====================================================
-- 自分のデータベース・スキーマを作成
CREATE DATABASE IF NOT EXISTS MY_AGENTS_DB;
CREATE SCHEMA IF NOT EXISTS MY_AGENTS_DB.AGENTS;
-- 自分のスキーマに対してCREATE AGENT権限を付与
GRANT CREATE AGENT ON SCHEMA MY_AGENTS_DB.AGENTS TO ROLE ACCOUNTADMIN;
-- エージェントを作成するロールに、新しく作成されたデータベースの権限を追加します。これらの権限は、データベースにアクセスするために必要となります。
GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE_DOCUMENTATION TO ROLE ACCOUNTADMIN;
エージェントの作成
エージェントは、Semantic Views、Semantic Models、Cortex Searchサービス、カスタムツールに接続されたAIモデルです。 自然言語での質問に答え、洞察を提供し、視覚化を生成することができます。
先ほどインストールしたSnowflake Documentationに対するCortex Searchサービスをエージェントに紐づけます。
-
AI&ML→エージェントを選択します。

-
エージェントの作成を押下します。

-
下記項目を入力していきます。
- データベースとスキーマ:エージェントを作成する先を指定します。
- エージェントオブジェクト名:エージェントオブジェクト名を記載します。
- 表示名:Snowflake intelligenceで表示される名称を記載します。
その後、エージェントを作成を押下します。

- 下記画面に遷移するので、ツールタブの
Cortex Search Serviceの追加ボタンを押下します。

Cortex Search Serviceの設定画面に遷移するので、下記のように設定します。
- スキーマ:Snowflake Documentation.SHAREDスキーマを選択
- Search service:CKE_SNOWFLAKE_DOCS_SERVICEの検索サービスを追加
- ID列:SOURCE_URLを指定。ソースへのハイパーリンク先に使用
- タイトル列:DOCUMENT_TITLEを指定
- Tool details:任意の名称を記載
記載が完了したら、最下部の追加を押下します。

Cortex Search Service欄に追加されていることが確認できました。エージェントを保存します。

Snowflake Intelligenceで確認
Snowflakeのホーム画面から、AI&ML→Snowflake Intelligenceを押下します。

タブが切り替わり、下記のような画面が表示されます。今回作成したSourcesを選択できます。

下記質問を問い合わせてみました。
ダイナミックテーブルテーブルを用いたSQLクエリを書いて
出力結果

このように、Snowflakeのドキュメントから参照し解答を生成してくれます。
ドキュメントをソースとして指定できるのは非常にありがたいですね!
Cortex AnalystとCortex Search
データ分析・グラフ作成の観点でCortex AnalystとCortex Searchをチュートリアルで試していきます。
事前準備
上記GitHubからリポジトリをクローンします。ダウンロードもできますので、お好みで対応してください。
setup.sqlを上から順に実行していきます。
-- ACCOUNTADMINロールを使用してセットアップを開始
use role accountadmin;
-- Snowflake Intelligence管理用のロールを作成
create or replace role snowflake_intelligence_admin;
-- 新しいロールにウェアハウス、データベース、統合の作成権限を付与
grant create warehouse on account to role snowflake_intelligence_admin;
grant create database on account to role snowflake_intelligence_admin;
grant create integration on account to role snowflake_intelligence_admin;
-- 現在のユーザーに新しいロールを割り当て
set current_user = (select current_user());
grant role snowflake_intelligence_admin to user identifier($current_user);
-- デフォルトロールとウェアハウスを設定
alter user set default_role = snowflake_intelligence_admin;
alter user set default_warehouse = dash_wh_si;
-- 新しいロールに切り替えてリソースを作成
use role snowflake_intelligence_admin;
-- ダッシュボード用のデータベース、スキーマ、ウェアハウスを作成
create or replace database dash_db_si;
create or replace schema retail;
create or replace warehouse dash_wh_si with warehouse_size='large';
-- Snowflake Intelligence用の専用データベースとスキーマを作成
create database if not exists snowflake_intelligence;
create schema if not exists snowflake_intelligence.agents;
-- エージェント作成権限を付与
grant create agent on schema snowflake_intelligence.agents to role snowflake_intelligence_admin;
-- 作業コンテキストを設定
use database dash_db_si;
use schema retail;
use warehouse dash_wh_si;
-- CSVファイル用のファイルフォーマットを作成
create or replace file format swt_csvformat
skip_header = 1 -- ヘッダー行をスキップ
field_optionally_enclosed_by = '"' -- ダブルクォートでフィールドを囲む
type = 'csv';
-- マーケティングキャンペーンメトリクステーブルとデータロード
create or replace stage swt_marketing_data_stage
file_format = swt_csvformat
url = 's3://sfquickstarts/sfguide_getting_started_with_snowflake_intelligence/marketing/';
-- マーケティングキャンペーンメトリクステーブル作成
create or replace table marketing_campaign_metrics (
date date, -- 日付
category varchar(16777216), -- カテゴリ
campaign_name varchar(16777216), -- キャンペーン名
impressions number(38,0), -- インプレッション数
clicks number(38,0) -- クリック数
);
-- S3からマーケティングデータをロード
copy into marketing_campaign_metrics
from @swt_marketing_data_stage;
-- 製品テーブルとデータロード
create or replace stage swt_products_data_stage
file_format = swt_csvformat
url = 's3://sfquickstarts/sfguide_getting_started_with_snowflake_intelligence/product/';
-- 製品マスターテーブル作成
create or replace table products (
product_id number(38,0), -- 製品ID
product_name varchar(16777216), -- 製品名
category varchar(16777216) -- カテゴリ
);
-- S3から製品データをロード
copy into products
from @swt_products_data_stage;
-- 売上テーブルとデータロード
create or replace stage swt_sales_data_stage
file_format = swt_csvformat
url = 's3://sfquickstarts/sfguide_getting_started_with_snowflake_intelligence/sales/';
-- 売上データテーブル作成
create or replace table sales (
date date, -- 売上日
region varchar(16777216), -- 地域
product_id number(38,0), -- 製品ID
units_sold number(38,0), -- 販売数量
sales_amount number(38,2) -- 売上金額
);
-- S3から売上データをロード
copy into sales
from @swt_sales_data_stage;
-- ソーシャルメディアテーブルとデータロード
create or replace stage swt_social_media_data_stage
file_format = swt_csvformat
url = 's3://sfquickstarts/sfguide_getting_started_with_snowflake_intelligence/social_media/';
-- ソーシャルメディア分析テーブル作成
create or replace table social_media (
date date, -- 日付
category varchar(16777216), -- カテゴリ
platform varchar(16777216), -- プラットフォーム名
influencer varchar(16777216), -- インフルエンサー名
mentions number(38,0) -- メンション数
);
-- S3からソーシャルメディアデータをロード
copy into social_media
from @swt_social_media_data_stage;
-- サポートケーステーブルとデータロード
create or replace stage swt_support_data_stage
file_format = swt_csvformat
url = 's3://sfquickstarts/sfguide_getting_started_with_snowflake_intelligence/support/';
-- サポートケース管理テーブル作成
create or replace table support_cases (
id varchar(16777216), -- ケースID
title varchar(16777216), -- ケースタイトル
product varchar(16777216), -- 関連製品
transcript varchar(16777216), -- やり取りの記録
date date -- 作成日
);
-- S3からサポートケースデータをロード
copy into support_cases
from @swt_support_data_stage;
-- セマンティックモデル用のステージ作成(暗号化有効)
create or replace stage semantic_models encryption = (type = 'snowflake_sse') directory = ( enable = true );
-- メール通知統合の作成
create or replace notification integration email_integration
type=email
enabled=true
default_subject = 'snowflake intelligence';
-- メール送信用のストアドプロシージャ作成
create or replace procedure send_email(
recipient_email varchar, -- 受信者メールアドレス
subject varchar, -- 件名
body varchar -- 本文
)
returns varchar
language python
runtime_version = '3.12'
packages = ('snowflake-snowpark-python')
handler = 'send_email'
as
$$
def send_email(session, recipient_email, subject, body):
try:
# 本文内のシングルクォートをエスケープ
escaped_body = body.replace("'", "''")
# システムプロシージャを実行してメール送信
session.sql(f"""
CALL SYSTEM$SEND_EMAIL(
'email_integration',
'{recipient_email}',
'{subject}',
'{escaped_body}',
'text/html'
)
""").collect()
return "Email sent successfully"
except Exception as e:
return f"Error sending email: {str(e)}"
$$;
-- Cortexのクロスリージョン機能を有効化(AWS US リージョン)
ALTER ACCOUNT SET CORTEX_ENABLED_CROSS_REGION = 'AWS_US';
-- セットアップ完了メッセージ
select 'Congratulations! Snowflake Intelligence setup has completed successfully!' as status;
SNOWFLAKE_INTELLIGENCE_ADMINにロールを切り替えてください。
Cortex AnalystのSEMANTIC_MODELSを作成
Cortex Analystは自然言語をSQLクエリに変換する高精度なテキスト・ツー・SQL機能を提供し、ビジネスユーザーがSQLを書かずに直接データから回答を得ることができます。
早速作成していきます。
- AI&ML→Cortex Analystを選択します。

-
下記画面に遷移するので、新規作成→YAMLファイルをアップロードを選択します。

-
GitHubからクローンorダウンロードした
marketing_campaigns.yamlをアップロードします。
- データベース:DASH_DB_SI
- スキーマ:RETAIL
- ステージ:SEMANTIC_MODELS

- アップロードが完了したら、保存を押下します。
Logical tablesの箇所をみるとディメンションやファクトに該当するカラムに説明が記載されていることが分かります。

Cortex Search
従来のキーワード検索と、AIを活用して文章の意味や文脈を理解するベクトル検索を組み合わせた「ハイブリッド検索」を、Snowflake上のデータに対して簡単に構築することができる検索サービスです。
- AI&ML→Cortex Searchを選択します。

- 下記画面に遷移するので、作成を押下します。

3.ポップアップした画面に、下記を入力していきます。
- データベース:DASH_DB_SI
- スキーマ:RETAIL
- サービス名:Support_Cases
- インデックスを作成するデータ:SUPPORT_CASES
- 検索列:TRANSCRIPT
- 属性列:TITLE、PRODUCT
- サービスに含む列:すべて選択
- 検索サービスの設定:インデックス用ウェアハウスにDASH_WH_SIを指定、それ以外デフォルト値

【インデックスを作成するデータ】

【検索列】

【属性列】

【サービスに含む列】

【検索サービスの設定】

下記のように作成することができました。

エージェントの作成
Snowflakeドキュメントを使用するエージェントを作成した時と同様の手順となります。
-
AI&ML→エージェントを選択します。

-
エージェントの作成を押下します。

-
下記項目を入力していきます。
- データベースとスキーマ:SNOWFLAKE_INTELLIGENCE.AGENTS
- エージェントオブジェクト名:Sales_AI
- 表示名:Sales//AI
その後、エージェントを作成を押下します。

指示の追加
Example questionsを下記のように設定できます。
これはSnowflake Intelligenceのインターフェースに例として表示されます。

ツールの追加
【Cortex Analyst】
セマンティックモデルファイルをチェック
- データベースとスキーマ:DASH_DB_SI.RETAIL
- ステージ名:SEMANTIC_MODELS
- ファイル名:marketing_campaigns.yaml
- ツールの名称:Sales_And_Marketing_Data
- ツールの説明:
DASH_DB_SI.RETAILスキーマの売上・マーケティングデータモデルは、マーケティングキャンペーン、製品情報、売上データ、ソーシャルメディアのエンゲージメントを連携させることで、小売業のパフォーマンスを包括的に把握できます。このモデルは、クリック数やインプレッション数を通じてマーケティングキャンペーンの効果を追跡し、異なる地域における実際の売上実績とリンクさせることを可能にします。ソーシャルメディアのエンゲージメントは、インフルエンサーの活動やメンションを通じてモニタリングされ、すべてのデータは製品カテゴリとIDで連携されます。テーブル間の時系列的な連携により、マーケティングが売上実績やソーシャルメディアのエンゲージメントに及ぼす影響を、時間の経過とともに包括的に分析できます。
- ウェアハウス:カスタムを選択し、DASH_WH_SIを選択
- クエリタイムアウト:60秒で設定


【Cortex Search】
- データベースとスキーマ:DASH_DB_SI.RETAIL
- 検索サービス:Support_Cases
- ID列:ID
- タイトル列:TITLE
- ツールの名称:Support_Cases

【カスタムツールの追加】
- リソースタイプ:procedure
- データベースとスキーマ:DASH_DB_SI.RETAIL
- カスタムツール識別子:DASH_DB_SI.RETAIL.SEND_EMAIL()
- ツールの名称:Send_Email
- ウェアハウス:DASH_WH_SI
各パラメータに対して説明を記載します。
- body
HTML構文を使用してください。取得したコンテンツがマークダウン形式の場合は、HTMLに変換してください。本文が提供されていない場合は、最後の質問を要約し、それをメールの本文として使用してください。
- recipient_email
電子メールが提供されていない場合は、現在のユーザーの電子メール アドレスに送信します。
- subject
件名が指定されていない場合は、「Snowflake Intelligence」を使用します。


Snowflake Intelligenceで確認

上記のように作成したエージェントを指定できます。
Cortex Analystを活用して検索した結果は下記のとおりです。

サマリを出力してくれて、グラフまで作成してくれるのは便利ですね!
Cortex Searchを活用して検索した結果は下記のとおりです。

売り上げ動向の概要をメールで送ってくださいと指示もしてみました。

メールの内容

弊社で支援できること
Snowflake Intelligence Launch Partnerとして
弊社は、Snowflakeの最新機能である「Snowflake Intelligence」において、限られたパートナーのみが認定されるSnowflake Intelligence Launch Partnerに認定を受けております。
導入支援:お客様がSnowflake Intelligenceをスムーズに導入できるよう、技術的な専門知識やベストプラクティスを提供し伴走型の支援を行います。
各種SaaSと組み合わせた支援
Snowflake Intelligenceのポテンシャルを最大化するためには、周辺ツールとの有機的な連携が欠かせません。弊社ではSnowflake単体の支援に加え、dbtやFivetranといった主要なSaaSを組み合わせた、拡張性の高いデータ基盤構築を支援いたします。
最新の内容をいち早く支援
弊社クラスメソッドでは、Snowflake Intelligenceはもちろんdbt Projects on Snowflakeなどの最新機能に関する情報発信を定期的に行っており、これらの最新機能に関する技術支援も可能です。
最後に
Snowflake Intelligenceの活用について、Cortex AnalystとCortex Searchを試しながら確認しました。
実際に試してみると、SQLを書かずに自然言語でサマリを出してくれるのは凄く楽ですね。
一番理想的なケースとして、社内のデータをすべてSnowflakeで一元管理し問い合わせはCortex Searchを使用し、分析はCortex Analystを活用していくことがビジネスの推進に役立ちそうだと感じました。
(もちろんSEMANTIC_MODELSなどの設定が大変ですが、このあたりもデータエンジニアの役割になっていくのだなと改めて気づかされました)
Snowflakeの最新機能の活用に関してご相談事がありましたら、ぜひクラスメソッドまでお問い合わせください!







