vanna
自然语言转SQL的RAG+Agent框架,Vanna让业务人员直接用对话查询数据库
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
自然语言转SQL的RAG+Agent框架,Vanna让业务人员直接用对话查询数据库
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:业务人员不再需要等数据工程师写SQL,直接对着一款聊天机器人问"我们华南区上个月卖得最好的5款产品是什么",几秒钟后,精确的SQL被生成并执行,数据以表格和图表的形式实时返回。这不是想象——Vanna正是这样一款正在被数千家企业采用的AI SQL生成工具。
Vanna由Zain Hoda于2023年5月创立,是一个开源的检索增强生成(RAG)+ Agent架构的Text-to-SQL框架。与传统基于规则或纯Prompt工程的方案不同,Vanna 2.0将数据库Schema、历史查询样例作为上下文,结合LLM的推理能力,实现高准确率的自然语言转SQL生成。 项目在GitHub上已积累超过23,000颗星,被广泛应用于数据分析平台、商业智能(BI)工具、企业级报表系统等场景。2024年底发布的Vanna 2.0是一次重大架构升级,从初代基于LangChain的实现全面重构为自研Agent框架,并引入了企业级安全功能。
Vanna的"魔力"来自于一个精心设计的RAG + Agent循环: 第一步:知识库构建。 Vanna会将目标数据库的Schema(表结构、字段类型、外键关系)以及历史已验证的SQL查询样例向量化后存入向量数据库。支持的向量库包括ChromaDB、FAISS、Pinecone、Milvus、Weaviate等12种选择。 第二步:用户提问 -> Agent规划。 当用户用自然语言提问时,Agent首先检索与问题最相关的Schema和查询样例,构建精确的上下文提示词(Context),然后让LLM生成候选SQL。 第三步:安全执行与反馈。 生成的SQL由对应的数据库Runner(如PostgreSQL Runner、MySQL Runner)实际执行,若报错则将错误信息反馈给LLM重新生成(Self-Correction)。整个过程完全在用户数据库中执行,LLM仅负责生成SQL语句本身,不接触原始数据。 第四步:流式响应与可视化。 2.0版本支持SSE流式输出,前端可以实时接收"思考进度 -> SQL代码 -> 数据表格 -> Plotly图表 -> 自然语言总结"五段式响应,体验接近ChatGPT的实时流式交互。

图1:Vanna生成的数据分析结果可视化示例,展示top-10客户排名图表
Vanna 2.0的架构分为五大层次:
Agent核心层(vanna.core):自研的轻量级Agent框架,包含Agent(主控制器)、Tool(工具基类)、LlmService(LLM抽象接口)、ConversationStore(对话存储)、UserService(用户身份解析)。核心通过async/await实现全异步流式处理。
工具层(vanna.tools):内置工具包括SQL执行、向量检索、会话存储等,均继承统一的Tool基类,支持权限组(access_groups)配置以实现行级安全。开发者可自定义扩展工具,只需继承Tool[Args]并实现execute方法即可。
集成层(vanna.integrations):这是Vanna覆盖面最广的模块,提供30+数据库驱动(PostgreSQL、MySQL、Snowflake、BigQuery、ClickHouse、DuckDB、SQLite、Oracle等)和15+ LLM提供商(OpenAI GPT-4、Anthropic Claude、Azure OpenAI、Google Gemini、AWS Bedrock、Ollama本地模型、Mistral等)。每种集成均为独立子模块,按需安装,避免依赖膨胀。
服务层(vanna.servers):提供三种部署形态——FastAPI(生产推荐)、Flask(轻量嵌入)、CLI(本地调试)。FastAPI路由注册后自动暴露/api/vanna/v2/chat_sse流式端点,支持JWT/Cookie认证。
前端组件(frontends/webcomponent):开箱即用的<vanna-chat> Web组件,引入一行JS即可嵌入任意网页,支持深色/浅色主题、桌面/移动端自适应。
| 类别 | 支持选项 |
|---|---|
| 数据库 | PostgreSQL, MySQL, Snowflake, BigQuery, Redshift, SQLite, Oracle, SQL Server, DuckDB, ClickHouse, Presto, Hive, MS SQL等 |
| LLM | OpenAI (GPT-4o, GPT-4 Turbo), Anthropic (Claude 3.5 Sonnet), Azure OpenAI, Google Gemini, AWS Bedrock, Mistral, Ollama, 百度Qianfan, 智谱ChatGLM等 |
| 向量库 | ChromaDB, FAISS, Pinecone, Milvus, Weaviate, Qdrant, Marqo, Azure AI Search, OpenSearch等 |
2.0版本专门针对企业场景设计了四层安全机制:
用户感知(User-Aware):通过UserResolver抽象层从请求中提取用户身份(Cookie、JWT、Session),自动将用户ID和组权限传递到Agent执行上下文。
行级安全(Row-Level Security):SQL执行工具自动在生成的SQL外层追加WHERE条件过滤,确保每位用户只能看到自己有权限访问的数据行。
审计日志(Audit Logs):每次查询操作均记录操作用户、时间戳、SQL语句和执行结果,满足合规要求。
流量限制(Rate Limiting):通过生命周期钩子(Lifecycle Hooks)实现按用户维度的API调用配额控制。
Vanna不提供容器化部署(无Dockerfile/docker-compose),需要通过Python包安装。标准部署流程如下:
pip install vanna 安装核心包pip install 'vanna[postgres]' 或 pip install 'vanna[snowflake]' 等pip install 'vanna[openai]' 或 pip install 'vanna[anthropic]' 等pip install 'vanna[fastapi]' 或 pip install 'vanna[flask]'<vanna-chat>组件即可
部署难度评为中等,因为虽然无需容器化配置,但需要理解Agent、Tool、UserResolver等核心概念,并配置LLM API Key。对于Python开发者,参照README示例约10-15分钟可完成基础部署。尽管Vanna功能强大,但使用时需注意以下限制: 准确性依赖RAG质量:生成的SQL准确率高度依赖向量数据库中存储的Schema和查询样例质量。如果知识库覆盖不足,LLM生成的SQL可能产生幻觉(Hallucination),尤其是涉及复杂JOIN或子查询时。 LLM API成本:每次查询都需要调用LLM API,在高频使用场景下成本不可忽视。Vanna支持LLM中间件(Middleware)实现请求缓存,是优化成本的方向。 安全配置门槛:行级安全需要开发者显式配置UserResolver和访问组,如果配置不当可能导致越权访问风险。 非结构化数据处理:Vanna主要面向结构化SQL数据库,对于NoSQL、图数据库等非结构化数据源的支持相对有限。
Vanna代表了Text-to-SQL领域从"规则匹配"向"Agent规划"的范式转变。传统方案依赖手工编写的语法规则,面对复杂查询往往束手无策;而Vanna通过RAG + Self-Correction机制,在保证安全性的同时大幅提升了复杂查询的准确率。 随着2.0版本引入企业级安全和可观测性(Observability),Vanna正从个人开发者工具向企业级数据平台组件演进。其"<5行代码接入"的极简API设计理念,也预示着AI能力将像CDN一样,成为每个数据产品的基础设施。