Vanna:讓 AI 幫你寫 SQL,資料分析新手也能輕鬆上手!
你是否曾經覺得資料庫裡面的資料就像一座金礦,但卻苦於沒有工具可以挖掘?每次想從資料庫撈點東西出來,都要面對複雜的 SQL 語法,實在是有看沒有懂?
現在,救星來了!今天要介紹一個超酷的 Python 函式庫叫做 Vanna。它就像一位 AI 資料分析師,只要你用自然語言提問,它就能自動生成 SQL 語法,並將結果呈現出來,讓你輕鬆駕馭資料,挖掘出隱藏在背後的寶藏。
什麼是 Vanna?
Vanna 是一個 MIT 授權的開源 Python 框架,專門用於 SQL 生成和相關功能。更精確地說,它是一個 RAG(Retrieval-Augmented Generation,檢索增強生成)框架。簡單來說,就是先讓 AI 模型學習你的資料庫結構和相關知識,然後你就可以用口語化的方式提問,AI 就會自動生成對應的 SQL 查詢語法,並執行它,最後把結果呈現給你。
- GitHub 連結:https://github.com/vanna-ai/vanna
- PyPI 連結:https://pypi.org/project/vanna/
- 官方文件:https://vanna.ai/docs/
- Guru 資料庫:https://gurubase.io/g/vanna
Vanna 的核心概念:RAG (檢索增強生成)
如果你對 RAG 這個詞感到陌生,別擔心!用更簡單的方式解釋:
- 訓練(Training): 想像你教一位新同事認識公司的資料庫。你告訴他每個表格的名稱、欄位有哪些、以及它們之間的關聯性。這個過程就是 Vanna 的「訓練」。Vanna 會學習你的資料庫結構、文件、以及現有的 SQL 語法。
- 提問(Asking): 當你需要從資料庫撈資料時,就像問你的新同事:「幫我找出上個月銷售額最高的十個客戶」。Vanna 會分析你的問題,根據它學到的知識,自動生成 SQL 查詢語法。
- 生成(Generation): Vanna 會執行生成的 SQL 查詢語法,並將結果以表格或圖表的方式呈現給你。
Vanna 的優點:
- 簡單易用: 即使你不懂 SQL,也能輕鬆使用。只要用自然語言提問,Vanna 就能幫你搞定一切。
- 高準確度: Vanna 的準確度取決於你提供的訓練資料。訓練資料越豐富,Vanna 生成的 SQL 語法就越準確。
- 安全私密: 你的資料庫內容不會被傳送到 LLM 或向量資料庫,SQL 執行都在你的本地環境進行,保障資料安全。
- 自我學習: Vanna 可以根據你成功執行的查詢語法自動訓練,讓未來的結果更準確。你也可以透過使用者回饋來改善 Vanna 的效能。
- 支援多種資料庫: Vanna 支援多種 SQL 資料庫,例如 PostgreSQL、MySQL、Snowflake 等。
- 彈性化的前端介面: 你可以使用 Jupyter Notebook、Streamlit、Flask 等不同的前端介面來與 Vanna 互動。
Vanna vs. Fine-Tuning:
你可能會想,既然 AI 這麼厲害,為什麼不直接用 Fine-Tuning(微調)的方式來訓練一個 SQL 生成模型呢?以下是 RAG 和 Fine-Tuning 的比較:
特性 | RAG (Vanna 使用的方式) | Fine-Tuning |
---|---|---|
模型可攜性 | 可跨 LLM 使用 | 綁定特定 LLM |
資料移除 | 容易移除過時的訓練資料 | 困難 |
成本 | 較低 | 較高 |
模型更新 | 容易更換新的 LLM | 需重新訓練 |
Prompt大小 | 對Prompt token數量較敏感 | 對Prompt token數量不敏感 |
簡單來說,RAG 具有更高的彈性、更低的成本、更容易維護。
開始使用 Vanna:
- 安裝:
pip install vanna
- 導入:
# 根據你的 LLM 和向量資料庫調整導入語法。以下是 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, config=None): ChromaDB_VectorStore.__init__(self, config=config) OpenAI_Chat.__init__(self, config=config) vn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'}) # 參閱官方文件取得更多選項
- 訓練:
你可以用 DDL 敘述、文件、或 SQL 查詢語法來訓練 Vanna。
- 使用 DDL 敘述:
vn.train(ddl=""" CREATE TABLE IF NOT EXISTS my_table ( id INT PRIMARY KEY, name VARCHAR(100), age INT ) """)
- 使用文件:
vn.train(documentation="我們的業務將 XYZ 定義為...")
- 使用 SQL 查詢語法:
vn.train(sql="SELECT name, age FROM my_table WHERE name = 'John Doe'")
- 使用 DDL 敘述:
- 提問:
vn.ask("銷售額最高的 10 個客戶是誰?")
Vanna 會生成 SQL 語法:
SELECT c.c_name as customer_name, sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales FROM snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c ON o.o_custkey = c.c_custkey GROUP BY customer_name ORDER BY total_sales desc limit 10;
並將結果以表格或圖表的方式呈現給你。
個人實作心得與錯誤排除指南:
在使用 Vanna 的過程中,我發現以下幾點值得注意:
- 訓練資料的品質至關重要: Vanna 的準確度高度依賴於訓練資料的品質。如果訓練資料不完整或不正確,Vanna 生成的 SQL 語法可能也會出錯。因此,在訓練 Vanna 之前,務必仔細檢查你的資料庫結構、文件、以及 SQL 查詢語法。
- 善用文件和範例: Vanna 的官方文件提供了豐富的資訊和範例。在使用 Vanna 遇到問題時,可以先查閱官方文件,或者參考範例程式碼。
- 逐步除錯: 如果 Vanna 生成的 SQL 語法不正確,可以逐步除錯。首先,檢查你的提問是否清晰明確。然後,檢查 Vanna 的訓練資料是否完整正確。最後,可以嘗試修改 Vanna 生成的 SQL 語法,看看是否能得到正確的結果。
- API Key 的設定: 如果你使用 OpenAI 等 LLM,請務必正確設定 API Key。
- 資料庫連線: 請確認你的程式可以成功連線到你的資料庫。
結語:
Vanna 是一個強大且易用的工具,可以幫助資料分析新手輕鬆駕馭資料庫,挖掘出有價值的資訊。無論你是資料分析師、工程師、還是產品經理,Vanna 都能成為你工作上的好幫手。趕快開始使用 Vanna,讓 AI 幫你寫 SQL 吧!
更多資源:
- 完整文件:https://vanna.ai/docs/
- 網站:https://vanna.ai
- Discord 群組:https://discord.gg/qUZYKHremx (如果連結失效,請到官網尋找最新的連結)
希望這篇文章能幫助你更了解 Vanna,並開始使用它來提升你的資料分析效率!
參考閱讀
https://github.com/vanna-ai/vanna