在数据驱动的世界中,企业和开发者每天都面临着一个共同的挑战:如何让更多非技术人员能够方便地从数据库中获取洞察?
编写SQL查询需要专业知识,这常常成为业务分析师、产品经理和决策者的瓶颈。
Vanna应运而生,它是一个开创性的开源框架,能将自然语言问题转换为精确的SQL查询,打破了技术与业务之间的壁垒,让数据真正为所有人所用。
核心功能
-
自然语言到SQL的智能转换:用户只需用自然语言提问,自动生成对应的SQL查询。
-
高度适应性的数据库连接:支持众多主流数据库,包括PostgreSQL、MySQL、Snowflake、Oracle、Microsoft SQL Server、BigQuery等十多种数据库系统。
-
灵活的大语言模型选择:与OpenAI、Anthropic、Gemini、HuggingFace等主流LLM平台无缝集成,甚至支持开源模型如Ollama和国内的千问、千帆等。
-
多样化的向量存储支持:兼容AzureSearch、Opensearch、PgVector、PineCone、ChromaDB等多种向量数据库,为检索增强提供强大后盾。
-
丰富的用户界面选择:提供Jupyter Notebook、Streamlit、Flask和Slack等多种交互方式,满足不同场景的需求。
-
自学习能力:系统能够从成功执行的查询中学习,不断提高准确性,特别是在Jupyter环境中可启用"自动训练"功能。
-
数据可视化:自动为查询结果生成可视化图表,帮助用户更直观地理解数据。
技术实现
Vanna的工作原理基于RAG(检索增强生成)技术
通过两个简单步骤实现:
-
训练阶段:
- 收集DDL语句(表结构定义)、业务文档和参考SQL查询
- 为这些信息生成向量嵌入(Embedding)
- 将嵌入和元数据存储在向量数据库中
-
查询阶段:
- 将用户的自然语言问题转换为向量嵌入
- 在向量数据库中查找相关的DDL、文档和SQL示例
- 构建精心设计的提示(Prompt),发送给大语言模型
- 由大语言模型生成SQL查询
- 执行SQL并返回结果,包括数据表和可视化
快速入门
1.安装:
pip install vanna
2.导入与配置:
from vanna.openai.openai_chat import OpenAI_Chat
from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore
class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
def __init__(self, config=None):
ChromaDB_VectorStore.__init__(self, config=config)
OpenAI_Chat.__init__(self, config=config)
vn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4...'})
3.训练:
# 使用DDL语句训练
vn.train(ddl="""
CREATE TABLE IF NOT EXISTS my-table (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT
)
""")
# 添加业务文档
vn.train(documentation="Our business defines XYZ as ...")
# 添加SQL示例
vn.train(sql="SELECT name, age FROM my-table WHERE name = 'John Doe'")
4.提问:
vn.ask("What are the top 10 customers by sales?")
你可以得到如下SQL
SELECT c.c_name as customer_name,
sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales
FROM snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o
ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c
ON o.o_custkey = c.c_custkey
GROUP BY customer_name
ORDER BY total_sales desc limit 10;
然后根据你已连接数据库的数据查询结果。
选择Vanna的理由
-
复杂数据集高精度:能力取决于训练数据,更多训练数据可提升复杂数据集的准确性。
-
安全私密:数据库内容不发送到LLM或向量数据库,SQL在本地环境执行。
-
自学习:通过Jupyter可选择“自动训练”成功执行的查询,其他界面可让用户对结果提供反馈,正确的问题 - SQL对会存储供未来参考。
-
支持任意SQL数据库:可连接任何能用Python连接的SQL数据库。
-
前端选择多样:多数人从Jupyter Notebook开始,也可通过Slackbot、网页应用、Streamlit应用或自定义前端向终端用户开放。
总结
Vanna代表了数据库交互的未来方向,通过将自然语言处理与数据库技术无缝结合,它消除了技术门槛,让每个人都能成为数据探索者。其开源性质、灵活的架构和对隐私的重视,使其成为组织数据民主化的理想工具。不仅提高了技术团队的效率,更为业务决策者打开了直接获取数据洞察的大门,真正实现了"让数据说话"的愿景。