Github 16.7K star,告别SQL复杂查询,Vanna让你像聊天一样与数据库对话

在数据驱动的世界中,企业和开发者每天都面临着一个共同的挑战:如何让更多非技术人员能够方便地从数据库中获取洞察?

编写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(检索增强生成)技术

通过两个简单步骤实现:

  1. 训练阶段

    • 收集DDL语句(表结构定义)、业务文档和参考SQL查询
    • 为这些信息生成向量嵌入(Embedding)
    • 将嵌入和元数据存储在向量数据库中
  2. 查询阶段

    • 将用户的自然语言问题转换为向量嵌入
    • 在向量数据库中查找相关的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代表了数据库交互的未来方向,通过将自然语言处理与数据库技术无缝结合,它消除了技术门槛,让每个人都能成为数据探索者。其开源性质、灵活的架构和对隐私的重视,使其成为组织数据民主化的理想工具。不仅提高了技术团队的效率,更为业务决策者打开了直接获取数据洞察的大门,真正实现了"让数据说话"的愿景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值