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