跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Vanna:基于 RAG 的自然语言对话 SQL 数据库框架

Vanna 是一款基于 MIT 许可证的开源 Python RAG 框架,旨在通过检索增强生成技术实现高精度的 Text-to-SQL。它支持多种大模型(如 OpenAI、Anthropic)及向量数据库,允许用户以自然语言查询任意 SQL 数据库而无需手动编写代码。核心流程包括环境搭建、初始化配置、模型训练(DDL、文档、历史 SQL)及查询交互,具备自学习能力和多前端适配性,确保数据隐私安全。

山野诗人发布于 2026/3/24更新于 2026/9/316K 浏览

项目概述 - Text-to-SQL 领域的开源 RAG 框架

Vanna 是一款基于 MIT 许可证的开源 Python 检索增强生成(RAG,Retrieval-Augmented Generation)框架,主要用于 SQL 生成及相关功能开发。核心定位是通过 RAG 与 LLM 实现高精度的 Text-to-SQL,最终让用户以自然语言与任意 SQL 数据库交互,无需手动编写 SQL 语句。

跨组件兼容性,支持 LLM + 向量数据库 + SQL 数据库的组合。

  • 支持的大模型包括:OpenAI、Anthropic、Gemini、HuggingFace、AWS Bedrock、Ollama、Qianwen、Qianfan、Zhipu。
  • 支持的向量存储包括:AzureSearch、Opensearch、PgVector、PineCone、ChromaDB、FAISS、Marqo、Milvus、Qdrant、Weaviate、Oracle。
  • 支持的数据库包括:PostgreSQL、MySQL、PrestoDB、Apache Hive、ClickHouse、Snowflake、Oracle、Microsoft SQL Server、BigQuery、SQLite、DuckDB。
  • 安全性与隐私保护。作为企业级工具的核心诉求,Vanna 确保数据库内容永不外传——训练阶段仅将表结构、业务文档、历史 SQL 转化为向量存储,不涉及原始数据;SQL 执行过程在用户本地环境完成,避免数据泄露风险。
  • 自学习能力:通过反馈 - 迭代机制持续提升精度。如在 Jupyter Notebook 中可开启'自动训练',将成功执行的 SQL 查询自动纳入训练数据;在 Web、Slack 等前端界面中,系统会主动提示用户反馈结果准确性;正确的问题 - SQL 对将被存储,为后续查询提供参考,实现'用得越多,精度越高'。
  • 多前端适配性:支持从开发到落地的全流程前端需求。开发阶段可通过 Jupyter Notebook 快速调试;落地阶段可扩展为 Streamlit Web 应用、Flask 服务、Slack 机器人,或自定义前端,满足不同用户群体的交互习惯。

核心架构 - '训练 - 查询'双阶段驱动的技术链路

Vanna 的架构设计围绕 RAG 赋能 Text-to-SQL 展开,核心分为模型训练'与查询交互两大阶段,各阶段由 LLM 层、向量存储层、数据库连接层、前端层四大组件协同支撑,形成低耦合、高可扩展的技术架构。

在这里插入图片描述

Vanna 的使用流程分为两个步骤:

  1. 在你的数据上训练一个 RAG 模型
  2. 提出问题,系统会返回可配置为在你的数据库上运行的 SQL 语句

在这里插入图片描述

Vanna 选择 RAG 而非传统 LLM 微调作为核心技术路径,原因如下:

在这里插入图片描述

部署与使用 - 从环境搭建到 Text2SQL 查询落地

Vanna 的部署与使用门槛较低,基于 Python 生态,支持快速上手,核心流程分为环境准备 - 初始化配置 - 模型训练 - 查询交互四步,同时支持自定义扩展。

  1. 环境准备 通过 PyPI 安装 Vanna 核心包,命令如下:

    pip install vanna
    

根据选择的 LLM、向量数据库、目标数据库安装对应依赖。

  • 初始化配置 Vanna 的初始化需指定 LLM 实现与向量存储实现,通过继承对应类构建自定义 Vanna 实例。以 OpenAI GPT + ChromaDB 为例,核心代码如下。

    1. 导入对应 LLM 与向量存储的实现类

    from vanna.openai.openai_chat import OpenAI_Chat
    from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore
    

    2. 自定义 Vanna 类,继承两个实现类

    class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
        def __init__(self, config=None):
            # 初始化向量存储(ChromaDB)
            ChromaDB_VectorStore.__init__(self, config=config)
            # 初始化 LLM(OpenAI)
            OpenAI_Chat.__init__(self, config=config)
    

    3. 配置参数,传入 OpenAI API 密钥与模型名

    config = {
        "api_key": "sk-你的 OpenAI API 密钥",  # 替换为实际密钥
        "model": "gpt-4",  # 可选 gpt-3.5-turbo、gpt-4-turbo 等
        "chroma_db_path": "./vanna_chromadb"  # ChromaDB 本地存储路径
    }
    

    4. 创建 Vanna 实例

    vn = MyVanna(config=config)
    
  • 模型训练 初始化完成后,需根据企业数据环境补充训练数据,核心训练命令如下:

    3.1 DDL 训练,导入数据库表结构,以电商场景的 order 表为例:
    vn.train(ddl=""" CREATE TABLE IF NOT EXISTS orders (
        order_id INT PRIMARY KEY,
        customer_id INT,
        order_date DATE,
        amount DECIMAL(10,2),
        status VARCHAR(20), -- 'paid'/'unpaid'/'cancelled'
        FOREIGN KEY (customer_id) REFERENCES customer(id)
    )""")
    
    3.2 业务文档训练,补充订单相关的业务定义
    vn.train(documentation="""
    4. 有效订单:status 为'paid'且未取消的订单,order_date 不为 NULL;
    5. 客单价:有效订单的 amount 平均值,按 customer_id 分组计算;
    6. 月度 GMV:当月所有有效订单的 amount 总和,不含退款金额。
    """)
    
    3.3 历史 SQL 训练,导入数据团队已有的 GMV 查询 SQL:
    vn.train(sql=""" SELECT DATE_TRUNC('month', order_date) AS month, SUM(amount) AS monthly_gmv FROM orders WHERE status = 'paid' GROUP BY month ORDER BY month DESC """)
    

    训练无固定次数要求,建议初期导入核心表的 DDL 与关键业务文档,后续通过'自学习'逐步补充,避免一次性导入过多冗余数据影响检索精度。

  • 查询与结果交互 训练完成后,即可通过 vn.ask() 方法实现自然语言查询,示例如下:

    result = vn.ask("2025 年第一季度各月 GMV 是多少")
    

    系统会先返回生成的 SQL:

    SELECT DATE_TRUNC('month', order_date) AS month, SUM(amount) AS monthly_gmv FROM orders WHERE status='paid' AND order_date BETWEEN '2025-01-01' AND '2025-03-31' GROUP BY month ORDER BY month
    
  • 项目地址

    https://github.com/vanna-ai/vanna

    目录

    1. 项目概述 - Text-to-SQL 领域的开源 RAG 框架
    2. 核心架构 - “训练 - 查询”双阶段驱动的技术链路
    3. 部署与使用 - 从环境搭建到 Text2SQL 查询落地
    4. 1. 导入对应 LLM 与向量存储的实现类
    5. 2. 自定义 Vanna 类,继承两个实现类
    6. 3. 配置参数,传入 OpenAI API 密钥与模型名
    7. 4. 创建 Vanna 实例
    8. 3.1 DDL 训练,导入数据库表结构,以电商场景的 order 表为例:
    9. 3.2 业务文档训练,补充订单相关的业务定义
    10. 3.3 历史 SQL 训练,导入数据团队已有的 GMV 查询 SQL:
    11. 项目地址

    更多推荐文章

    查看全部
    • C++ 红黑树的实现:原理与底层解析
    • Spring Boot 日志框架体系与配置实战
    • LLaMA-Factory 本地部署与微调环境搭建指南
    • Python pip 安装与使用指南
    • 基于 OpenClaw 与飞书搭建 AI 新闻推送机器人
    • 基于 LLaMA-Factory 微调 Qwen3.5-4B 构建医疗 AI 助手
    • LLaMA-Factory 大模型微调实战:Qwen3 + LoRA
    • 深度确定性策略梯度算法 (DDPG) 详解与实现
    • GitHub Copilot Pro 学生免费认证与 VS Code 集成指南
    • llama.cpp 量化模型部署实战:从模型转换到 API 服务
    • llama.cpp:基于 C/C++ 的本地大语言模型推理框架
    • 2G 内存云服务器部署 Spring Boot + MySQL 实践
    • llama.cpp 量化模型部署实战:从模型转换到 API 服务
    • VR 音游音符轨道系统开发实录与原理解析
    • AI 零基础入门:从概念到实践的完整指南
    • C++模板实战:函数与类模板的核心用法与细节
    • Python 自动化办公与数据采集实战指南
    • WebMCP:浏览器 AI 交互新范式
    • 红黑树原理、规则及 C++ 代码实现
    • Visual C++ 运行库安装与故障排查指南

    相关免费在线工具

    • 加密/解密文本

      使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

    • RSA密钥对生成器

      生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

    • Mermaid 预览与可视化编辑

      基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

    • 随机西班牙地址生成器

      随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

    • Gemini 图片去水印

      基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

    • curl 转代码

      解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online