0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLに特化したRAGフレームワーク「Vanna」を動かしてみる

Last updated at Posted at 2025-04-28

Vanna

SQLの生成を行うRAGフレームワークです。
SQLの生成だけではなく、実行と簡単なグラフ化までやってくれます。

動作環境

  • OS : Windows11
  • 言語:Python3.13
  • DB:MySQL
  • LLM:GPT-4o

※pythonに含まれるsqliteのバージョンが低いと動作しないので、そのエラーが出る場合はpythonのバージョン上げれば動きます。

手順

事前準備

基本的には公式の手順書に従って進めればよいです。
一部ピックアップして説明します。

VannaにDBの権限を渡す。
試してないけどVannaに登録、更新、削除をさせたくない場合は参照権限のみのユーザを設定すれば大丈夫。

vn.connect_to_postgres(host='my-host', dbname='my-dbname', user='my-user', password='my-password', port='my-port')

データベースのスキーマをVannaに渡す。
公式の手順書だと「vn.train(plan=plan)」コメントアウトされてるけど、実行しないとダメ。

df_information_schema = vn.run_sql("SELECT * FROM INFORMATION_SCHEMA.COLUMNS")
plan = vn.get_training_plan_generic(df_information_schema)
vn.train(plan=plan)

以下を実行して、それっぽいデータが追加されてたらOK。

training_data = vn.get_training_data()
training_data

スキーマ以外にも、文章だったり、よく使うSQLをRAGに追加することができます。

vn.train(documentation="Our business defines OTIF score as the percentage of orders that are delivered on time and in full")
vn.train(sql="SELECT * FROM my-table WHERE name = 'John Doe'")

質問とSQLをセットで登録することも可能で、これによって質問と回答の傾向を覚えさせることができます。

vn.train(
    question="What is the average age of our customers?", 
    sql="SELECT AVG(age) FROM customers"
)

実行

実行は以下のようにして行います。

vn.ask("昨日申込されたordersを取得してください。")

askメソッドの引数は以下のようになっており、auto_trainがTrueだと質問によって生成されたSQLが実行できた場合、Vannaの学習データに自動で追加されます。
https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_267761_25b1cbd4-04f7-4090-9844-4d71dcbd4ab6.png

名前 タイプ 説明 初期値
question str 質問 None
print_results bool SQLの結果を表示するか True
auto_train bool 自動で学習させるか True
visualize bool グラフを描写するか True

まとめ

最初はDBをLLMで動かすためのMCPサーバ的なサービスなのかなと思いましたが、触った感じそういった側面もありつつ、メインはSQLを生成するためのRAGフレームワークだなと感じました。学習データが足りていない状態だと、事細かに命令しないと正しいSQLを出力できないのと、対話的にSQLを修正できないため、実用レベルに持っていくのは結構難しいかなというのが感想です。しかしDBのスキーマをLLMに渡して、SQLを作らせるという考えはいずれ実用化していくと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?