链载Ai

标题: Text2SQL 效果不好?不要错过这个神器!自带 RAG、复杂数据集准确度高,还能自训练模型! [打印本页]

作者: 链载Ai    时间: 昨天 09:58
标题: Text2SQL 效果不好?不要错过这个神器!自带 RAG、复杂数据集准确度高,还能自训练模型!

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

近期热文

Vanna 主要特点

Vanna 工作流程

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

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

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

RAG vs Fine-Tuning

RAG

Fine-Tuning

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 (https://www.lianzai.com/) Powered by Discuz! X3.5