RAG做SQL生成處理表格,一個10.1k※的開源工具Vanna
我們在日常的工作中除了非結構化數據外,總會有一些表格數據感到很棘手不好拆分,做問答準確率也不高;例外還有一些結構化的數據需要處理,這個時候如果大模型能輸出結構化的查詢語句,那就很妙了。今天介紹一款在GitHub上面10.1k star的項目,感覺用起來很簡單。
這個倉庫名為Vanna,是一個開源項目,它是一個基于Python的RAG(Retrieval-Augmented Generation,檢索增強型生成)框架,專門用于SQL生成和相關功能。以下是該項目的主要特點和功能:
項目介紹
開源許可:Vanna是在MIT許可下發布的,這意味著它可以自由地被用于商業和非商業項目。
框架目的:它旨在通過使用大型語言模型(LLMs)來生成準確的SQL查詢,這些查詢可以自動運行在用戶的數據庫上。
圖片
運行流程圖
圖片
工作原理:Vanna的工作分為兩個簡單的步驟:
- 訓練訓練一個RAG模型到你的數據上。
- 提出問題,這些問題將返回可以設置為自動運行在你的數據庫上的SQL查詢。
圖片
用戶界面:項目提供了一些使用Vanna構建的用戶界面示例,包括Jupyter Notebook、Streamlit、Flask和Slack集成,用戶可以按原樣使用或作為自定義界面的起點。
環境搭建
運行所需要的依賴環境:
pip install vanna
模型加載
配置模型也非常簡單:
# The import statement will vary depending on your LLM and vector database. This is an example for OpenAI + ChromaDB
from vanna.openai.openai_chat import OpenAI_Chat
from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore
class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
def __init__(self, cnotallow=None):
ChromaDB_VectorStore.__init__(self, cnotallow=config)
OpenAI_Chat.__init__(self, cnotallow=config)
vn = MyVanna(cnotallow={'api_key': 'sk-...', 'model': 'gpt-4-...'})
# 使用自己的模型
# vn = MyVanna(cnotallow={'path': '/path/to/chromadb'})
模型訓練
添加參考數據向量化和入庫,用于檢索混合加入prompt. Vanna可以通過DDL語句、文檔和SQL查詢來訓練,這有助于模型理解數據庫的結構和業務術語。
添加DDL語句:
vn.train(ddl="""
CREATE TABLE IF NOT EXISTS my-table (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT
)
""")
添加文檔:
vn.train(documentatinotallow="Our business defines XYZ as ...")
添加SQL語句:
vn.train(sql="SELECT name, age FROM my-table WHERE name = 'John Doe'")
提問和生成SQL:用戶可以向訓練好的模型提問,模型將生成相應的SQL查詢代碼。
vn.ask("What are the top 10 customers by sales?")
RAG與微調(Fine-Tuning):Vanna使用RAG技術而不是傳統的微調,這使得它在跨不同LLMs的可移植性、數據更新的便捷性、運行成本和未來適應性方面具有優勢。
為什么選擇Vanna
- 在復雜數據集上具有高精度。
- Vanna 的能力與您提供給它的訓練數據相關聯
- 更多的訓練數據意味著對于大型和復雜的數據集,準確性更高
- 安全且私密。
- 您的數據庫內容永遠不會發送到 LLM 或向量數據庫
- SQL 執行在本地環境中進行
- 自學習。
- 如果通過 Jupyter 使用,您可以選擇在成功執行的查詢上“自動訓練”它
- 如果通過其他接口使用,您可以讓接口提示用戶提供有關結果的反饋
- 將存儲對 SQL 的正確問題以供將來參考,并使未來的結果更加準確
- 支持任何 SQL 數據庫。
- 該包允許您連接到任何 SQL 數據庫,否則您可以使用 Python 連接到這些數據庫
- 隨意選擇前端。
- 大多數人從 Jupyter Notebook 開始。
- 通過 Slackbot、Web 應用、Streamlit 應用或自定義前端向最終用戶展示。
6. 擴展性:
- Vanna設計用于連接任何數據庫、LLM和向量數據庫,項目提供了OpenAI和ChromaDB的實現,并且可以輕松擴展以使用自定義的LLM或向量數據庫。
# 項目地址
https://hub.yzuu.cf/vanna-ai/vanna
# 倉庫文檔
https://vanna.ai/docs/postgres-openai-standard-other-vectordb/