DUICUO

Text2SQLツール:Vannaの紹介とインストール

I. ヴァンナとは何ですか?

Vanna は、自然言語の質問を正確な SQL クエリに変換し、データベース上でこれらのクエリを実行して結果と視覚化を返すオープンソースの Python RAG (Retrieval-Augmented Generation) フレームワークです。

たとえば、「25 歳以上の人のリストを検索してください」と尋ねることができます。

その後、Vanna はそれを SQL ステートメントに変換できます。

II. ヴァンナの仕組み

1. RAGモデルのトレーニング

  • データ準備: データベース メタデータ (テーブル構造の DDL ステートメントなど)、ドキュメント (ビジネス用語の説明など)、サンプル SQL クエリをインポートします。
  • ベクトル化されたストレージ: 上記のデータをベクトルに変換し、ローカル ベクトル データベース (ChromaDB など) に保存します。

2. SQLを生成する

  • ユーザーが自然言語の質問を入力すると、Vanna はベクトル ライブラリから関連するコンテキストを取得し、それを LLM (GPT-4、Qwen、DeepSeek など) と組み合わせて SQL ステートメントを生成します。
  • 生成された SQL は自動的に実行され、結果を返すことができ、データの視覚化 (グラフなど) をサポートします。

Vanna の一般的な動作は次のとおりです。

III. Vannaの環境設定

3.1 Vannaの仮想環境の作成

ここでは、Python バージョン 3.11.x が選択されました。

 conda create -n my_vanna pythnotallow==3.11.9 

3.2 Vanna環境の依存関係をインストールする

pip install vanna[chromadb,mysql]

OpenAI インターフェース経由で Vanna を使用するため、OpenAI ライブラリをインストールする必要があります。

 pip install openai

上記の設定後、Vanna を使用して SQL を生成できます。

注: 上記の pip によるインストール プロセスには、他の依存ライブラリのインストールが含まれるため、オンラインでインストールすることをお勧めします。

関係する環境:

 annotated-types 0.7.0 anyio 4.8.0 asgiref 3.8.1 attrs 25.1.0 backoff 2.2.1 bcrypt 4.2.1 blinker 1.9.0 build 1.2.2.post1 cachetools 5.5.1 certifi 2025.1.31 charset-normalizer 3.4.1 chroma-hnswlib 0.7.6 chromadb 0.6.3 click 8.1.8 colorama 0.4.6 coloredlogs 15.0.1 Deprecated 1.2.18 distro 1.9.0 durationpy 0.9 fastapi 0.115.8 filelock 3.17.0 flasgger 0.9.7.1 Flask 3.1.0 flask-sock 0.7.0 flatbuffers 25.2.10 fsspec 2025.2.0 google-auth 2.38.0 googleapis-common-protos 1.67.0 greenlet 3.1.1 grpcio 1.70.0 h11 0.14.0 httpcore 1.0.7 httptools 0.6.4 httpx 0.28.1 huggingface-hub 0.29.0 humanfriendly 10.0 idna 3.10 importlib_metadata 8.5.0 importlib_resources 6.5.2 itsdangerous 2.2.0 Jinja2 3.1.5 jiter 0.8.2 jsonschema 4.23.0 jsonschema-specifications 2024.10.1 kaleido 0.2.1 kubernetes 32.0.1 markdown-it-py 3.0.0 MarkupSafe 3.0.2 mdurl 0.1.2 mistune 3.1.2 mmh3 5.1.0 monotonic 1.6 mpmath 1.3.0 narwhals 1.27.1 numpy 2.2.3 oauthlib 3.2.2 onnxruntime 1.20.1 openai 1.63.2 opentelemetry-api 1.30.0 opentelemetry-exporter-otlp-proto-common 1.30.0 opentelemetry-exporter-otlp-proto-grpc 1.30.0 opentelemetry-instrumentation 0.51b0 opentelemetry-instrumentation-asgi 0.51b0 opentelemetry-instrumentation-fastapi 0.51b0 opentelemetry-proto 1.30.0 opentelemetry-sdk 1.30.0 opentelemetry-semantic-conventions 0.51b0 opentelemetry-util-http 0.51b0 orjson 3.10.15 overrides 7.7.0 packaging 24.2 pandas 2.2.3 pip 25.0 plotly 6.0.0 posthog 3.14.1 protobuf 5.29.3 pyasn1 0.6.1 pyasn1_modules 0.4.1 pydantic 2.10.6 pydantic_core 2.27.2 Pygments 2.19.1 PyMySQL 1.1.1 PyPika 0.48.9 pyproject_hooks 1.2.0 pyreadline3 3.5.4 python-dateutil 2.9.0.post0 python-dotenv 1.0.1 pytz 2025.1 PyYAML 6.0.2 referencing 0.36.2 requests 2.32.3 requests-oauthlib 2.0.0 rich 13.9.4 rpds-py 0.22.3 rsa 4.9 setuptools 75.8.0 shellingham 1.5.4 simple-websocket 1.1.0 six 1.17.0 sniffio 1.3.1 SQLAlchemy 2.0.38 sqlparse 0.5.3 starlette 0.45.3 sympy 1.13.3 tabulate 0.9.0 tenacity 9.0.0 tokenizers 0.21.0 tqdm 4.67.1 typer 0.15.1 typing_extensions 4.12.2 tzdata 2025.1 urllib3 2.3.0 uvicorn 0.34.0 vanna 0.7.6 watchfiles 1.0.4 websocket-client 1.8.0 websockets 15.0 Werkzeug 3.1.3 wheel 0.45.1 wrapt 1.17.2 wsproto 1.2.0 zipp 3.21.0

IV. Vannaの環境設定

4.1 VannaのAPIに登録する

公式サイトのアドレスは以下の通りです。

 https://vanna.ai/

メールを送信するだけで無料で登録でき、その後、個人センターで API キーを見つけることができます。

登録後、毎日 10 万個の無料トークンを受け取ります。

4.2 ヴァンナオンラインテスト

公式サイトで提供されている例によれば、テストを実行するには独自の API キーを渡すだけで済みます。

 import vanna from vanna.remote import VannaDefault vn = VannaDefault(model='chinook', api_key='6474fcc9348a48feb0c997c707c2004b') vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite') vn.ask("What are the top 10 albums by sales?")

テスト結果は以下の通りです。Vanna独自のサーバーとデータベースを使用することで、正常にSQL文とSQL結果を取得できることがわかります。(APIは現在無効ですが、ご自身で無料で申請できます。)

4.3 ヴァンナ民営化テスト

ローカル MySQL データベースのユーザー テーブル:

コードテストでは、30 歳以上のユーザーを正常に抽出できることが示されています。

写真