❄️

Cortex Agent / Analyst における LLM と人間が協調して間違いを検出し、修正する機構

に公開

背景

「AIが生成した回答・SQLが正しいかどうか、ビジネスユーザーには判断しにくい」という問題は、Cortex Analyst/Agentsに限らず、自然言語でAIに問い合わせるあらゆるシステムに共通して存在する構造的な課題である。

問題の本質:情報の非対称性と検証コスト

AIは質問をどう解釈し、なぜそのSQLを生成したかを「知っている」。しかしユーザーは結果の数値しか見えない。この情報の非対称性が、以下の連鎖的なリスクを生む。

リスク 具体例
意図のズレ(解釈ミス) 「売上」をユーザーは税抜で想定していたが、AIは税込で集計した
定義 of ズレ(前提ミス) 「アクティブユーザー」の定義がセマンティックビューと部門の認識で異なる
データの欠落(スコープミス) 特定期間のデータが欠損していても、AIは無言でゼロを返す
複合エラー(連鎖ミス) エージェントが複数ステップを踏む場合、初期の解釈ミスが後段で増幅する

同様の問題が存在するシステム

  • NL-to-SQLシステム全般(Databricks Genie、Amazon Q Business、OpenAI Code Interpreterなど)
  • AIコーディングアシスタント(GitHub Copilot、Claude Codeなど):コードの正しさをレビュアーが検証しなければならない
  • AIによる文書要約・翻訳:情報の取りこぼしや意味のズレをユーザーが気づけない
  • RAGベースのQ&Aシステム:検索結果が正しく引用されているかの確認が困難

共通する構造は「AIの生成物を信頼するしかない、あるいは検証コストが高すぎる」という点にある。NL-to-SQL領域では特に深刻で、SQLの正しさを検証するにはSQLの知識が必要であり、それがあればそもそもAIに頼る必要が薄い、という逆説も生じる。

信頼性問題を解決する3つのアプローチ

  1. 事前防止:AIが間違いを犯さないよう、セマンティックビューの定義・VQR(Verified Query Repository)・プロンプト設計を改善する
  2. リアルタイム検知:回答生成時にAI自身または別のチェック機構が誤りを検出・提示する
  3. 事後修正・学習:ユーザーが誤りを発見した後、フィードバックを次の精度向上に活かす

各機構の整理

優先度の考え方

優先度は「効果」「実装難易度」「自前推奨度」「コスト」の4軸を総合して判断する。

  • 自前推奨度:Snowflakeが実装すべき機能を先行して作ると、将来の置き換えコストが発生する
  • コスト:インフラコスト(APIコール・ウェアハウス費用)とオペレーションコスト(保守・運用の人件費)の両面で評価する。コストが高すぎる機構は効果が高くても優先度を下げる
優先度 意味
★★★ 効果が高く、自前実装が推奨または必須、かつコストが低い。今すぐ着手すべき
★★ 効果は高いが、条件付きで検討。用途・コスト・体制を見て判断する
待機 効果は高いが、Snowflakeが実装すべき機能。先行実装は技術的負債になりうる
省略 効果が他の機構で代替できる、またはコスト対効果が悪い

優先度マトリクス

優先度 機構 効果 難易度 自前推奨度 インフラコスト 運用コスト 主導チーム 判断の根拠
★★★ セマンティックビューの整備 低〜中 推奨・必須 データ基盤+BU協働 何を定義すべきかはBUにしか判断できない。実装はデータ基盤
★★★ VQR正解ペアの蓄積 推奨 低〜中 データ基盤+BU協働 バックエンドはSnowflake済み。BUがフィードバック、データ基盤が登録・管理
★★★ 結果の異常値検知 低〜中 推奨・必須 低〜中 データ基盤(BUが閾値定義) Snowflakeは提供不可。一度設定すれば自動動作
★★ クロスバリデーション 中〜高 条件付き 高(全体適用時) データ基盤 高リスク用途限定。BUが対象クエリを特定し、データ基盤が実装
★★ チップベース修正UI 条件付き エンジニアリング カスタムUIの場合のみ。マルチターン会話で代替できるか先に検証
待機 SQLの自然言語要約 非推奨 Snowflake Snowflakeが対応する蓋然性が高く、自前実装はコストと将来の置き換えの二重負担
待機 ステップ別信頼度スコア 非推奨 Snowflake 擬似スコアリングは精度・コスト・保守のすべてで割に合わない
省略 定義ホバーポップアップ 低〜中 セマンティックビュー整備とVQRで代替できる
省略 Chain-of-Thoughtツリー ビジネスユーザーには難解すぎる。ステップ別信頼度スコアの前提機能として依存

組織的役割分担の考え方

各機構を「データ基盤チームが主導すべきか」「ビジネスユーザーが自律的にできるか」で整理すると、以下のモデルになる。

結論:データ基盤チーム主導で仕組みを構築し、ビジネスユーザーが運用に参加する分業が必要。

ビジネスユーザーだけで完結できる施策はほぼない。セマンティックビューの定義、VQRの登録・管理、異常値検知の実装はいずれもデータ基盤チームのエンジニアリング作業を必要とする。一方で、データ基盤チームだけでは業務ドメイン知識が不足するため、ビジネスユーザーの参加なしには定義の正確さが保証できない。

役割 データ基盤チーム ビジネスユーザー(BU)
セマンティックビュー DDL設計・実装・バージョン管理 定義すべき指標・定義内容の提供・レビュー・承認(何を入れるかはBUにしか判断できない)
VQR リポジトリ管理・登録・品質レビュー 回答の正誤フィードバック・修正依頼
異常値検知 検知ロジックの実装・保守 ドメイン閾値の定義(「ゼロは異常」等)
クロスバリデーション 検証クエリの実装・管理 高リスク用途の特定・検証クエリの要件定義
Snowflakeへの機能要望 技術的な要件の言語化・提出 「こういう機能がほしい」というユースケースの提供

BUが自律的に動ける範囲は、フィードバックの提出(「この回答は間違っている」)と閾値の提供(「この指標が前月比50%以上下がったら異常」)に限られる。仕組みの整備はデータ基盤チームが担わなければ機能しない。


優先度★★★:今すぐ着手

セマンティックビューの整備

概要

Cortex Analystが生成するSQLの土台となるセマンティックビューに、指標・ディメンションの定義・説明・シノニム・サンプル値を正確かつ網羅的に記述する。Cortex AnalystはSQLを生成する際にセマンティックビューを参照するため、ここの定義の精度が回答の正確さを直接規定する。

なぜここが抜けがちか

VQRはSQLの正解ペアを事後的に蓄積する仕組みだが、セマンティックビューはそもそも「どの指標を・どう定義するか」を事前に決める仕組みである。セマンティックビューが不正確・不完全なままVQRだけを積んでも、前提の定義ズレは解消されない。VQR의 土台として先に整備すべきものである。

効果(高)

  • 「売上」「アクティブユーザー」などの業務用語の定義をSnowflakeのカタログとして一元管理でき、部門間の解釈ズレを防止できる
  • シノニムを充実させることで、ユーザーが異なる表現を使っても同じ指標を参照できる
  • サンプル値や説明文を記述することで、Cortex AnalystのSQL生成精度が直接向上する
  • セマンティックビューの内容はSnowsightのUIで確認可能なため、アナリストが定義を検証しやすい

主導チーム:データ基盤チーム+ビジネスユーザー協働

セマンティックビューに何を定義すべきか(どの指標・ディメンション・定義が必要か)はビジネスユーザーにしか判断できない。データ基盤チームはそれをSnowflakeのオブジェクトとして実装する技術的役割を担う。協働なしには成り立たない施策である。

役割 担当 具体的な作業
指標・定義の要件提供 ビジネスユーザー 「売上の定義はこれ」「この指標は税抜」「よく使う質問パターン」などドメイン知識の文書化
DDL設計・実装 データ基盤チーム CREATE SEMANTIC VIEWの記述、指標・ディメンションの構造設計
定義レビュー・承認 ビジネスユーザー(部門代表) 実装された定義が業務実態と一致しているかの確認・サインオフ
継続メンテナンス 両者 BUが定義変更を依頼し、データ基盤チームが更新・バージョン管理

自前推奨度:推奨・必須 / コスト:低

Snowflakeはセマンティックビューの枠組み(CREATE SEMANTIC VIEW)を提供するが、定義内容はユーザーの業務ドメイン知識に依存するため、Snowflakeには代替できない。また将来Snowflakeがセマンティックビューの機能を拡張しても、定義内容の移行コストは軽微である(DDLで管理できる)。

  • インフラコスト:低 — セマンティックビューの作成・更新は通常のDDL操作であり、追加のウェアハウスコストはほぼ発生しない。
  • 運用コスト:中 — データモデルや業務ロジックの変更に追随して定義を更新する必要がある。ただしこれはデータ基盤担当の通常業務の範囲内である。

すべての施策の土台。最初に整備する。VQRを積み始める前にセマンティックビューの定義品質を確認する。

Snowflake対応状況

機能 状況
CREATE SEMANTIC VIEW(指標・ディメンション定義) ✅ 実装済み
シノニム・説明文・サンプル値の記述 ✅ 実装済み
セマンティックビューのSnowsight UI確認 ✅ 実装済み
Cortex AnalystによるセマンティックビューのSQL生成への参照 ✅ 実装済み
定義内容の自動生成・提案 ❌ 未実装(ユーザーが記述する必要がある)

VQR(正解ペア)の継続的蓄積

概要

Cortex Analystの「Verified Query Repository(VQR)」に、正しい「質問→SQL」ペアを継続的に登録し、精度を向上させる。利用するほど精度が上がるエコシステムを構築する。

効果(高)

  • 類似質問に対してVQRのSQLを優先利用するため、同じ誤りが繰り返されない
  • 部門固有のエッジケース(「売上」でも特定部門だけ異なる集計方法が必要な場合等)をVQRで個別に対応できる
  • 積み上げた正解ペアはセマンティックビューの汎化にも活用できる

主導チーム:データ基盤チーム+ビジネスユーザー協働

役割 担当 具体的な作業
VQRの登録・管理 データ基盤チーム Verified Query Suggestionのレビュー・承認・品質管理
回答フィードバック ビジネスユーザー 「この回答は正しい/間違っている」をUIから送信
定期レビュー データ基盤チーム 月次でリクエスト履歴を分析し、頻出パターンをVQRに追加

ビジネスユーザーは回答の正誤を判断できるが、VQRへの直接登録はできない(Snowflakeの制約)。データ基盤チームがゲートキーパーとして品質を担保する必要がある。

自前推奨度:推奨 / コスト:低

VQRのバックエンド(登録・検索・優先利用)はSnowflakeが実装済みであり、「Verified Query Suggestion」により利用履歴から候補も自動提案される。ユーザーが担うのは、エンドユーザーが正しい回答に「保存」できるUIと管理者の承認ワークフローのみ。この部分はSnowflakeが提供する機能範囲外であり、かつ将来Snowflakeが代替するものでもないため、自前実装に技術的負債リスクがない。

  • インフラコスト:低 — VQRはSnowflake標準機能で追加料金なし。CORTEX_ANALYST_REQUESTS_Vの参照クエリも軽微。
  • 運用コスト:低〜中 — 管理者がVerified Query Suggestionを定期確認して承認する作業が必要。月数時間程度。VQRが蓄積されるほど承認頻度は下がる。

セマンティックビューの整備と並行して着手する。バックエンドは整っており、ユーザー側の実装量も少ない。

Snowflake対応状況

機能 状況
Verified Query Repository ✅ 実装済み
Verified Query Suggestion(自動候補提示) ✅ 実装済み(管理者承認が必要)
セマンティックモデルの自動最適化 ✅ 実装済み
CORTEX_ANALYST_REQUESTS_Vビュー ✅ 実装済み
エンドユーザーによる直接フィードバック送信 ❌ 未実装(管理者経由が必要)

結果の異常値自動検知

概要

AIが返した数値が「明らかにおかしい」場合、自動的にアラートを表示する。例:ゼロ件返答、前期比で90%以上の急落、過去の同期間と桁が一致しない、など。

効果(高)

  • データの欠損・フィルタのかけ過ぎ・集計スコープの誤りを自動検出できる
  • ビジネスユーザーがSQLを確認しない場合の最後のセーフティネットになる

主導チーム:データ基盤チーム(BUが閾値を定義)

役割 担当 具体的な作業
検知ロジックの実装 データ基盤チーム アプリ層へのゼロ件チェック実装、ANOMALY_DETECTIONの設定
閾値の定義 ビジネスユーザー 「前月比50%以上の変化は異常」「この指標はゼロになりえない」などの業務ルール提供
アラートの受け取り ビジネスユーザー アラートを確認し、異常か正常かを判断してフィードバック

閾値定義はビジネスユーザーにしか知り得ないドメイン知識であり、データ基盤チームだけでは設定できない。最初のルールセットを決めるためのワークショップや要件ヒアリングが必要になる。

自前推奨度:推奨・必須 / コスト:低〜中

「何がおかしいか」の基準は業務ドメインに依存する。当該データの正常値・欠損パターン・季節変動を知っているのはユーザー側であり、Snowflakeがドメイン固有の閾値を標準機能として提供することは構造的に不可能である。

ルールベース(ゼロ件チェック・前期比±N%超)から始め、必要に応じてSNOWFLAKE.ML.ANOMALY_DETECTION関数に発展させる段階的なアプローチが現実的である。

  • インフラコスト:低(ルールベース)〜中(ML) — ゼロ件チェック・比率チェックはアプリ層で完結しコストほぼゼロ。ANOMALY_DETECTIONはウェアハウスでの学習・推論コストが発生するが、クエリ単価は低い。
  • 運用コスト:低 — 一度設定すれば自動動作。季節変動への対応など閾値の年次見直しは必要だが、工数は軽微。

今すぐ着手する。Snowflakeに期待できない機能であり、かつ実装コストも低い。

Snowflake対応状況

機能 状況
warningsフィールド(空集合等の警告) ✅ 実装済み(限定的)
ML異常検知関数(ANOMALY_DETECTION ✅ 実装済み(別途学習データが必要)
業務コンテキストを踏まえた異常値判定 ❌ 提供不可(ドメイン依存)

優先度★★:条件付きで検討

クロスバリデーション(自己整合性チェック)

概要

同じ質問を「別の切り口」でも問い合わせ、結果が一致するかを自動確認する。例:「2024年の月次合計の合算」と「2024年通年の合計」が一致しているかを裏側でチェックする。

効果(高)

  • 一方向の回答だけでは見えないSQL生成のバイアスや集計ロジックのずれを検出できる

自前推奨度:条件付き / コスト:高(全体)〜中(限定)

ドメイン知識に依存するためSnowflakeは提供できない。ただし、全クエリへの適用はAPI呼び出しコストが2倍になるため現実的でない。財務レポートなど誤りが許容されない高リスク用途に絞り、VQRに登録済みの重要クエリにのみ対応する検証クエリを紐付ける形で実装するのが妥当である。

  • インフラコスト:高(全体適用)〜中(限定適用) — 全クエリにクロスバリデーションを適用するとCortex Analyst APIのコストが実質2倍になる。重要クエリ限定なら許容範囲内。
  • 運用コスト:中 — 検証クエリの設計・登録・維持が必要。ビジネスロジックの変更に追随して検証クエリも更新しなければならない。

高リスク用途(財務報告など)に限定して検討する。全体適用はコストに見合わない。


チップベース修正UI

概要

回答に含まれる「2023年」「合計金額」などのキーワードをクリック可能なチップとして表示し、ユーザーがクリックしてパラメータを直接修正できるUI。

効果(高)

  • プロンプトエンジニアリングの知識がなくてもパラメータを修正できる
  • 修正操作のログがVQRのフィードバックとして蓄積できる

自前推奨度:条件付き / コスト:低(インフラ)・高(運用)

UIの責任者は利用形態によって異なる。

  • Snowflake Intelligence(標準UI)を使う場合:Snowflakeが担うべき機能。Snowflake Intelligenceはビジネスユーザー向けのチャットUIとして積極開発されており、UXの改善が期待できる。自前実装は不要。
  • カスタムチャットアプリを構築している場合:ユーザーの責任となる。ただしマルチターン会話で「〇〇の条件を変えて」と追加指示することで機能的にはほぼ代替できるため、チップUIの実装コストに見合うかを先に検証する。

コストの観点では、インフラコスト(APIコール)は軽微だが、運用コストが高い。チップのパラメータ抽出ロジック、対応するクエリとの紐付け、UI保守の継続的なエンジニアリング工数が必要になる。

  • インフラコスト:低 — UIレイヤーのみ。追加APIコールはほぼなし。
  • 運用コスト:高 — パラメータ抽出ロジックの維持・UIコンポーネントの保守・セマンティックビュー変更時の追随が継続的に必要。

Snowflake Intelligenceを使うなら待機。カスタムUIでも、まずマルチターン会話で代替できるかを検証し、それでも不十分な場合にのみ実装を判断する。運用コストを過小評価しないこと。


待機:Snowflakeが実装すべき機能

SQLの自然言語要約

概要

生成されたSQLを「このクエリは2024年のデータのみを対象に、キャンセルを除く売上を税込で合計しています」という形で自然言語に要約して表示する。

効果(高)

  • SQLを読めないビジネスユーザーでも、AIがどのようにデータを絞り込んだかを確認できる
  • 意図とのズレを早い段階で発見できる

自前推奨度:非推奨 / コスト:中

Cortex Analystはすでに「We interpreted your question as ...」という解釈文をAPIレスポンスで返しており、SQLロジックの詳細要約はその自然な拡張にあたる。Snowflakeがこの方向に進む蓋然性は高い。COMPLETE関数で自前実装すること自体は技術的に容易だが、Snowflakeが標準機能として提供した時点で置き換えが必要になる。

  • インフラコスト:中 — 全クエリに対してCOMPLETE関数を追加呼び出しするため、クエリ数に比例してコストが積み上がる。
  • 運用コスト:低 — 実装後の保守は軽微。ただしSnowflakeが改善した際の移行作業が別途発生する。

コストは許容範囲だが、Snowflakeが実装した場合の置き換えコスト(移行工数)とインフラコストの二重負担が問題。効果が高い機能だからこそ、Snowflakeに任せるべきである。

Snowflakeに機能要望を出しつつ待機する。急ぎでなければ先行実装は避ける。


ステップ別信頼度スコア

概要

「テーブルの選択」「フィルタ条件の解釈」「集計方法の選択」といった推論ステップごとに信頼度(0.0〜1.0)を付与し、スコアが低い箇所を強調表示する。

効果(高)

  • チェックすべきポイントが明示されるため、ユーザーの認知コストが大幅に下がる
  • エージェントが複数ステップを踏む場合に特に有効

自前推奨度:非推奨 / コスト:高

Cortex Analystは内部で複数のLLMエージェントがSQLを生成しており、その推論過程にアクセスできるのはSnowflakeだけである。外付けのLLMでSQLを後から評価する「擬似スコアリング」は技術的には可能だが、本物の信頼度スコアとは本質的に異なり、精度も低い。業界トレンドとして推論の透明化は進んでいるため(OpenAI o-seriesの思考プロセス開示、Anthropicの拡張思考など)、Snowflakeもいずれ対応する可能性がある。

  • インフラコスト:高 — SQLの各節(WHERE / GROUP BY / JOIN等)を個別にLLMで評価するため、1クエリあたり複数回のCOMPLETE呼び出しが発生する。クエリ数が増えるとコストが急増する。
  • 運用コスト:高 — スコアリングプロンプトの精度検証・チューニング・セマンティックビュー変更への追随が継続的に必要。かつ得られるスコアの信頼性を定期的に監査しなければならない。

コストと精度の両面で割に合わない。自前実装のコストをかけて得られるスコアが「本物」でないため、誤った安心感を生む逆効果のリスクもある。

Snowflakeに機能要望する。擬似スコアリングの自前実装は精度・コスト・将来の置き換えの三点で非推奨。


省略する機構

定義ホバーポップアップ

「ホバーして確認する」というアクションをとるユーザーは限られる。セマンティックビューを整備することで定義情報はSnowflakeのカタログとして管理され、異常値検知でスコープミスが検出できれば、定義の可視化の多くのユースケースは代替できる。

Chain-of-Thoughtツリー

Snowflakeの内部実装に完全依存しており自前実装の現実性が低い。またビジネスユーザーが推論ツリーを読み解いて誤りを発見できるかも疑問が残る。ステップ別信頼度スコアが実現した後に再評価する。


継続的モニタリング:精度劣化の検知と人間への通知

個別の回答誤りを検知する仕組みとは別に、システム全体の精度が時間とともに劣化していないかを継続的に監視する仕組みが必要である。精度劣化の主な原因は、データスキーマの変更・セマンティックビューの定義陳腐化・新しい質問パターンへの未対応・VQRのカバレッジ低下などであり、いずれも気づかずに放置されるリスクがある。

収集すべきメトリクス

CORTEX_ANALYST_REQUESTS_VビューをSnowflake Tasksで定期集計することで、以下のメトリクスを自動収集できる。

メトリクス 計算方法 劣化のサイン
VQRヒット率 VQRが使われたリクエスト数 / 全リクエスト数 週次で低下傾向 → VQRカバレッジ不足
not_answerable率 question_category = 'not_answerable'の割合 急増 → セマンティックビューが追いついていない
SQLエラー率 生成SQLが実行失敗したリクエストの割合 上昇 → スキーマ変更への未追随
ゼロ件返答率 結果が空集合だったリクエストの割合 急増 → フィルタ条件の誤生成
新規質問パターン率 VQRに類似クエリがない質問の割合 高止まり → 新しいユースケースに未対応

Golden Set による定期評価(最も確実な方法)

VQRに登録済みの質問(正解SQLが既知)を週次でバッチ再実行し、生成されたSQLが期待値と一致するかを確認する。これがドリフト検知の基準線になる。一致率の推移をトレンドとして記録することで、特定の変更(スキーマ更新・LLMモデル変更など)を境に精度が落ちたことを特定できる。

Snowflake AI Observability(TruLens)を使えば、Golden Setに対してLLM-as-a-Judgeによるバッチ評価(Groundedness・Answer Relevance等)をスケジュール実行し、スコアの推移をSnowsightで可視化できる。

人間への通知基準

Snowflake Alertsを使って、以下の条件でデータ基盤チームへ自動通知する。

アラート条件 意味 対応チーム 想定アクション
VQRヒット率が前週比20%以上低下 新しい質問パターンが増えてVQRがカバーできていない データ基盤 VQRへの追加登録・BUへのヒアリング
not_answerable率が閾値(例:10%)超過 セマンティックビューの定義不足 データ基盤+BU セマンティックビューの拡充
Golden Set一致率が閾値(例:80%)以下 全体的な精度劣化 データ基盤 セマンティックビュー・VQRの総点検
SQLエラー率が急増 スキーマ変更・カラム名変更への未追随 データ基盤 セマンティックビューの定義更新
ゼロ件返答率が前週比2倍以上 データ欠損またはフィルタ誤生成の増加 データ基盤 VQRへのケース追加・異常値検知の閾値見直し

実装構成

Snowflake Task(日次 or 週次)
  └── CORTEX_ANALYST_REQUESTS_V を集計 → メトリクステーブルに書き込み

Snowflake Task(週次)
  └── VQRのGolden Setを再実行 → 一致率を記録
      └── AI Observability(TruLens)でLLMジャッジ評価も併用

Snowflake Alert
  └── メトリクステーブルを監視 → 閾値超過でデータ基盤チームに通知
      (Teams通知 / メール / Slackなど)

主導チーム:データ基盤チーム(閾値定義にBUが関与)

モニタリング基盤の構築・運用はデータ基盤チーム의 責任。ただしアラート閾値(「何%以下になったら問題か」)はビジネスの許容品質水準に依存するため、BUと合意して設定する。


まとめ:実装ロードマップ案

今すぐ着手(★★★)
  ├── セマンティックビューの定義・説明・シノニムの整備(すべての土台)
  ├── VQRへの正解ペア登録・承認ワークフローの整備
  └── 結果のゼロ件・前期比チェックをアプリ層に追加

並行して構築(モニタリング)
  ├── CORTEX_ANALYST_REQUESTS_V の定期集計タスク設定
  ├── Golden Set(VQR登録済み質問)による週次一致率チェック
  └── Snowflake Alertsで閾値超過時にデータ基盤チームへ通知

条件が揃ったら検討(★★)
  ├── クロスバリデーション(財務レポート等、高リスク用途に限定)
  └── チップ修正UI(カスタムUIを構築する場合のみ・マルチターン代替を先に検証)

Snowflakeの動向を見ながら機能要望(待機)
  ├── SQLの自然言語要約 → 「We interpreted your question as ...」の拡充を要望
  └── ステップ別信頼度スコア → 推論過程のAPI公開を要望

参考:Snowflake公式ドキュメントとの照合

Snowflake Data Heroes

Discussion