はじめに
本記事は、2025年10月7日(火)に開催するSnow Kyushu User Group ハンズオン「博多弁で答えるチャットボットをSnowflake Inteligenceで作ろう」で利用するコードをまとめたものです。
登壇資料はこちら
使用しているデータである全国飲食店データの福岡市中央区データは期間限定利用となります。(2025/10/31まで)
データに関するお問い合わせは Prepper@truestar.co.jpへ。
ハンズオン コピー&ペースト用コード
1.環境設定
-- 1.環境設定 | 1.Snowflake Intelligenceを使うためのロール・スキーマ作成
-- ACCOUNTADMIN ロールに切り替え
-- (最上位の管理者ロール。アカウント全体に対する権限を持つ)
use role accountadmin; -- Snowflake Intelligence 用の管理ロールを作成
create role if not exists snowflake_intelligence_admin;
-- アカウント全体で Integration オブジェクトを作成する権限を付与
-- (API Integration や Storage Integration などを作れるようになる)
grant create integration on account to role snowflake_intelligence_admin;
-- アカウント全体で Database を作成する権限を付与
grant create database on account to role snowflake_intelligence_admin;
-- 指定した Warehouse(ここでは compute_wh)を利用できる権限を付与
grant usage on warehouse compute_wh 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;
-- 作成したロールをアクティブに切り替え
use role snowflake_intelligence_admin;
-- Snowflake Intelligence 用のデータベースを作成
-- すでに存在していれば新規作成はされない
create database if not exists snowflake_intelligence;
-- データベース内に schema "agents" を作成
create schema if not exists snowflake_intelligence.agents;
-- schema "agents" 上で Agent オブジェクトを作成できる権限を付与
-- (Snowflake Native Apps の Agent 機能を利用するため)
grant create agent on schema snowflake_intelligence.agents to role snowflake_intelligence_admin;
-- Cortex のクロスリージョン利用を AWS_US リージョンに対して有効化
ALTER ACCOUNT SET CORTEX_ENABLED_CROSS_REGION = 'AWS_US';
-- 1.環境設定 | 2.データベース・スキーマ作成
CREATE DATABASE if not exists HAKATA_DB;
CREATE SCHEMA if not exists HAKATA_DB.HAKATA_SCH;
-- 1.環境設定 | 3.ステージ作成
CREATE STAGE if not exists HAKATA_DB.HAKATA_SCH.SEMANTIC_MODEL;
-- 1.環境設定 | 4.ディレクトリテーブルを有効化
ALTER STAGE HAKATA_DB.HAKATA_SCH.SEMANTIC_MODEL
SET DIRECTORY = ( ENABLE = TRUE );
-- 1.環境設定 | 5.Email送信用のインテグレーション作成
CREATE OR REPLACE NOTIFICATION INTEGRATION EMAIL_INTEGRATION
TYPE=EMAIL
ENABLED=TRUE
DEFAULT_SUBJECT = 'Snowflake Intelligence';
-- 1.環境設定 | 6.Email送信用のプロシージャ作成
CREATE OR REPLACE PROCEDURE HAKATA_DB.HAKATA_SCH.SEND_EMAIL("RECIPIENT_EMAIL" VARCHAR, "SUBJECT" VARCHAR, "BODY" VARCHAR)
RETURNS VARCHAR
LANGUAGE PYTHON
RUNTIME_VERSION = '3.12'
PACKAGES = ('snowflake-snowpark-python')
HANDLER = 'send_email'
EXECUTE AS OWNER
AS '
def send_email(session, recipient_email, subject, body):
try:
# Escape single quotes in the body
escaped_body = body.replace("''", "''''")
# Execute the system procedure call
session.sql(f"""
CALL SYSTEM$SEND_EMAIL(
''email_integration'',
''{recipient_email}'',
''{subject}'',
''{escaped_body}''
)
""").collect()
return "Email sent successfully"
except Exception as e:
return f"Error sending email: {str(e)}"
';;
3.セマンティックモデルを作成
name: FUKUOKA_RESTRANT_INFO
tables:
- name: FOOD_SAMPLE_FUKUOKA_CHUO
base_table:
database: FOOD_ESTABLISHMENTS_DATA_SET_IN_JAPAN
schema: MART
table: FOOD_SAMPLE_FUKUOKA_CHUO
dimensions:
- name: BRAND_ID
description: ブランドコード
expr: BRAND_ID
data_type: VARCHAR(16777216)
sample_values:
- '2114'
- '302'
- name: BRAND_NAME
description: ブランド名
expr: BRAND_NAME
data_type: VARCHAR(16777216)
sample_values:
- 山本のハンバーグ
- ぎゅう丸
- ケンタッキーフライドチキン
- name: BRAND_OWNER
description: オーナー会社の法人番号
expr: BRAND_OWNER
data_type: VARCHAR(16777216)
sample_values:
- '1300002006162'
- '3011001053867'
- name: CORPORATE_ADDRESS
description: 運営法人住所
expr: CORPORATE_ADDRESS
data_type: VARCHAR(16777216)
sample_values:
- 福岡県福岡市中央区大手門2丁目1番16号
- 福岡県福岡市中央区今泉2丁目3番31号プロスペリタ今泉Ⅱ1階
- name: CORPORATE_CAPITAL
description: 運営法人資本金(整備前)
expr: CORPORATE_CAPITAL
data_type: VARCHAR(16777216)
sample_values:
- 100百万円
- 1億円
- name: CORPORATE_EMPLOYEES_NUMBER
description: 運営法人従業員数(整備前)
expr: CORPORATE_EMPLOYEES_NUMBER
data_type: VARCHAR(16777216)
sample_values:
- 10〜29
- 約6800名 ※自社合計/アルバイト・パート含む
- name: CORPORATE_ESTABLISHMENT
description: 運営法人設立日(整備前)
expr: CORPORATE_ESTABLISHMENT
data_type: VARCHAR(16777216)
sample_values:
- 1952/10/1
- 2006年3月1日
- 1989/9/1
- name: CORPORATE_NAME
description: 運営法人名
expr: CORPORATE_NAME
data_type: VARCHAR(16777216)
sample_values:
- 株式会社なか尾
- 株式会社ファニーズ
- 法人データなし
- name: CORPORATE_PHONE_NUMBER
description: 運営法人電話番号
expr: CORPORATE_PHONE_NUMBER
data_type: VARCHAR(16777216)
sample_values:
- 086-237-1309
- 0276-55-0326
- name: CORPORATE_PRESIDENT_NAME
description: 運営法人代表者
expr: CORPORATE_PRESIDENT_NAME
data_type: VARCHAR(16777216)
sample_values:
- 代表取締役社長 齋木 健作
- 香川暁子
- name: CORPORATE_SALES
description: 運営法人従業員数(整備前)
expr: CORPORATE_SALES
data_type: VARCHAR(16777216)
sample_values:
- 278億4880万円(2023年3月期実績)
- '23'
- 34,036百万円
- name: CORPORATE_WEBSITE_URL
description: 運営法人URL
expr: CORPORATE_WEBSITE_URL
data_type: VARCHAR(16777216)
sample_values:
- https://www.traindor.com/
- http://kyuushoku0050.com/
- name: CORPORATE_ZIPCODE
description: 運営法人郵便番号
expr: CORPORATE_ZIPCODE
data_type: VARCHAR(16777216)
sample_values:
- '8790123'
- '8100041'
- '8620950'
- name: GENRE_MAJOR_NAME
description: ジャンル大分類
expr: GENRE_MAJOR_NAME
data_type: VARCHAR(16777216)
sample_values:
- 飲食業
- name: GENRE_MEDIUM_NAME
description: ジャンル中分類
expr: GENRE_MEDIUM_NAME
data_type: VARCHAR(16777216)
sample_values:
- 配達・持ち帰り
- 飲食店
- name: GENRE_SUB_NAME
description: ジャンル小分類
expr: GENRE_SUB_NAME
data_type: VARCHAR(16777216)
sample_values:
- 専門料理店
- 飲み屋・居酒屋
- カフェ・喫茶店
- name: STORE_ADDRESS
description: 店舗住所
expr: STORE_ADDRESS
data_type: VARCHAR(16777216)
sample_values:
- 福岡県福岡市中央区警固1ー12ー3
- 福岡県福岡市中央区荒戸2ー1ー11
- 福岡県福岡市中央区大手門3ー8ー17
- name: STORE_BUILDING_NAME
description: 店舗ビル名
expr: STORE_BUILDING_NAME
data_type: VARCHAR(16777216)
sample_values:
- シャンボール警固 1F
- DADAビル 7F
- 東洋薬院ビル1F
- name: STORE_CITY_NAME
description: 店舗市町村
expr: STORE_CITY_NAME
data_type: VARCHAR(16777216)
sample_values:
- 福岡市中央区
- name: STORE_FACEBOOK
description: 店舗Facebook
expr: STORE_FACEBOOK
data_type: VARCHAR(16777216)
sample_values:
- https://www.facebook.com/sushikoutoku/
- https://www.facebook.com/foolsgold.fuk/
- name: STORE_INSTAGRAM
description: 店舗instagram
expr: STORE_INSTAGRAM
data_type: VARCHAR(16777216)
sample_values:
- https://www.instagram.com/shubo.fukamaru/
- https://www.instagram.com/nocoffee_/
- name: STORE_NAME
description: 店舗名
expr: STORE_NAME
data_type: VARCHAR(16777216)
sample_values:
- 博多華味鳥 天神店
- あんてぃっくどーる
- U.Ni coffee
- name: STORE_OTHER_SITE
description: 店舗_他site
expr: STORE_OTHER_SITE
data_type: VARCHAR(16777216)
sample_values:
- '[''https://tabelog.com/fukuoka/A4001/A400103/40064046/'']'
- '[''https://tabelog.com/fukuoka/A4001/A400105/40063982/'']'
- name: STORE_PHONE_NUMBER
description: 店舗電話番号
expr: STORE_PHONE_NUMBER
data_type: VARCHAR(16777216)
sample_values:
- 070-9104-0409
- 092-791-7270
- 092-600-4115
- name: STORE_PREF_NAME
description: 店舗都道府県
expr: STORE_PREF_NAME
data_type: VARCHAR(16777216)
sample_values:
- 福岡県
- name: STORE_URL
description: 店舗URL
expr: STORE_URL
data_type: VARCHAR(16777216)
sample_values:
- https://teaway.jp/
- https://unity-2008.com/
- name: STORE_X
description: 店舗X
expr: STORE_X
data_type: VARCHAR(16777216)
sample_values:
- https://twitter.com/bulletmattsun
- https://twitter.com/gkineya
- name: STORE_ZIPCODE
description: 店舗郵便番号
expr: STORE_ZIPCODE
data_type: VARCHAR(16777216)
sample_values:
- '8100004'
- '8100023'
- '8100044'
- name: UPDATE_DATE
description: データ取得日
expr: UPDATE_DATE
data_type: VARCHAR(16777216)
sample_values:
- '20251001'
- name: UUID
description: 店舗ID
expr: UUID
data_type: VARCHAR(16777216)
sample_values:
- cc7b65cd-5a2e-4025-af52-d6a357739896
- c99fe130-8102-4b44-b9e3-1fbddb198998
- c912f497-1e41-415b-b4fa-20e448b57eb3
time_dimensions:
- name: CLOSED_DATE
description: 閉店推定日
expr: CLOSED_DATE
data_type: DATE
sample_values:
- '2025-03-27'
- '2024-10-01'
- name: CORPORATE_ESTABLISHMENT_DATE
description: 運営法人設立日(数値化)
expr: CORPORATE_ESTABLISHMENT_DATE
data_type: DATE
sample_values:
- '2006-03-01'
- '2011-07-01'
- name: OPEN_DATE
description: 開業推定日
expr: OPEN_DATE
data_type: DATE
sample_values:
- '2021-01-14'
- '2021-09-28'
- '2000-02-02'
facts:
- name: CLOSED_FLAG
description: 閉店フラグ
expr: CLOSED_FLAG
data_type: NUMBER(38,0)
sample_values:
- '2'
- '0'
- '1'
- name: CORPORATE_CAPITAL_INT
description: 運営法人資本金(数値化)
expr: CORPORATE_CAPITAL_INT
data_type: NUMBER(38,0)
sample_values:
- '48000000'
- '100000000'
- name: CORPORATE_EMPLOYEES_INT
description: 運営法人従業員数(数値化)
expr: CORPORATE_EMPLOYEES_INT
data_type: NUMBER(38,0)
sample_values:
- '40'
- '250'
- '76'
- name: CORPORATE_NUMBER
description: 運営法人番号
expr: CORPORATE_NUMBER
data_type: NUMBER(38,0)
sample_values:
- '5290001040078'
- '5330001025784'
- name: CORPORATE_SALES_INT
description: 運営法人従業員数(数値化)
expr: CORPORATE_SALES_INT
data_type: NUMBER(38,0)
sample_values:
- '4000000000'
- '28100000000'
- name: SEATS
description: 店舗座席数
expr: SEATS
data_type: NUMBER(38,0)
sample_values:
- '45'
- '16'
- '13'
- name: STORE_LAT
description: 緯度
expr: STORE_LAT
data_type: NUMBER(10,7)
sample_values:
- '33.5896800'
- '33.5871863'
- '33.5824861'
- name: STORE_LON
description: 経度
expr: STORE_LON
data_type: NUMBER(10,7)
sample_values:
- '130.3803123'
- '130.3760811'
- '130.3919914'
verified_queries:
- name: ラーメン
question: ラーメン食べたい。一番新しいお店の名前と電話番号教えて
use_as_onboarding_question: true
sql: SELECT store_name, store_phone_number FROM food_sample_FUKUOKA_chuo WHERE genre_sub_name = 'ラーメン' ORDER BY open_date DESC NULLS LAST LIMIT 1 /* Generated by Cortex Analyst */
verified_by: 〇〇〇
verified_at: 1747702367
4. Cortex Agentsの設定
博多弁チャットボット用プロンプト例
あんたは、元気でおしゃべり好きな博多のおばちゃんたい。
注意事項
回答は下記の「博多弁説明」を参考にして、博多弁で答えるっちゃ。
敬語は使わんとよ。
質問に関連する面白か話をひとつ付け加えるとよかよ。
最初には、「〇〇が食べたいと?」って入れて。
最後に必ず「また遊びに来んしゃい」で締めるとよ。
博多弁説明
語彙
ああ、なるほどね → あーね
ありがとう → ありがとぉね
とても → ばり
疲れた → きつか、しんどか
だめ → あいよらん、あいできん
すごい → ばりすごか、すごかばい
うるさい → しゃーしい
していない → しとらん
どうして? → ~と?(例:何しよっと?)
だから → ~けん(例:雨やけん濡れる)
よい → よか、よかばい
怖い → えずか
凝る → こわる(肩がこわる)
文法
進行形:「〜している」→「〜しよる」
例:食べている → 食べよる
否定形:「〜ない」→「〜ん」「〜しとらん」
例:行かない → 行かん
確認・疑問:「〜の?」→「〜と?」
例:何してるの? → 何しよっと?
形容詞語尾:「〜い」→「〜か」
例:美味しい → うまか
理由・原因:「〜だから」→「〜けん」
例:遅れたから → 遅れたけん
逆接:「〜だけど」→「〜っちゃけど」
例:行きたいけど → 行きたいばってん
指示表現:「あげん/そげん/こげん/どげん」=あのような/そういう/こういう/どういう






