飞熊出品 · Vanna 调研:23K stars MIT Text-to-SQL 框架,2.0 让 AI Agent 真能查数据库

49次阅读
飞熊出品 · Vanna 调研:23K stars MIT Text-to-SQL 框架,2.0 让 AI Agent 真能查数据库

副标题 :从 RAG Agentic Retrieval · 到任意 LLM + 任意数据库 · Text-to-SQL 事实标准
赛道 :AI 原生 BI · 补足 316 WrenAI / 318 DB-GPT 之下的 ” 底层框架 ” 层
作者 :yunying(增长运营官)
时间:2026-08-20


一、引子:316 / 318 没回答的那个问题

8/15 发的《WrenAI 调研》?p=316》和《DB-GPT 调研》?p=318》都是 平台层——给业务团队用的成品。

但如果客户问 ” 我们想 自己造 一个 ChatBI,用什么底层框架?” —— 316/318 答不上。

本文答:Vanna——MIT ✅ + 23K stars + 3 年沉淀 + 任意 LLM + 任意数据库,Text-to-SQL 事实标准

二、它解决什么问题(30 秒版)

业务团队用数据库的 3 个老问题:

  1. 业务方不会写 SQL——每次都要找数据团队
  2. LLM 直接生成 SQL 不准——幻觉率高,复杂 Join 直接报错
  3. 多轮对话状态丢失——第 2 轮就忘了第 1 轮的查询条件

Vanna = 解决这 3 个问题——RAG 训练(DDL + 文档 + 之前的 SQL)+ Agentic Retrieval + 多轮状态管理。

实时数据(2026-08-20 拉取)

维度 数值
Stars 23,826
Forks 2,483
Open Issues 291(量低,治理成熟)
License MIT
最新版本 v2.0.2(2026-02-02)
最后 push 2026-02-02(6 个月前 ⚠️ 维护模式信号)
创建时间 2023-05-13(3 年
Topics agent / ai / data-visualization / database / llm / rag / sql / text-to-sql(8 个)
官网 vanna.ai
核心定位 “Chat with your SQL database — Accurate Text-to-SQL Generation via LLMs using Agentic Retrieval”

关键判断 :Vanna 是 Text-to-SQL 框架的 GitHub 最热门(23K stars 远超其他同类),但 ⚠️ 2026-02 后 6 个月没 push——介于 ” 主动维护 ” 和 ” 维护模式 ” 之间。 新项目可用,但要锁定 v2.0.x

三、4 大核心特性

1. Agentic Retrieval(基于 RAG 的 SQL 生成)

# Vanna 训练:把 DDL / 文档 / 之前的 SQL 都进向量库
vn.train(ddl="""
CREATE TABLE customers (
    id INT PRIMARY KEY,
    region VARCHAR(10),
    signup_date DATE
);
""")

vn.train(documentation=" 订单表里的 is_repeat 标记是否复购 ")

vn.train(sql="SELECT region, COUNT(*) FROM customers GROUP BY region")

# 查询:自动从向量库检索 + LLM 生成
sql = vn.generate_sql(" 上个月华东区客户复购率 ")
vn.run_sql(sql)

核心创新:不像普通 Text-to-SQL 把 DDL 塞 prompt,Vanna 用 RAG Agentic Retrieval——基于相似度检索最相关的 DDL + 文档 + 历史 SQL,SQL 准确率比 Naive Prompt 高 30-50%

2. Multi-Database(任意数据库)

Vanna 不绑死单一数据库,支持:

数据库 适配状态
PostgreSQL ✅ 一等公民
MySQL / MariaDB
Snowflake
BigQuery
Databricks
DuckDB
SQL Server
Oracle
Redshift
ClickHouse
SQLite

实战价值:客户用 Snowflake / 你用 Postgres / 同事用 BigQuery —— Vanna 一套代码搞定。

3. Multi-LLM(任意 LLM)

# 任意 LLM 都行
vn = VannaDefault(llm=OpenAI())         # OpenAI
vn = VannaDefault(llm=Anthropic())      # Claude
vn = VannaDefault(llm=Ollama(model="qwen2.5-coder:7b"))  # 本地
vn = VannaDefault(llm=HuggingFace())    # 开源 LLM

实战价值 :用 GPT-4o 最准 / Claude 长文最强 / Ollama 本地省钱 —— 一个抽象切换

4. Multi-Turn + Access Controlled(多轮 + 权限控制)

Vanna 2.0 新增的 SQL Agent 能力:

多轮对话——保留上下文(” 刚才那个查询按区域拆开 ”)

Access Control——基于 RBAC 限制查询的表 / 行 / 列

审计日志——所有 SQL 进审计 trail

四、对比 WrenAI / DB-GPT / Cube.js

维度 Vanna WrenAI (316) DB-GPT (318) Cube.js (375)
形态 底层框架 平台 平台 语义层引擎
Stars 23,826 ~17K ~20K 20,657
License MIT ✅ AGPL-3.0 ⚠️ MIT ✅ Apache-2.0+MIT ✅
数据库 任意 11+ 任意 任意 任意
LLM 任意 4+ 固定(OpenAI 为主) 固定 N/A(不直接做 LLM)
RAG 训练 ✅ 核心 ✅ 自带 ✅ 自带
多轮对话 ✅ v2.0 N/A
权限控制 ✅ v2.0 SQL Agent
可视化 ❌(返回 DataFrame) ✅ 内置 BI ✅ 内置 BI ✅ Playground + React
上手时间 30 分钟 10 分钟(平台) 10 分钟(平台) 35 分钟
使用门槛 要会 Python 不用写代码 不用写代码 要写 Cube schema
数据栈定位 Text-to-SQL 库 GenBI 平台 AI 数据应用框架 语义层

选谁?

场景 推荐
自己造 ChatBI / 集成到现有产品 Vanna ⭐(MIT + 任意 LLM + 任意 DB)
业务团队直接用 / 不想写代码 WrenAIDB-GPT(平台)
嵌入式 BI / 已有 dbt 数据栈 Cube.js(语义层更对路)
本地 LLM / 数据合规 Vanna + Ollama
多轮对话 + 权限控制 Vanna 2.0 SQL Agent

五、实战 3 步 · 35 分钟跑通 ”Vanna + Postgres + OpenAI”

Step 1 · Docker Compose 一键起(5 分钟)

version: '3.8'
services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: ecom
      POSTGRES_USER: vanna
      POSTGRES_PASSWORD: ***
    ports:
      - "5432:5432"
    volumes:
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

  chromadb:
    image: chromadb/chroma:latest
    ports:
      - "8000:8000"
    volumes:
      - chroma-data:/chroma/.chroma

volumes:
  chroma-data:

Step 2 · 安装 Vanna + 训练 RAG(15 分钟)

pip install vanna[chromadb,openai]
# vanna_demo.py
from vanna.openai import OpenAI_Chat
from vanna.chromadb 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-4o",
    "chroma_db_path":": "./chroma"
})

# 连 Postgres
vn.connect_to_postgres(
    host="localhost",
    port=5432,
    dbname="ecom",
    user="vanna",
    password="***"
)

# 训练:DDL
vn.train(ddl="""
CREATE TABLE customers (
    id SERIAL PRIMARY KEY,
    region VARCHAR(10),
    signup_date DATE
);
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_id INT REFERENCES customers(id),
    amount DECIMAL(10,2),
    order_date DATE,
    is_repeat BOOLEAN
);
""")

# 训练:文档
vn.train(documentation=" 订单表里的 is_repeat=true 表示客户复购 ")

# 训练:示例 SQL(Few-shot)vn.train(sql="SELECT region, COUNT(*) FROM customers GROUP BY region")
vn.train(sql="SELECT AVG(amount) FROM orders WHERE is_repeat = true")

Step 3 · 自然语言查询 + 多轮(15 分钟)

# 第 1 轮:查复购率
sql1 = vn.generate_sql(" 上个月华东区客户复购率 ")
print(sql1)
# 输出: SELECT
#   COUNT(DISTINCT CASE WHEN o.is_repeat THEN o.customer_id END) /
#   COUNT(DISTINCT c.id) * 100 AS repeat_rate
# FROM customers c
# JOIN orders o ON c.id = o.customer_id
# WHERE c.region = '华东'
#   AND o.order_date >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')

df1 = vn.run_sql(sql1)
print(df1)
# 输出: repeat_rate
#        23.5

# 第 2 轮:多轮上下文(Vanna 2.0 自动保留)sql2 = vn.generate_sql(" 刚才那个查询按区域拆开 ")  # ← Vanna 知道 " 刚才 " 是哪个
df3 = vn.run_sql(sql2)

# 第 3 轮:可视化(Vanna 返回 Plotly)vn.ask(" 过去 6 个月每月 GMV 趋势图 ", visualize=True)

35 分钟跑通的成果:自然语言 → RAG 检索 → LLM 生成 SQL → 执行 → DataFrame + 图表。

六、风险与坑

# 风险 应对
1 2026-02 后 6 个月没 push ⚠️ 锁定 v2.0.2;新项目可用,但要 有 fork plan(万一彻底停止维护可以接)
2 幻觉 SQL——复杂 Join / Window Function 仍可能错 RAG 训练里塞 50+ 示例 SQL,把幻觉率压到 <5%
3 数据库 schema 变更需重训 CI/CD 加自动 vn.train(ddl=…)
4 Token 成本——长 DDL 进 prompt 消耗大 用 RAG 只检索相关表,不是全 schema
5 本地 LLM 准确度差(Ollama 7B vs GPT-4o) 生产用 GPT-4o,本地 LLM 只做 demo
6 多数据库跨方言(PG SQL ≠ Snowflake SQL) Vanna 会按 DB 类型生成,但需要测试

七、总结

3 个最值得用的理由

  1. MIT + 任意 LLM + 任意数据库——不被锁定,技术栈自由
  2. 23K stars + 3 年沉淀——Text-to-SQL 框架 GitHub 最热门
  3. RAG Agentic Retrieval——比 Naive Prompt SQL 准确率高 30-50%

1 句选型口诀

自己造 ChatBI → Vanna(MIT + 灵活);业务团队用 → WrenAI / DB-GPT(平台);嵌入式 BI → Cube.js(语义层)。

Vanna 是 Text-to-SQL 底层框架 ——316/318 是 成品平台 ,Cube.js 是 语义层引擎,三者定位完全不同。

飞熊 GenBI 完整赛道(补足后)

[底层框架]                  [语义层]                  [平台]                  [嵌入式]
Vanna (本篇)           Cube.js (375)            WrenAI (316)              React 组件
Text-to-SQL 库         Apache-2.0+MIT        GenBI 平台 AGPL-3.0        cubejs-client-react
MIT 任意 LLM/DB        任意查询 API           自然语言问数据               React 组件库
                                                                                │
                                                                                ▼
                                                                          AI Agent

参考


📎 WordPress 链接

正文完