はじめに
Snowflake Intelligenceを活用したいが,Snowflake Intelligence用のエージェントをCortex Agentで構築する際,クロスリージョン設定をする必要がある一方で,社内の規定上,海外のリージョンを利用できず,結果,現時点ではSnowflake Intelligenceを活用ができないと諦めている日本企業は一定数存在するのではないだろうか.
実際に私がCortex Agentを構築しようとしたとき,この問題に直面した.GUIの設定画面を開くと,オーケストレーション用のLLMとして選択できるのはclaude-4-sonnet,claude-3-7-sonnet,claude-3-5-sonnet,openai-gpt-5,openai-gpt-4.1のみである.しかし,これらのモデルはすべてAWS US リージョンでしか利用できないため,日本リージョンで運用している環境では必然的にクロスリージョン設定が必要になる.
データガバナンスの観点から国内リージョンに留めたい要件は多い.今回は,この制約を回避し,クロスリージョン設定なしでCortex AgentとSnowflake Intelligenceを利用する方法を紹介する.
Cortex Agentを使う理由
本題に入る前に,なぜCortex Agentにこだわるのかを説明する.
Cortex Agentには大きく2つのメリットがある.1つ目は,エージェントによる深堀機能によって回答品質が向上する点だ.単一のクエリではなく,複数回の試行錯誤を通じて最適な回答を導き出せる.
2つ目,そして私が特に重要だと考えているのは,複数のセマンティックモデルを組合せて利用できる点である.Cortex Analystで大規模なデータベースのセマンティックモデルを作成すると,トークン上限に引っかかってしまうことがある.実際に試してみたところ,数百テーブルを持つエンタープライズ規模のデータベースでは,単一のセマンティックモデルでは到底カバーしきれなかった.Cortex Agentを使えば,ドメインごとに分割したセマンティックモデルを複数参照できるため,この問題を容易に回避できる.
課題となるGUIの制約
日本リージョンでCortex Agentを構築しようとすると,すぐに壁にぶつかる.
GUIで設定を進めていくと,オーケストレーション用モデルの選択肢が前述の5つのモデルしか表示されない.そして,これらを選択して保存したあとに,プレイグラウンドで適当な文章を入力とすると,エラーが発生する.
各リージョンでの利用可能LLM一覧を確認すれば分かるが,これらのモデルは日本リージョンでは提供されていない.つまり,GUI経由での構築は実質的に不可能となる.
苦労した点は,Snowflake Intelligenceの公式ドキュメント(Cortex Agent)にこの制約を回避するための具体的な方法についての明示的な記載がなく,試行錯誤しながら原因を特定する必要があったことだ.
解決策: CLIによる構築
試行錯誤した結果,GUIでは設定できないモデルでも,CLIからなら指定できることがわかった.この仕様を利用すれば,日本リージョンで利用可能なモデルを使ってCortex Agentを構築できる.
ただし注意点がある.クロスリージョン設定をする場合に比べて,精度が劣る可能性がある点だ.推奨モデルとして指定されているClaude系やGPT-5には,それなりの理由があると思われる.この方法は,あくまでデータガバナンスの制約を優先する場合の譲歩策として考えてほしい.
実装手順
1. 事前設定
Snowflake Intelligenceを利用するためには,特定のデータベースとスキーマ構造が必要になる.まず以下のSQLを実行して,必要な環境を準備する.
-- データベース作成
CREATE DATABASE snowflake_intelligence;
-- スキーマ作成
CREATE SCHEMA IF NOT EXISTS snowflake_intelligence.agents;
-- スキーマ作成(ログ用)
CREATE SCHEMA snowflake_intelligence.logs;
-- フィードバック用テーブルの作成
CREATE OR REPLACE TABLE snowflake_intelligence.logs.feedback (
entity_type VARCHAR NOT NULL,
username VARCHAR NOT NULL,
agent_name VARCHAR NOT NULL,
agent_session_id VARCHAR NOT NULL,
context VARIANT NOT NULL,
feedback_timestamp DATETIME NOT NULL,
feedback_categories VARIANT,
feedback_message VARCHAR,
message_id VARCHAR,
feedback_sentiment VARCHAR,
user_prompt VARIANT,
executed_queries ARRAY,
documents_returned ARRAY,
response_start_timestamp DATETIME,
response_end_timestamp DATETIME,
response_duration NUMBER
);
このテーブル構造は,Snowflake Intelligenceがユーザーのフィードバックを記録するために使用される.実際に運用してみると,このログが回答品質の改善に役立つことが分かった.
2. Cortex Agentの作成
次に,CLIからCortex Agentを作成する.ここがポイントとなる.
USE SCHEMA snowflake_intelligence.agents;
CREATE AGENT IDENTIFIER('<AGENT_NAME>')
WITH PROFILE='{"display_name": "TEST"}'
COMMENT='Description about agent'
FROM SPECIFICATION $$
{
"models": {
"orchestration": "llama3.1-8b"
}
}
$$;
<AGENT_NAME>の部分は,作成したいエージェント名に置き換えてほしい.
重要なのは"orchestration": "llama3.1-8b"の部分だ.llama3.1-8bは日本リージョンでも利用可能なモデルであり,GUIでは選択できなかったが,CLIからは指定できる.CLIでエージェントを作成した後は,GUIにて該当のエージェントを編集し,セマンティックモデル等の設定を追加していけばよい(事前に対象テーブルのセマンティックモデルを作成しているものとする.).実際に試してみたところ,このモデルでも十分に実用的な回答を得られることが確認できた.
3. Snowflake Intelligenceでの確認
エージェントを作成したら,Snowflake Intelligenceの画面を開いてみよう.エージェント選択のドロップダウンに,先ほど作成したエージェントが表示されるようになっている.
試しに,PODBのセマンティックモデルを参照したエージェントを動作させてみると,国内リージョンのデータのみを使用しながら,自然言語での問い合わせに対して適切なSQLを生成し,回答を返してくれることが確認できる.
まとめ
クロスリージョン設定なしでCortex AgentとSnowflake Intelligenceを利用する方法を紹介した.GUIの制約をCLIで回避するという,やや力技なアプローチではあるが,データガバナンスの要件を満たしながらCortex Agentの恩恵を受けられる実用的な方法だ.
今後,日本リージョンでもClaude系のモデルが利用可能になる可能性もある.それまでの間は,この方法が有効な選択肢となるだろう.
実際に運用する際は,回答の精度を定期的に検証し,必要に応じてセマンティックモデルのチューニングを行うことをお勧めする.


