はじめに
Databricks の AI/BI Genie(旧 Genie Space)には、自然言語による質問の応答精度を定量的に測定する Benchmark 機能が組み込まれています。テスト質問セットを作成して一括実行し、Genie が生成した SQL の結果と正解 SQL の結果を比較することで、スペース全体の精度を評価できます。
本記事では、サンプルスペース「Bakehouse Sales Starter Space」を使って Benchmark 機能を実際に動かし、Agent モードと Chat モードで精度がどう変わるかを検証しました。
結論を先に書くと、同じ質問セットに対して Agent モードは 0%(0/4)、Chat モードは 100%(4/4)という結果になりました。しかし、Benchmark 機能に組み込まれた改善ワークフローを使うことで、Agent モードも 0% → 75% → 100% と段階的に改善できました。この差がなぜ生じるのか、そしてどう改善するのかを、機能の仕組みとあわせて解説します。
Benchmark 機能の概要
Genie の Benchmark 機能は、以下の流れで動作します。
- テスト質問と正解 SQL(Ground truth SQL)のペアを登録する(1スペースあたり最大500問)
- 「Run all benchmarks」で一括実行する
- 各質問について Genie が SQL を生成・実行し、正解 SQL の結果セットと比較する
- 正答率(Accuracy)がパーセンテージで表示される
各 Benchmark 質問は新規会話として実行されます。過去のスレッドのコンテキストは引き継がれず、Agent に設定された Instructions・Example SQL・SQL Functions のみを使って回答が生成されます。
Chat モードと Agent モードの評価方法の違い
Benchmark には2つの実行モードがあり、評価方法が根本的に異なります。
| 観点 | Chat モード | Agent モード |
|---|---|---|
| 回答生成 | SQL を1つ生成して実行(シングルターン) | マルチステップ推論で複数 SQL やテキストレポートを生成 |
| 正解基準 | Ground truth SQL の結果セットとの自動比較 | LLM ジャッジによるテキスト評価 |
| 向いている質問 | 数値・テーブル出力が明確な質問 | テキストレポートや複合分析 |
Chat モードでは結果セットの一致で機械的に判定されます。カラム・行の並び順の違いは許容され、数値は有効数字4桁に丸めて比較されます。
Agent モードでは LLM がテキスト応答の内容を評価するため、Ground truth SQL だけでなく Evaluation note(評価ガイダンス)の記述が精度に影響します。
検証環境
今回はDatabricks が用意しているサンプルスペース「Bakehouse Sales Starter Space」を使いました。架空のベーカリーの売上・在庫データに対して自然言語で質問できるスペースです。
ベンチマーク質問の設定
Benchmark タブを開くと、「Evaluations」と「Questions」の2つのサブタブがあります。Evaluations タブにはベンチマーク実行結果の一覧が、Questions タブには登録済みの質問と正解 SQL が表示されます。
Questions タブには、既に4つの質問が登録されていました。すべて「売上トップの商品は何か?」という同じ意図を、異なる言い回しで表現したものです。
| # | 質問文 | 正解 SQL の概要 |
|---|---|---|
| 1 | Which product generates the highest sales volume? | SUM(totalPrice) + ORDER BY DESC + LIMIT 1 |
| 2 | Which product ranks highest in sales? | CTE + RANK() OVER + LIMIT 1 |
| 3 | Which is our top performing product? | SUM(totalPrice) + ORDER BY DESC + LIMIT 1 |
| 4 | Which product generated the highest sales? | SUM(totalPrice) + ORDER BY DESC + LIMIT 1 |
同じ意図の質問を複数登録するのは、公式ドキュメントでも推奨されているプラクティスです。フレージングの違いに対する Genie の対応力を測定できます。
また、Questions タブの上部には「Suggested Benchmark Questions」として AI が自動生成した質問候補が表示されます。スペースのテーブル構造やこれまでの利用パターンに基づいて提案される機能で、質問セット構築の出発点として活用できます。
実行結果①: Agent モード(0%)
まず Agent モードで「Run all benchmarks」を実行しました。4問すべての処理が完了すると、結果は 0% accurate(0/4)でした。
失敗の詳細
4問とも失敗理由は共通で、Assessment: Bad、Score reason は「Extra Rows」「Incomplete Output」でした。Failure analysis の Reasoning には、次のような分析が自動生成されていました。
The Genie query is incorrect because it does not limit the output to the single product with the highest sales volume, as requested. Instead, it returns all products, which does not fully answer the user's question.
つまり、Agent モードの Genie は「売上トップ1つ」ではなく「全商品の売上一覧」を返してしまったということです。
Model output SQL と Ground truth SQL の比較
並べて見ると違いが明確です。
Model output(Genie が生成した SQL)は SUM(totalPrice) に加えて COUNT(*) や SUM(quantity) など余分なカラムを含み、LIMIT 1 がありません。Agent モードは「データの全体像を見せてから分析する」というマルチステップの推論を行うため、単一行を返す SQL ではなく、全体を俯瞰するクエリを生成しがちです。
実行結果②: Chat モード(100%)
次に、Chat モード(シングルターン SQL 生成)に切り替えて同じベンチマークを実行しました。
結果は 100% accurate(4/4)でした。
Evaluations タブでの比較
Evaluations タブに戻ると、2回の実行結果が一覧で表示されます。
| 実行日時 | モード | Accuracy |
|---|---|---|
| Jul 18, 2026, 21:24:49 | Chat | 100% (4/4) |
| Jul 18, 2026, 21:19:34 | Agent | 0% (0/4) |
なぜ Agent と Chat でこれほど差が出たのか
この差は「Genie のバグ」ではなく、2つのモードの設計思想の違いから来ています。
Chat モードが正解した理由
Chat モードは「1つの質問に対して1つの SQL を生成する」シングルターンの挙動です。「売上トップの商品は?」と聞かれたら、ORDER BY ... DESC LIMIT 1 を含む SQL を素直に生成します。結果セットは正解 SQL と一致し、Good と判定されます。
Agent モードが不正解になった理由
Agent モードはマルチステップ推論を行います。質問に対して、まず全体像を把握するための SQL を実行し、その結果をもとにテキストレポートを生成する、という複合的な回答を行います。
今回のケースでは、Agent は全商品の売上一覧を取得した上で「6商品すべてが $10,758 〜 $11,595 の範囲で近接している」というテキスト分析を返しました。ビジネスユーザーへの回答としては丁寧ですが、ベンチマークの正解 SQL(1商品だけ返す)とは結果セットが一致しないため Bad と判定されました。
ベンチマーク設計の示唆
この結果は以下の示唆を含んでいます。
- Chat モード向けの質問は、明確な正解(特定の値・行)がある質問に適しています
- Agent モード向けの質問は、Evaluation note(テキストベースの評価ガイダンス)を活用すべきです。Ground truth SQL だけでは Agent の推論スタイルを正しく評価できません
- 同じ質問セットを両モードで実行すると、モードごとの得意・不得意が見えてきます
改善ループの実践: Agent モード 0% → 100%
Agent モードが 0% になったまま終わるのではなく、Benchmark 機能に組み込まれた改善ワークフローを使って精度を上げてみます。
Step 1: Review proposed fixes で知識を補強
Agent モードの不正解画面には「Review proposed fixes」リンクが表示されています。クリックすると「Review knowledge snippets」ダイアログが開き、Genie がベンチマーク失敗の原因を分析して、SQL Expressions(MEASURE 定義)を自動提案してくれます。
今回は2つの MEASURE 定義が提案されました。
- 「total sales volume for each product」 means
SUM(samples.bakehouse.sales_transactions.totalPrice) - 「top-performing product sales」 means
SUM(samples.bakehouse.sales_transactions.totalPrice)
各提案には Instructions(いつこの定義を使うか、対象テーブル、誤用リスク)も自動生成されます。2つとも承認して「Accept 2 snippets」をクリックします。
Step 2: Agent モードで再実行
知識を補強した状態で、再度 Agent モードの「Run all benchmarks」を実行します。
Step 3: 結果 — 0% → 75%
再実行の結果は 75% accurate(3/4)でした。
4問中3問で Assessment: Good に改善されました。Agent が生成するテキストレポートも「Golden Gate Ginger generates the highest sales volume with $11,595」と、正解を端的に述べる形に変わっています。
残り1問(「Which is our top performing product?」)は依然として Bad でした。「top 10 products を返して追加カラムも含めている」という理由で、LIMIT 1 が適用されていません。
Step 4: General Instructions の追加 — 75% → 100%
残り1問の失敗原因は「top / best と聞かれたときに複数行を返してしまう」ことでした。これに対処するため、Configure > Instructions に以下のルールを追加しました。
When the user asks for the "top" or "best" product, return only the single #1 product, not a list of multiple products. Use LIMIT 1 or equivalent to restrict the result to one row.
この Instruction を保存した上で再度 Agent モードのベンチマークを実行した結果、100% accurate(4/4)を達成しました。
改善ループの全体像
Evaluations タブで全実行結果を比較すると、改善の経緯が一目でわかります。
| 実行日時 | モード | Accuracy | 備考 |
|---|---|---|---|
| Jul 19, 2026, 02:05:42 | Agent | 100% (4/4) | General Instructions 追加後 |
| Jul 19, 2026, 01:55:58 | Agent | 75% (3/4) | 再々実行(結果安定) |
| Jul 19, 2026, 01:47:47 | Agent | 75% (3/4) | SQL Expressions 追加後の再実行 |
| Jul 18, 2026, 21:24:49 | Chat | 100% (4/4) | シングルターン SQL 生成 |
| Jul 18, 2026, 21:19:34 | Agent | 0% (0/4) | 初回実行(改善前) |
改善の流れをまとめると以下の通りです。
- Review proposed fixes で SQL Expressions(MEASURE 定義)を追加 → 0% → 75%
- General Instructions に「top/best は LIMIT 1」のルールを追加 → 75% → 100%
公式ブログでも 0% → 54% → 77% → 100% と反復的に精度を上げた事例が紹介されており、ベンチマークは「一発で 100% を目指す」ものではなく、失敗原因を分析して段階的に改善していくツールです。
Benchmark 機能のその他の特徴
検証中に確認できたその他の機能も紹介します。
Review proposed fixes
不正解質問の「Review proposed fixes」から、SQL Expressions の追加提案を受け取れます。詳細と実際の改善結果は前述の「改善ループの実践」セクションを参照してください。
Update ground truth
各質問の詳細画面に「Update ground truth」ボタンがあります。Genie の回答のほうが適切だった場合に、正解 SQL を Genie の出力で上書きできます。
Suggested Benchmark Questions
スペースのテーブル構造や利用パターンに基づいて、AI が質問候補を自動提案します。「Reject」で却下、「Review」で正解 SQL を設定してから採用できます。質問セットの初期構築を効率化する補助ツールです。
ベンチマーク設計のベストプラクティス
公式ドキュメントとブログから、ベンチマーク設計のポイントをまとめます。
- 同じ意図の質問を2〜4通りの言い回しで作成し、フレージングへの頑健性を測定する
- Benchmark の正解 SQL は Agent の Example SQL とは分離する(純粋な評価のため)
- 構成変更のたびにベンチマークを再実行し、リグレッションを検知する
- Agent モードの質問には Evaluation note を必ず設定する
- 不正解になった質問は Failure analysis を確認し、Instructions やメタデータを改善する
- 公式ブログでは 0% → 54% → 77% → 100% と反復的に精度を上げた事例が紹介されており、初回のスコアが低くても改善余地は大きい
まとめ
Genie の Benchmark 機能は、NL2SQL の精度を定量的に測定し、改善サイクルを回すためのツールです。
今回の検証では、Agent モード 0% → Chat モード 100% という初期結果に対して、以下の2ステップで Agent モードも 100% まで改善できました。
- Review proposed fixes で SQL Expressions を追加(0% → 75%)
- General Instructions にルールを追加(75% → 100%)
初回スコアが低くても、Benchmark 機能が提供する改善ワークフロー(Failure analysis → Review proposed fixes → Instructions 調整)を回すことで、段階的に精度を上げていけます。ベンチマークの精度スコアは「Genie の賢さ」ではなく「スペース設定の適切さ」を反映しており、反復的に改善していくことが Genie スペースの品質向上への近道です。
用語解説
Evaluation note
Evaluation note は、Agent モードのベンチマーク質問に設定できる任意のテキストフィールドです。ベンチマーク実行時に LLM ジャッジへ渡され、「正しい回答とはどういう内容か」を指示するガイダンスとして機能します。
公式ドキュメントでは以下のように説明されています。
(Agent mode only, optional) In the Evaluation note field, enter guidance on the correct answer or expected content. Genie passes the evaluation note to the LLM judge.
Chat モードでは SQL 結果セットの機械的な比較で正誤を判定しますが、Agent モードはテキストレポート形式の回答を生成するため、SQL の一致だけでは評価できません。Evaluation note に「回答に含まれるべき内容」や「期待される分析の観点」を記述することで、LLM ジャッジが適切に採点できるようになります。
| 項目 | Chat モード | Agent モード |
|---|---|---|
| 正解の定義 | SQL Answer(正解 SQL クエリ) | Evaluation note(自然言語のガイダンス) |
| 評価方法 | 結果セットの自動比較 | LLM ジャッジによるテキスト評価 |
| Evaluation note | 不要(使用されない) | 任意だが設定を推奨 |
設定場所は、Benchmark の質問作成画面でモード「Agent」を選択した際に表示される「Evaluation note」フィールドです。
今回の検証で Agent モードが 0% になった一因は、Evaluation note を設定せずに Ground truth SQL の結果セット比較だけで評価したことにあります。Agent モードの質問には Evaluation note を設定し、テキストレポートの内容を評価基準に含めることが推奨されます。














