 SQL 上手全記錄)
不寫 SQL 也能查庫Vanna 2.0 自然語言轉(zhuǎn) SQL 上手全記錄【免費(fèi)下載鏈接】vanna Chat with your SQL database . Accurate Text-to-SQL Generation via LLMs using Agentic Retrieval .項(xiàng)目地址: https://gitcode.com/GitHub_Trending/va/vanna運(yùn)營在群里問上個月銷售額 Top 10 的客戶是誰你要么手寫 SQL 截圖丟回去要么打開 BI 面板翻半天。Vanna 2.0 想替代的就是這個環(huán)節(jié)把自然語言問題交給大模型翻譯成 SQL執(zhí)行后把表格、圖表流式吐回給提問的人。一句話定位它是庫不是服務(wù)Vanna 是一個 Python 框架核心鏈路是自然語言 → SQL → 數(shù)據(jù)答案靠 RAG 檢索把表結(jié)構(gòu)、文檔、歷史 SQL 塞進(jìn)提示詞來提高生成準(zhǔn)確率。它適合兩類人想給產(chǎn)品加自然語言查數(shù)入口的開發(fā)者需要按用戶身份過濾數(shù)據(jù)的多租戶或企業(yè)團(tuán)隊(duì)。注意它不是開箱即用的 SaaS——pip install vanna之后它是一個嵌進(jìn)你自己 FastAPI/Flask 應(yīng)用的庫。15 行代碼跑通最小示例裝包后把 SQLite 查詢工具注冊進(jìn) Agent 即可LLM 可換成 OpenAI、Anthropic、Ollama 等十幾種實(shí)現(xiàn)# pip install vanna from vanna import Agent, User from vanna.core.registry import ToolRegistry from vanna.tools import RunSqlTool from vanna.integrations.sqlite import SqliteRunner from vanna.integrations.anthropic import AnthropicLlmService tools ToolRegistry() tools.register(RunSqlTool(sql_runnerSqliteRunner(Chinook.sqlite))) agent Agent(llm_serviceAnthropicLlmService(), tool_registrytools) user User(idu1, usernamealice, permissions[]) async for comp in agent.send_message( useruser, message列出數(shù)據(jù)庫里所有的表, conversation_idc1): print(comp)跑完你會在終端依次看到思考進(jìn)度、生成的 SQL 代碼塊、查詢結(jié)果表最后是一段自然語言總結(jié)。整個過程里 LLM 并沒有背下你的庫而是一次次調(diào)用 run_sql 工具。為什么生成的 SQL 比裸大模型靠譜它解決大模型不知道你的表長什么樣的問題做法是訓(xùn)練 檢索兩段式先把建表 DDL、字段文檔、參考 SQL 語句生成嵌入存進(jìn)向量庫提問時按語義搜出最相關(guān)的表和示例拼進(jìn)提示詞再讓模型寫 SQL。表越多、業(yè)務(wù)黑話越重這一步收益越大——只把 schema 丟給模型裸跑和喂了上下文示例再跑準(zhǔn)確率差距在倉庫的論文報(bào)告里有實(shí)測對比可看 papers/ai-sql-accuracy-2023-08-17.md。別問向量檢索細(xì)節(jié)問就是黑盒你只需要把 DDL 和常跑的 SQL 喂給它訓(xùn)練。讓不同角色看到不同數(shù)據(jù)這是 Vanna 2.0 相對 1.x 最實(shí)際的改動用戶身份貫穿系統(tǒng)提示詞、工具執(zhí)行、SQL 結(jié)果三層。你只需要實(shí)現(xiàn)一個 UserResolver從 JWT 或 cookie 里解析出用戶和所屬組class MyUserResolver(UserResolver): async def resolve_user(self, request_context): data self.decode_jwt(request_context.get_header(Authorization)) return User(iddata[id], emaildata[email], group_membershipsdata[groups])group_memberships是權(quán)限的鑰匙工具按組做訪問檢查沒權(quán)限的工具對該用戶直接不可見SQL 工具按用戶權(quán)限做行級過濾管理員才看得到 SQL 代碼塊每次查詢還會留下審計(jì)記錄。按用戶限流、配額控制則掛在生命周期鉤子上鉤子基類在 src/vanna/core/lifecycle/base.py。走查一遍 接進(jìn)現(xiàn)有網(wǎng)站后端用 FastAPI 時把 Vanna 的聊天路由注冊到你已有的 app 上就得到一個/api/vanna/v2/chat_sse流式端點(diǎn)。前端一行搞定支持 React、Vue 或原生 HTMLvanna-chat sse-endpoint/api/vanna/v2/chat_sse/vanna-chat之后用戶體驗(yàn)是問一句按銷售額給我 Top 10 客戶頁面先流式顯示處理進(jìn)度然后出現(xiàn)可交互的數(shù)據(jù)表最后跟一張 Plotly 柱狀圖。倉庫里這張圖就是可視化工具對 Chinook 示例庫跑出來的產(chǎn)出邊界什么場景合適什么場景別用它適合內(nèi)部數(shù)據(jù)分析入口、多租戶 SaaS 的按身份過濾數(shù)據(jù)、以及已有認(rèn)證體系想快速掛一個聊天查數(shù)界面的團(tuán)隊(duì)。不太適合的超復(fù)雜多表關(guān)聯(lián)報(bào)表準(zhǔn)確率取決于你訓(xùn)練的示例質(zhì)量業(yè)務(wù)語義越重越要喂足夠的參考 SQL高并發(fā)在線服務(wù)每次提問都現(xiàn)場生成并執(zhí)行 SQL不是預(yù)編譯查詢以及只想要個聊天框、不想維護(hù) Python 服務(wù)的場景——前端組件再省后端 Agent 服務(wù)還是得你自己跑。具體支持哪些數(shù)據(jù)庫和 LLM看 src/vanna/integrations/ 目錄下的集成清單。如果你從 0.x 升級先讀 MIGRATION_GUIDE.md 里的 LegacyVannaAdapter 過渡方案?!久赓M(fèi)下載鏈接】vanna Chat with your SQL database . Accurate Text-to-SQL Generation via LLMs using Agentic Retrieval .項(xiàng)目地址: https://gitcode.com/GitHub_Trending/va/vanna創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考