7月19日、MarkTechPostが「Feyn AI Releases SQRL, a Text-to-SQL Model Family That Inspects the Database Before Writing a Query」と題した記事を公開した。YCバックのスタートアップFeyn AIが、クエリを生成する前にデータベースを検査するText-to-SQLモデルファミリー「SQRL」をリリースしたことについて詳しく紹介されている。
「正しいSQL」でも間違った答えを返す問題
Text-to-SQLの難所は、構文エラーではない。完全に有効なSQLでも、テーブルの結合が間違っていたり、存在しない値でフィルタリングしていたりすれば、誤った結果を返す。しかもエラーは出ない。
スキーマ情報だけではこの問題を解決できない。スキーマはテーブル名・カラム名・型・リレーションシップを示すが、Alameda と Alameda County と ALAMEDA のどれで格納されているかはわからない。どのJOINが重複行を生むかも教えてくれない。
この問題を測定するベンチマークが BIRD(Big Bench for Large-scale Database Grounded Text-to-SQL Evaluation)だ。実ドメインのDBを使い、不完全な値・曖昧なカラム・複雑なリレーションを含む。採点は「生成したSQLを実行し、参照結果と一致するか」で行われる。構文の正しさは問わない。
Feynのアプローチは、「足りない情報はDB内にある。モデルに問い合わせる権限を与えればいい」という判断から出発している。
クエリを書く前にDBを調べる——SQRLの仕組み
SQRLは質問・スキーマ・オプションのエビデンスを受け取る。その情報だけで答えられるなら即座にクエリを返す。曖昧さが残る場合は、読み取り専用クエリを実行してDBを探索し、その結果を踏まえて最終クエリを生成する。
具体的には2種類のアクションを使う:
<sql>ブロック:DBへの問い合わせ(探索クエリ)を要求する<answer>ブロック:最終クエリを確定する
探索クエリは読み取り専用モードで実行され、結果が<observation>タグとしてモデルに返される。最大5回まで探索できるが、ほとんどの質問はそれより少ない回数で完了する。単純な集計(1テーブルの行数カウントなど)では探索を行わず直接回答する。
従来のText-to-SQLは主に2つの流れに分かれていた。シングルショット型はコストが安いがスキーマだけから推論するため精度が落ちやすい。マルチステップパイプライン型は精度が高いが、フロンティアモデルへの複数回呼び出しが必要でコストが大きい。SQRLは1つのモデルで両方を兼ねる——簡単な質問は短く済ませ、曖昧な質問だけ探索コストを払う。
精度70.6%、Claude Opus 4.6を上回る
BIRD Devでの実行精度の比較:
| モデル | BIRD Dev 実行精度 |
|---|---|
| SQRL-35B-A3B | 70.60% |
| SQRL-9B | 69.80% |
| SQRL-4B | 68.80% |
| Claude Opus 4.6 | 68.77% |
| Claude 4.5 Sonnet | 67.34% |
| Qwen3-Coder-480B-A35B | 66.17% |
| GLM-4.7 | 63.82% |
| DeepSeek-R1 | 61.67% |
| Kimi-K2-Thinking | 60.63% |
フラッグシップのSQRL-35B-A3Bはトークンあたり約3Bパラメータをアクティベートする混合エキスパート構成。SQRL-4BはClaude Opus 4.6とほぼ同等の精度を、セルフホスト可能なサイズで実現している点が実務上の強みだ——スキーマやクエリ、観測結果が外部に出ない。
なお、比較対象として登場する「Claude Opus 4.6」は元記事に記載されたモデル名をそのまま引用したものだ。執筆時点でAnthropicの公式ラインナップとしての一般的な知名度は高くないため、表記が気になる読者は元記事のベンチマーク詳細を確認されたい。
3つのチェックポイントはHugging Faceで公開されている:SQRL-4B、SQRL-9B、SQRL-35B-A3B。
「いつ探索するか」を訓練する——CISPOとデータ精製
DBへのアクセス権を与えるだけでは、モデルはいつ・どう使えばいいかを学ばない。Feynはまず訓練データを精製した。BIRDとSpiderを起点に、参照SQLが実行不可なサンプルを除去。さらに3つのモデルジャッジで「質問に正しく答えていない」クエリを排除した。
35B-A3Bの教師モデルにはCISPO(MiniMaxのM1研究由来の強化学習手法)を使用した。CISPOはポリシー比ではなく重要度サンプリングの重みをクリッピングするため、稀だが決定的なトークンからの勾配シグナルを保持できる。各質問に対して8つの完全な軌跡を生成し、最終クエリの実行結果が参照と一致するかで二値報酬を与えた。
訓練で重要だったのは「混合ゾーン」の活用だ。8回の試行が全部正解または全部失敗だと、どの判断が良かったかのシグナルが得られない。一部の試行だけ成功するサンプルに絞ることで、正しい軌跡と誤った軌跡の差分から学習できる。
4Bと9Bのスチューデントモデルは、正解した教師軌跡(約10,200例)でファインチューニングしたあと、同じCISPOで強化した。ベースモデルはQwenファミリーだ。元記事では具体的なバージョン表記として「Qwen3.5およびQwen3.6」と記載されているが、一般的なQwenシリーズの命名規則(Qwen2.5、Qwen3など)と異なるため、詳細は元記事のモデルカードを参照されたい。
デプロイ時の注意点
FeynはSQRL-9Bをデフォルト推奨としており、コスト優先なら4B、最高精度が必要なら35B-A3Bを選ぶよう案内している。vLLMでのサーブは以下のコマンドで行う:
vllm serve feyninc/sqrl-9b \
--served-model-name sqrl-9b \
--gpu-memory-utilization 0.90 \
--max-model-len 32768
1点、実装上の落とし穴がある。サービング層のreasoningパーサーを有効にしてはいけない。SQRLのアクションプロトコル(<sql>や<answer>)は</think>タグの後のコンテンツに含まれる。reasoningパーサーがそこをストリップすると、モデルのアクションが消える。生のメッセージコンテンツを直接パースし、最終thinkタグ以降をすべて保持する必要がある。完全なシステムプロンプトとリファレンスハーネスはモデルカードに掲載されている。
詳細はFeyn AI Releases SQRL, a Text-to-SQL Model Family That Inspects the Database Before Writing a Queryを参照していただきたい。