Text2SQL工具:Vanna介绍与安装
一、什么是Vanna
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation,检索增强生成)框架,用于将自然语言问题转换为精确的 SQL 查询,并在数据库上执行这些查询以返回结果和可视化图表。
比如你提问:查询年龄25岁以上的人员清单。
Vanna就可以将其转为sql语句。
二、Vanna的工作原理
1. 训练 RAG 模型
[*]数据准备:导入数据库的元数据(如表结构 DDL 语句)、文档(如业务术语解释)和示例 SQL 查询。
[*]向量化存储:将上述数据转换为向量并存储在本地向量数据库(如 ChromaDB)中。
2. 生成 SQL
[*]用户输入自然语言问题后,Vanna 从向量库中检索相关上下文,结合 LLM(如 GPT-4、Qwen、DeepSeek等)生成 SQL 语句。
[*]生成的 SQL 可自动执行并返回结果,支持数据可视化(如图表展示)
以下是Vanna的整体工作原理:
三、Vanna的环境配置
3.1 创建属于vanna的虚拟环境
在这里选择了python3.11.x的版本。
conda create -n my_vanna pythnotallow==3.11.9
[*]1.
3.2 安装vanna环境依赖
pip install vanna
[*]1.
由于我们采用openai接口的方式使用vanna,因此需要安装openai库。
pip install openai
[*]1.
经过以上配置,我们就可以通过vanna来生成sql了。
注意:以上通过pip安装过程中涉及到其他依赖库的安装,因此建议通过在线方式进行安装。
涉及到的环境:
annotated-types 0.7.0anyio 4.8.0asgiref 3.8.1attrs 25.1.0backoff 2.2.1bcrypt 4.2.1blinker 1.9.0build 1.2.2.post1cachetools 5.5.1certifi 2025.1.31charset-normalizer 3.4.1chroma-hnswlib 0.7.6chromadb 0.6.3click 8.1.8colorama 0.4.6coloredlogs 15.0.1Deprecated 1.2.18distro 1.9.0durationpy 0.9fastapi 0.115.8filelock 3.17.0flasgger 0.9.7.1Flask 3.1.0flask-sock 0.7.0flatbuffers 25.2.10fsspec 2025.2.0google-auth 2.38.0googleapis-common-protos 1.67.0greenlet 3.1.1grpcio 1.70.0h11 0.14.0httpcore 1.0.7httptools 0.6.4httpx 0.28.1huggingface-hub 0.29.0humanfriendly 10.0idna 3.10importlib_metadata 8.5.0importlib_resources 6.5.2itsdangerous 2.2.0Jinja2 3.1.5jiter 0.8.2jsonschema 4.23.0jsonschema-specifications 2024.10.1kaleido 0.2.1kubernetes 32.0.1markdown-it-py 3.0.0MarkupSafe 3.0.2mdurl 0.1.2mistune 3.1.2mmh3 5.1.0monotonic 1.6mpmath 1.3.0narwhals 1.27.1numpy 2.2.3oauthlib 3.2.2onnxruntime 1.20.1openai 1.63.2opentelemetry-api 1.30.0opentelemetry-exporter-otlp-proto-common 1.30.0opentelemetry-exporter-otlp-proto-grpc 1.30.0opentelemetry-instrumentation 0.51b0opentelemetry-instrumentation-asgi 0.51b0opentelemetry-instrumentation-fastapi 0.51b0opentelemetry-proto 1.30.0opentelemetry-sdk 1.30.0opentelemetry-semantic-conventions 0.51b0opentelemetry-util-http 0.51b0orjson 3.10.15overrides 7.7.0packaging 24.2pandas 2.2.3pip 25.0plotly 6.0.0posthog 3.14.1protobuf 5.29.3pyasn1 0.6.1pyasn1_modules 0.4.1pydantic 2.10.6pydantic_core 2.27.2Pygments 2.19.1PyMySQL 1.1.1PyPika 0.48.9pyproject_hooks 1.2.0pyreadline3 3.5.4python-dateutil 2.9.0.post0python-dotenv 1.0.1pytz 2025.1PyYAML 6.0.2referencing 0.36.2requests 2.32.3requests-oauthlib 2.0.0rich 13.9.4rpds-py 0.22.3rsa 4.9setuptools 75.8.0shellingham 1.5.4simple-websocket 1.1.0six 1.17.0sniffio 1.3.1SQLAlchemy 2.0.38sqlparse 0.5.3starlette 0.45.3sympy 1.13.3tabulate 0.9.0tenacity 9.0.0tokenizers 0.21.0tqdm 4.67.1typer 0.15.1typing_extensions 4.12.2tzdata 2025.1urllib3 2.3.0uvicorn 0.34.0vanna 0.7.6watchfiles 1.0.4websocket-client 1.8.0websockets 15.0Werkzeug 3.1.3wheel 0.45.1wrapt 1.17.2wsproto 1.2.0zipp 3.21.0
[*]1.
[*]2.
[*]3.
[*]4.
[*]5.
[*]6.
[*]7.
[*]8.
[*]9.
[*]10.
[*]11.
[*]12.
[*]13.
[*]14.
[*]15.
[*]16.
[*]17.
[*]18.
[*]19.
[*]20.
[*]21.
[*]22.
[*]23.
[*]24.
[*]25.
[*]26.
[*]27.
[*]28.
[*]29.
[*]30.
[*]31.
[*]32.
[*]33.
[*]34.
[*]35.
[*]36.
[*]37.
[*]38.
[*]39.
[*]40.
[*]41.
[*]42.
[*]43.
[*]44.
[*]45.
[*]46.
[*]47.
[*]48.
[*]49.
[*]50.
[*]51.
[*]52.
[*]53.
[*]54.
[*]55.
[*]56.
[*]57.
[*]58.
[*]59.
[*]60.
[*]61.
[*]62.
[*]63.
[*]64.
[*]65.
[*]66.
[*]67.
[*]68.
[*]69.
[*]70.
[*]71.
[*]72.
[*]73.
[*]74.
[*]75.
[*]76.
[*]77.
[*]78.
[*]79.
[*]80.
[*]81.
[*]82.
[*]83.
[*]84.
[*]85.
[*]86.
[*]87.
[*]88.
[*]89.
[*]90.
[*]91.
[*]92.
[*]93.
[*]94.
[*]95.
[*]96.
[*]97.
[*]98.
[*]99.
[*]100.
[*]101.
[*]102.
[*]103.
[*]104.
[*]105.
[*]106.
[*]107.
[*]108.
[*]109.
[*]110.
[*]111.
[*]112.
[*]113.
[*]114.
[*]115.
[*]116.
[*]117.
[*]118.
[*]119.
[*]120.
[*]121.
[*]122.
四、Vanna的环境配置
4.1 注册vanna的API
官网地址如下:
https://vanna.ai/
[*]1.
仅需通过email就可以免费注册,然后到个人中心去找到自己的api key。
注册之后,每天享有100K的免费Token。
4.2 vanna在线测试
根据官网给的示例,我们只需要传递自己的apikey就可以进行测试。
import vannafrom vanna.remote import VannaDefaultvn = 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?")
[*]1.
[*]2.
[*]3.
[*]4.
[*]5.
测试结果如下,可以看到利用vanna自己的服务器和数据库能够成功获得sql语句与sql结果。(API已失效,自己可以免费申请)
4.3 vanna私有化测试
本地mysql数据库的user表:
通过代码测试,可以看到能够成功提取年龄大于30岁的用户。
图片
页:
[1]