返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

Text2SQL 效果不好?不要错过这个神器!自带 RAG、复杂数据集准确度高,还能自训练模型!

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 09:58 |阅读模式 打印 上一主题 下一主题

Vanna[1]是一个开源 Python RAG(检索增强生成)框架,用于SQL生成和相关功能。

近期热文

  • 超强 OCR 新秀:支持 90 多种语言,性能超越云服务!
  • 当 AI 遇上爬虫:让数据提取变得前所未有的简单!
  • 2024 年最完整的 AI Agents 清单来了,涉及 13 个领域,上百个 Agents!
  • 7.8K Star RAG 引擎:基于深度文档理解,最大程度降低幻觉、无限上下文快速完成 “大海捞针” 测试!

Vanna 主要特点

  • 开源:Vanna Python 软件包和各种前端集成都是开源的。您可以在自己的基础设施上运行 Vanna。
  • 安全:您的数据库内容永远不会发送到 LLM,除非您启用了该功能。元数据存储层只能看到模式、文档和查询。
  • 易集成:支持 Slackbot、Web App、Streamlit App 等多种集成方式。
  • 自学习:随着您更多地使用 Vanna,您的模型会随着我们增加您的训练数据而不断改进。
  • 复杂数据集的高准确性:Vanna 的能力与您提供的训练数据相关。更多的训练数据意味着大型复杂数据集的准确性更高。
  • 支持多种数据库:开箱即用,支持SnowflakeBigQuerPostgres等数据库。还支持你自定义连接器来连接任何数据库。

Vanna 工作流程

Vanna 只需两个简单的步骤:在数据上训练RAG 模型,然后提出问题,这些问题将返回 SQL 查询,这些查询可以设置为在数据库中自动运行。

  1. 基于你的数据训练 RAG 模型
  2. 提问题

如果您不知道 RAG 是什么,也不要担心。您不需要知道它在幕后是如何工作的就可以使用它。您只需要知道您 “训练” 了一个模型,该模型存储一些元数据,然后用它来 “提出” 问题。

RAG vs Fine-Tuning

RAG

  • 可跨 LLM 移植
  • 如果训练数据过时,可轻松删除
  • 运行成本比微调(Fine-Tuning)低得多
  • 面向未来,如果出现了更好的 LLM,你只需更换即可

Fine-Tuning

  • 起步慢
  • 训练和运行成本高
  • 如果您需要在提示符中尽量减少 token 消耗,它是不错的选择

Vanna 快速上手

前置条件

首先,需要根据Vanna 文档[2]配置数据库和使用的大语言模型。

安装 vanna

pipinstallvanna

使用 vanna

#TheimportstatementwillvarydependingonyourLLMandvectordatabase.ThisisanexampleforOpenAI+ChromaDB

fromvanna.openai.openai_chatimportOpenAI_Chat
fromvanna.chromadb.chromadb_vectorimportChromaDB_VectorStore

classMyVanna(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-...'})

#Seethedocumentationforotheroptions

Vanna 模型训练

使用 DDL 语句训练

DDL 语句包含有关数据库中的表名、列、数据类型和关系的信息。

vn.train(ddl="""
CREATETABLEIFNOTEXISTSmy-table(
idINTPRIMARYKEY,
nameVARCHAR(100),
ageINT
)
""")

使用文档训练

有些时候,您可能需要添加有关业务术语或定义的文档。

vn.train(documentation="OurbusinessdefinesXYZas...")

使用 SQL 语句训练

您还可以将 SQL 查询添加到训练数据中。如果您已经有一些查询,这会很有用。您只需从编辑器中复制并粘贴这些内容即可开始生成新的 SQL。

vn.train(sql="SELECTname,ageFROMmy-tableWHEREname='JohnDoe'")

Vanna 生成 SQL

你可以通过调用ask方法传入 Prompt 文本:

vn.ask("Whatarethetop10customersbysales?")

之后,您将获得对应的 SQL 语句:

SELECTc.c_nameascustomer_name,
sum(l.l_extendedprice*(1-l.l_discount))astotal_sales
FROMsnowflake_sample_data.tpch_sf1.lineitemljoinsnowflake_sample_data.tpch_sf1.orderso
ONl.l_orderkey=o.o_orderkeyjoinsnowflake_sample_data.tpch_sf1.customerc
ONo.o_custkey=c.c_custkey
GROUPBYcustomer_name
ORDERBYtotal_salesdesclimit10;

如果您已连接到 Vanna 提供的测试数据库,您将获得以下表格:

Vanna 还会自动生成绘图:

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



回复

使用道具 举报

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

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ