Vanna:用检索增强生成(RAG)技能革新天然语言转SQL

干翻全岛蛙蛙  论坛元老 | 2025-4-5 11:56:01 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1511|帖子 1511|积分 4533

引言:为什么我们必要更智能的SQL生成?

在数据驱动的业务环境中,SQL 仍然是数据分析的核心工具。然而,编写精确的 SQL 查询必要专业知识,而大型语言模子(LLM)直接生成的 SQL 往往存在**幻觉(hallucination)**或不符合业务逻辑的问题。
Vanna 是一个基于 检索增强生成(RAG) 的框架,专门优化天然语言到 SQL 的转换。它联合了 LLM 的强大推理本领和数据库的上下文信息,显著进步了 SQL 生成的准确性。
本文将深入探究:

  • Vanna 的核心工作原理
  • 它怎样比纯 LLM 更可靠
  • 怎样快速集成到你的数据工作流

1. Vanna 的核心工作原理

Vanna 的工作流程分为 训练阶段 和 推理阶段,形成一个持续优化的闭环体系。
(1)训练阶段:构建知识库

Vanna 通过以下方式学习你的数据库:


  • 数据库模式(DDL):存储表布局、字段类型、外键关系。
    1. vn.train(ddl="CREATE TABLE sales (id INT, product_id INT, amount FLOAT, date TIMESTAMP)")
    复制代码
    1. [/code]
    2. [*] [b]业务规则文档[/b]:定义关键指标(如“贩卖额 = SUM(amount)”)。
    3. [code]vn.train(documentation="销售额是指销售表中 amount 列的总和")
    复制代码
    1. [/code]
    2. [*] [b]汗青查询缓存[/b]:存储已验证的 SQL 及其天然语言问题,形成 QA 对。
    3. [/list] 这些数据会被[b]向量化[/b]并存入向量数据库(如 Chroma、FAISS),供后续检索使用。
    4. [size=3][b](2)推理阶段:动态生成SQL[/b][/size]
    5. 当用户提问时(如 [i]“2023年贩卖额最高的产品是什么?”[/i]),Vanna 执行以下步骤:
    6. [list=1]
    7. [*] [b]检索相关上下文[/b]
    8. [list]
    9. [*] 使用向量搜索召回:
    10. [list]
    11. [*] 相关表布局(sales 表、products 表)
    12. [*] 业务规则(“贩卖额 = SUM(amount)”)
    13. [*] 类似的汗青查询(SELECT product, SUM(amount) FROM sales GROUP BY product)
    14. [/list]
    15. [/list]
    16. [*] [b]组装Prompt,输入LLM[/b]
    17. [code]你是一个SQL专家。根据以下信息生成查询:
    18. ### 数据库结构:
    19. - sales(id INT, product_id INT, amount FLOAT, date TIMESTAMP)
    20. - products(id INT, name VARCHAR)
    21. ### 业务规则:
    22. - 销售额 = SUM(amount)
    23. ### 类似查询:
    24. - "各产品销售额" → SELECT name, SUM(amount) FROM sales JOIN products ON sales.product_id = products.id GROUP BY name
    25. ### 问题:
    26. 2023年销售额最高的产品是什么?
    复制代码
    1. [/code]
    2. [*] [b]生成并优化SQL[/b]
    3. LLM 返回:
    4. [code]SELECT p.name, SUM(s.amount)
    5. FROM sales s JOIN products p ON s.product_id = p.id
    6. WHERE YEAR(s.date) = 2023
    7. GROUP BY p.name
    8. ORDER BY SUM(s.amount) DESC
    9. LIMIT 1
    复制代码
    1. [/code]
    2. [*] [b]执行或人工考核[/b]
    3. [list]
    4. [*] 可自动执行并返回结果,或由数据团队验证后修正。
    5. [*] 修正后的 SQL 会反馈到训练库,使模子持续改进。
    6. [/list]
    7. [/list]
    8. [size=4]Vanna的工作原理[/size]
    9. Vanna通过两个简单步骤工作:在你的数据上训练一个RAG“模子”,然后提出问题,返回可自动在数据库上运行的SQL查询。
    10. [list=1]
    11. [*][b]对你的数据训练一个RAG“模子”。[/b]
    12. [*][b]提问。[/b]
    13. [/list]  
    14. [align=center][img]https://i-blog.csdnimg.cn/direct/536b60a30e8f44e095837efd02099375.png[/img][/align]
    15. [hr] [size=4][b]2. Vanna vs. 纯LLM:为什么更可靠?[/b][/size]
    16. [table][tr][b]对比维度[/b][b]纯LLM(如ChatGPT)[/b][b]Vanna + RAG[/b][/tr][tr][td][b]范畴知识[/b][/td][td]通用知识,可能不了解你的数据库[/td][td]动态注入表布局、业务规则[/td][/tr][tr][td][b]准确性[/b][/td][td]复杂查询错误率高[/td][td]检索增强减少幻觉,实测提升30-50%[/td][/tr][tr][td][b]可解释性[/b][/td][td]黑箱生成,难以调试[/td][td]可查看检索到的上下文,定位问题[/td][/tr][tr][td][b]持续学习[/b][/td][td]静态模子,无法优化[/td][td]用户反馈闭环,越用越准[/td][/tr][/table] [b]典范案例[/b]:
    17. [list]
    18. [*] [b]纯LLM[/b]:提问“计算客户留存率”可能生成错误的 JOIN 逻辑。
    19. [*] [b]Vanna[/b]:检索业务定义后,生成精确的 SQL(如使用日期差计算留存)。
    20. [/list] [hr] [size=4][b]3. 怎样快速集成Vanna?[/b][/size]
    21. [size=3][b](1)安装与初始化[/b][/size]
    22. [code]pip install vanna
    23. from vanna.llm.openai import OpenAI_Chat
    24. from vanna.vannadb import VannaDB
    25. vn = Vanna(model=OpenAI_Chat(), db_engine=your_db_connection)
    复制代码
    1. [/code] [size=3][b](2)训练模子[/b][/size]
    2. [code]# 注入DDL
    3. vn.train(ddl="CREATE TABLE products (id INT, name VARCHAR, price FLOAT)")
    4. # 添加业务文档
    5. vn.train(documentation="高价值产品指价格超过1000元的商品")
    6. # 录入历史SQL
    7. vn.train(
    8.     question="哪些是高价值产品?",
    9.     sql="SELECT name FROM products WHERE price > 1000"
    10. )
    复制代码
    1. [/code] [size=3][b](3)生成SQL[/b][/size]
    2. [code]question = "2023年最畅销的高价值产品是什么?"
    3. sql = vn.generate_sql(question)
    4. print(sql)
    复制代码
    1. [/code] [size=3][b](4)部署为API[/b][/size]
    2. Vanna 提供 Flask 快速部署:
    3. [code]from vanna.flask import VannaFlaskApp
    4. app = VannaFlaskApp(vn)
    5. app.run()
    复制代码
    [code][/code]
    4. 未来展望

    Vanna 的潜力不仅限于 SQL 生成:


    • BI 工具增强:为 Tableau/Power BI 提供天然语言查询接口。
    • 自动化数据探查:通过对话式分析发现数据趋势。
    • 多模态扩展:联合文本和图表,实现更智能的数据交互。

    结论

    Vanna 通过 RAG + 反馈学习,将 LLM 变成了一个“懂你业务”的 SQL 助手。它特殊得当:


    • 数据分析团队:减少重复的 SQL 编写工作。
    • 非技能用户:通过天然语言查询数据库。
    • 数据平台开发:快速构建智能查询接口。
    项目已开源(Apache 2.0),支持 Snowflake、BigQuery、PostgreSQL 等主流数据库,立即试用:GitHub - vanna-ai/vanna

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表