本文へスキップ
AIラボ
エージェント稼働中

音声からSQLを生成するエージェント

話した質問をSQLへ変換し、データベースに対して実行し、結果を自然言語で説明する対話インターフェース。音声認識にWhisper、SQL生成にGPT-4oのfunction callingを使い、スキーマを踏まえたバリデーションを行う。

GPT-4oWhisper Large-v3
クエリ精度94%発話から結果まで1.2秒スキーマを踏まえたバリデーション

カテゴリ

エージェント

ステータス

稼働中

技術スタック

WhisperFastAPISQLiteReactLangChain

モデル

GPT-4oWhisper Large-v3
概要

データベースへの音声インターフェースが、技術者以外の人にもデータ探索を開くのかを検証した実験。「前四半期の売上上位5社は?」のように話しかけると、SQL、結果、そして自然言語での説明が、発話の終わりから2秒以内に返る。

検証方法

音声認識にWhisper Large-v3、SQL生成にfunction calling付きのGPT-4o、結果の可視化にReactを繋いだパイプラインを構築した。単一テーブルの参照、複数結合の集計、期間の絞り込み、曖昧な自然言語を含む150問のベンチマークで検証した。訛りや話し方への頑健性を見るため、各問題を3人の話者で試した。スキーマの理解は、CREATE TABLE文とサンプル行をシステムプロンプトへ注入する形で実装した。

技術スタック

Whisper Large-v3が単語単位のタイムスタンプ付きで音声を認識する。GPT-4oがPydanticで検証されたスキーマに沿ったfunction callingでSQLを生成する。FastAPIがバックエンドを担い、SQLite(Postgresへ拡張可能)へのコネクションプールを持つ。ReactのフロントエンドはWeb Audio APIで録音し、Rechartsで結果を可視化する。

主な発見

この実験から得られた、もっとも重要な知見です。

1

構造の明確な質問では94%の精度

スキーマを注入したGPT-4oは、ベンチマークの94%で正しいSQLを生成した。失敗は「最近」「少し前」といった曖昧な時間表現と、暗黙の結合に集中していた。

2

スキーマ注入はファインチューニングを上回る

CREATE TABLE文とテーブルごとに3行のサンプルを注入する方法は、500組のクエリで学習したファインチューニング済みモデルより高い精度を出した。しかも新しいスキーマへ即座に適応できる。

3

音声は300msの代償で敷居を下げる

Whisperの文字起こしで約300msのレイテンシが加わるが、ユーザーテストでは技術者以外の参加者が、テキストでSQLを書く画面に比べて3倍多くの探索的な問いを投げた。

4

function callingがインジェクションを防ぐ

生のSQL文字列を生成させるのではなく構造化されたfunction callingを使うことで、SQLインジェクションの経路を完全に排除できた。モデルは検証済みの引数で、あらかじめ定義された関数しか呼べない。

アーキテクチャ

音声はブラウザのWeb Audio APIで取得し、FastAPIのバックエンドへ送る。Whisperが文字起こしを行い、その文とデータベースのスキーマ情報をまとめて、SELECT用のツールを定義したGPT-4oへ渡す。生成されたSQLは読み取り専用の許可リストに照らして検証し、データベースに対して実行する。結果は、2回目のLLM呼び出しで生成した自然言語の要約とともに返す。

結果

150問のベンチマークでクエリ精度94%。発話から結果までの平均レイテンシは1.2秒(STT 300ms、LLM 600ms、実行200ms、描画100ms)。テスト参加者(n=8)は全員が、探索的な分析では生のSQLより音声を好んだ。敵対的なテストでインジェクションが成功した例はない。

直面した課題

検証を進めるうえで解決が必要だった技術的な課題です。

課題 1

曖昧な時間表現

「前四半期」は会計年度によって指す期間が変わる。設定可能な会計カレンダーを文脈へ加え、時間の曖昧さを検知した場合は確認を返すようにして解決した。

課題 2

複数ターンの会話状態

「それを地域別に分けて」のような追加の問いは、直前のクエリを参照する必要がある。直近3件のクエリ文脈を保持する会話メモリを実装し、指示語を解決できるようにした。

NEXT

LumoraTechと一緒に開発しませんか?

厳密なエンジニアリングを重視するチームのために、本番運用に耐えるAIシステムの構築と、こうした技術検証を行っています。