Snowflake

インスタの数字と投稿文の両方に、Cortex Agent で答える

Ryosuke Ishii

これまでの記事では、セマンティックビューに書いた集計の決まりで、インスタの「数字」に答えさせてきました。ただ、聞きたいことは数字だけではありません。「辛い料理の投稿にはどんなものがある?」のように、投稿の中身を聞きたいこともあります。

そこで、投稿の文章を意味で探す Cortex Search と、数字と文章の両方を使い分ける Cortex Agent を試しました。あわせて、集計を自動で作り直す Dynamic Table も試しています。

数字はセマンティックビュー、文章は Cortex Search。エージェントが使い分ける
数字はセマンティックビュー、文章は Cortex Search。エージェントが使い分ける

集計を自動で作り直す:Dynamic Table

Dynamic Table は、元のデータが変わると、決めた間隔で集計を自動で作り直す表です。インスタの月次の集計(投稿数・リーチ・保存・保存率)を、1日ごとに作り直す設定で作りました。

CREATE DYNAMIC TABLE ORDER_SYSTEM.BLOG_LAB.DT_IG_MONTHLY
  TARGET_LAG = '1 day' WAREHOUSE = COMPUTE_WH
AS SELECT post_month, COUNT(*) AS post_count, SUM(reach) AS total_reach, SUM(saved) AS total_saves,
          ROUND(DIV0(SUM(saved), SUM(reach)) * 100, 2) AS monthly_save_rate
   FROM ORDER_SYSTEM.SEMANTIC_SANDBOX.V_IG_POST_MONTHLY_BASIS GROUP BY post_month;

2026年5〜7月の値は、公開している月次レポートと一致しました(5月:11本・リーチ6,133・保存率0.10%、6月:8本・7,379・0.20%、7月:3本・823・0.36%)。

作るときに「集計が複雑なので、毎回まるごと作り直す(FULL)方式にした」と返ってきました。差分だけを足す方式(INCREMENTAL)は、集計の形によっては選ばれません。

Dynamic Table は、作ったままにしておくと、決めた間隔ごとに計算が動きます。試験が終わったら `ALTER DYNAMIC TABLE … SUSPEND` で止めておきます。

投稿の文章を意味で探す:Cortex Search

Cortex Search は、文章を「言葉が一致するか」ではなく「意味が近いか」で探す機能です。投稿の本文を探せるようにしました。

最初は、投稿を1行ずつにまとめたビューの上に作ろうとして、権限エラーで止まりました。Cortex Search は、元の表の変更を追いかける設定(変更追跡)を使います。このビューの元の表は別のデータベースにあり、作業用の役ではその設定を変えられませんでした。

そこで、試験用の置き場に写しの表を作り、その上に作りました。

CREATE CORTEX SEARCH SERVICE ORDER_SYSTEM.BLOG_LAB.IG_CAPTION_SEARCH
  ON caption ATTRIBUTES post_kind, post_month
  WAREHOUSE = COMPUTE_WH TARGET_LAG = '1 day'
AS SELECT id, caption, post_kind, post_month, title, permalink, reach, saved
   FROM ORDER_SYSTEM.BLOG_LAB.IG_POSTS_COPY;

探した結果です。

探した言葉上位に出た投稿
辛い料理麻婆豆腐、玉子と豚肉の鬼唐辛子炒め
お酒に合う一品「迷った時のもう一品なら”コレ”」などのおつまみの投稿
休みのお知らせ冬休み・夏休みのお知らせ、営業日のお知らせ

「辛い」という言葉が本文に無くても、麻婆豆腐や唐辛子炒めが出てきました。意味で探せているのが分かります。

数字と文章を使い分ける:Cortex Agent

Cortex Agent は、質問に合わせて道具を選んで答える仕組みです。道具を2つ持たせました。

  • 数字の道具:セマンティックビュー(Cortex Analyst)。保存率・リーチ・本数・目標の判定
  • 文章の道具:上の Cortex Search。投稿の中身

作ったエージェントは、Snowsight の「AI と ML」→「Agent Studio」に並びます。

Agent Studio。作ったエージェントが一覧に出る
Agent Studio。作ったエージェントが一覧に出る

開くと、設定(Configuration)と、その場で質問できるプレビュー(Preview)があります。今回は作業用の役で作り、管理者の役で開いたので「表示のみ」と出ました。設定は変えられませんが、プレビューで質問はできます。

エージェントの設定画面。作った役と違う役で開くと「表示のみ」
エージェントの設定画面。作った役と違う役で開くと「表示のみ」

手元のプログラムから API で3つの質問をしました。

質問使った道具時間答え
2026年6月の保存率は?目標に届いた?数字約14秒0.20%。短期目標0.7%には届かず、判定は「改善中」
辛い料理の投稿にはどんなものがある?文章約12秒麻婆茄子麺・特製麻婆豆腐・麻婆茄子チーズ丼
6月にリーチが一番多かった投稿は何の料理?過去にもあった?数字と文章(SQL も自分で4回流した)約30秒天津丼。過去にも30本あった

1問目と2問目は、道具を1つだけ選び、正しく答えました。3問目は、数字の道具でリーチ最大の投稿を出し、文章の道具で中身を確かめ、さらに自分で SQL を書いて数えています。答えの最後に「どの道具で何を調べたか」を書くよう指示しておいたので、調べ方も分かりました。

同じ3問目を、画面のプレビューでも聞きました。

画面のプレビューで聞いたところ。思考ステップと、答え・表・調べ方が並ぶ
画面のプレビューで聞いたところ。思考ステップと、答え・表・調べ方が並ぶ

答えは API と同じで「天津丼。過去にタイトルに天津丼が入る投稿が30本」でした。画面では「思考ステップ」を開くと、途中で何を考えたかが見えます。そこには「検索の結果に日付が無いので、数字の道具でタイトルが天津丼に合うものを引く」と書かれていました。

答えの最後には、頼んでいない「毎月決まった日に自動でまとめる」話も付いていました。聞いたことに無い提案を足してくることがあります。

エージェントが黙って決めた数え方

3問目の「過去にも30本」を、自分で数え直しました。

  • 題名に「天津丼」が入っている投稿:30本(2018年6月〜2024年8月)
  • 題名には無いが、本文で天津丼に触れている投稿:ほかに9本(一番新しいのは2025年5月)

エージェントは、「題名に入っているもの」で数えていました。画面の思考ステップのとおり、文章の検索結果に日付が無かったため、数字の道具で題名を引いたのです。数え方としては間違いではありません。ただ、そう決めたことを答えの本文には書いていませんでした。そのため「直近は2024年8月の投稿」という答えも、本文まで見れば違います。

道具をいくつも組み合わせるほど、途中でどう決めたかが見えにくくなります。数え方が分かれそうな質問では、「題名と本文のどちらで数えたか」を答えに書くよう、エージェントへの指示に足しておくのがよさそうです。

まとめ

  • Dynamic Table で集計を自動で作り直せる。公開レポートと一致した。使わないときは止めておく
  • Cortex Search は意味で探せるが、元の表の変更追跡を使う。権限が無い表は、写しを作ってその上に作る
  • Cortex Agent は数字と文章を使い分けて答える。ただ、数え方を黙って決めることがある。決め方を答えに書かせる指示を足す
ABOUT ME
石井 亮介(りょうさん)
石井 亮介(りょうさん)
データパレード 代表取締役
㈱データパレードの代表取締役で、高田馬場の町中華「一番飯店」のChief Data Officerも務めています。BIツールのセールスエンジニア・システムエンジニア・カスタマーサクセス歴15年。大学のデータサイエンス教育で講師も担当してきました。現在は自社業務のほとんどをAIに移管し、AI10部署と50を超える自動処理が24時間動く「AI経営」を実践中。その実践知をこのブログで発信しています。
記事URLをコピーしました