PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

Gemma 4とCrewAIで「データに話しかける」AIチャットを作った話

この記事のキーポイント

「データに質問する」って、地味だけどかなり強い

元記事は、ポートフォリオアプリの中にAIデータチャットを組み込んだという話です。
やっていることはシンプルで、ユーザーがCSVやXLSXなどのファイルをアップロードして、たとえば

image_0001.png

みたいに日本語や英語の自然な質問を投げると、AIが中身を読んで答えてくれる、というもの。

これ、ぱっと見は「またAIで何でもやる系かな?」と思うかもしれません。
でも実際はかなり実用的です。というのも、データを扱う現場では、​SQLを書ける人に毎回頼るほどでもない小さな確認作業が山ほどあるからです。
「ちょっとこの列の欠損率見たい」「カテゴリごとの売上をざっくり見たい」みたいなやつですね。こういう場面で、自然文で聞けるのはかなり便利だと思います。

image_0003.svg

仕組みはかなり筋がいい

元記事の構成をざっくり言うと、こんな流れです。

  1. Next.js のフロントエンドでファイルをアップロード
  2. Supabase Edge Functions がリクエストを受けて中継
  3. Google Cloud Run 上の FastAPI がファイルを受け取る
  4. DuckDB でファイルを読み込み、スキーマを確認
  5. CrewAI が役割分担して、SQLを生成
  6. Gemma 4 が自然文→SQLの頭脳として動く
  7. 実行結果をチャットUIに返す

image_0004.svg

ここで重要なのは、AIにいきなり「答えを考えさせる」のではなく、​先にファイルの構造をちゃんと見せていることです。
これがかなり大事で、AIが列名を勝手に想像してしまう事故を減らせます。
個人的には、この「まず観察、次に推論」という流れがとても良いと思いました。AIっぽい派手さはないけれど、実運用ではこういう地味な設計のほうが強いんですよね。

使われている技術をかんたんに整理

元記事では、フルスタック構成が表でまとめられています。要点だけ抜き出すとこうです。

image_0005.svg

ここで初心者向けに補足すると、

image_0006.svg

Gemma 4をなぜ使ったのか

元記事では、Gemma 4 の複数モデルについても紹介されています。
特にこのプロジェクトでは、​google/gemma-4-31B-itgoogle/gemma-4-26B-A4B-it を Hugging Face のエンドポイント経由で使っているとのことです。

大きな特徴は、​長いコンテキストを扱えること。
コンテキストというのは、AIが一度に覚えていられる文脈の長さのことです。ファイルのスキーマ情報やユーザーの意図をまとめて渡すには、ここがけっこう重要です。

元記事では、Gemma 4 が

image_0007.svg

を扱えるモデルとして紹介されていますが、このデータチャットでは主にSQL生成のためのテキスト推論に使っています。
派手なマルチモーダル機能そのものよりも、​複雑な指示をちゃんとSQLに落とし込めるかが勝負、というわけです。

CrewAIの役割分担がわかりやすい

image_0008.svg

CrewAIの説明も、元記事の見どころです。
AIを1体の万能ロボットとして扱うのではなく、役割を分けます。

たとえば、

image_0009.png

みたいな感じです。

こういう設計の良さは、​何をしているのか追いやすいことだと思います。
AIアプリって、裏側がブラックボックスだと怖いんですよね。
でも役割が分かれていれば、「今どこで間違ったのか」を見つけやすい。これは開発者にとってかなりありがたいです。

実際の処理フローがちゃんと現実的

image_0012.png

バックエンド側の流れも、かなり実用寄りです。

1. ファイルを受け取る

ユーザーがアップロードしたファイルを一時ディレクトリに保存します。

2. ファイル形式を判定する

CSV、Parquet、Arrow、JSON、XLSX などを見分けます。

image_0013.png

3. DuckDBに読み込む

読み込んだデータをDuckDBのテーブルとして扱えるようにします。

4. スキーマを取得する

DESCRIBE data のような形で、列名や型を確認します。
同時に総行数も数えます。

5. AIに渡す

スキーマ情報、行数、ユーザーの質問をまとめて CrewAI + Gemma 4 に渡します。

6. SQLを実行する

生成されたSQLをDuckDBで実行し、結果を返します。

image_0014.png

この順番がとてもまともです。
「AIに全部おまかせ」ではなく、​まずデータを観察してからSQLを書く
当たり前に聞こえるかもしれませんが、こういう基本を守るアーキテクチャは強いです。

デモで何ができたのか

元記事では、49行・18列のe-commerce売上CSVを使って6つの質問を試しています。
ここがかなり楽しいところです。

image_0015.png

1. 「上位10行を見せて」

生成されたSQLはシンプルに

SELECT * FROM data LIMIT 10

です。
これは当然といえば当然ですが、まず最初の確認としては理にかなっています。
「中身をざっと見る」という行為は、データ分析の入口としてすごく大事です。

image_0016.png

2. 「主要列とnull率を教えて」

ここがちょっと面白いです。
Gemma 4 は各列について、欠損がどれくらいあるかを全部計算するSQLを作っています。

つまり、ただのSELECTではなく、​データ品質チェックまで自動化しているわけです。
結果としては、49行・18列すべてで null率0% だったとのこと。

これは地味にすごいです。
普通は、こういう確認のために列ごとにSQLを書くのが面倒で、つい後回しになりがちです。
でも自然文で聞いて一発で出るなら、かなり使い勝手がいいと思います。

image_0017.png

3. 「売上と利益率で上位カテゴリを出して」

記事では途中までしか見えませんが、カテゴリごとの集計SQLを生成していることがわかります。
SUM(sales)SUM(profit) を使って、​売上合計利益率を出す流れです。

このへんになると、もはや単なる検索ではなく、​分析の入口をAIが肩代わりしている感じがあります。
個人的には、このレベルまで自然文でこなせるのはかなり実用的だと思いました。

この仕組みの一番の価値は「AIっぽさ」ではない

image_0018.png

この記事で本当に面白いのは、AIの派手さよりも、​データ分析の面倒を削る設計にあります。

たとえば現場では、

という手順が必要です。
これを毎回やるのは、正直かなりだるい。
元記事のツールは、その最初の数段をかなり短縮してくれます。

image_0019.png

もちろん、AIが作ったSQLは常に正しいとは限りません。
そこは過信しないほうがいいです。
でも、​​「たたき台を高速で出す」​という役割なら、かなり有望だと思います。

率直に言うと、かなり好きな構成

個人的には、このプロジェクトはかなり好印象です。
理由は3つあります。

image_0020.png

  1. 実データで動く
  2. 裏側が説明可能
  3. SQLが見える

特に3つ目が大事で、結果だけ返すAIは便利な反面、どうやってその答えに至ったのかが見えにくいです。
でもこのツールは、​実際にどのSQLが走ったかをUIに表示するので、納得感があります。
これはデータ系のアプリとしてかなり誠実だと思います。

こういう人に刺さりそう

image_0022.png

この手の仕組みは、次のような人に向いていそうです。

逆に、厳密な分析や本番の意思決定では、まだ人間のチェックは必要です。
でも、​探索の初速を上げるツールとしてはかなり魅力的だと思います。

image_0023.png

まとめ

元記事は、Gemma 4、CrewAI、DuckDB、Supabase Edge Functions、Google Cloud Run を組み合わせて、​​「データに自然文で質問できるチャット」​を実装した話でした。

このプロジェクトの良さは、AIをただ飾りとして使っているのではなく、
スキーマ確認 → SQL生成 → 実行 → 結果表示 という流れをきれいに分業しているところです。

image_0024.png

つまりこれは、「AIがなんとなく答えるデモ」ではなく、
実際のデータ分析をちょっと楽にするための、かなり筋のいい設計なんですよね。
こういう実装は、見た目以上に価値があると思います。


参考: I Built an AI Data Chat Tool in My Portfolio App Using Gemma 4, CrewAI, DuckDB, Supabase Edge Functions & Google Cloud Run 🚀

同じ著者の記事