GitHub - vanna-ai/vanna: ๐ค Chat with your SQL database ๐. Accurate Text-to-SQL Generation via LLMs using Agentic Retrieval ๐.
ํต์ฌ ํฌ์ธํธ
- 1Vanna 2.0์ Natural Language๋ฅผ SQL ๋ฐ ๋ฐ์ดํฐ Insight๋ก ๋ณํํ๋ LLM ๊ธฐ๋ฐ ์์คํ ์ผ๋ก, Agentic Retrieval์ ํตํด User-Aware ๊ถํ, Row-Level Security ๋ฑ ํฅ์๋ Enterprise ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- 2์ด ์๋ฃจ์ ์ `<vanna-chat>` ์น ์ปดํฌ๋ํธ ํํ์ ๋ชจ๋ Web UI๋ฅผ ๋ด์ฅํ์ฌ, ์ค์๊ฐ Streaming ๋ฐฉ์์ผ๋ก ํ ์ด๋ธ, ์ฐจํธ, Progress Updates๋ฅผ ์ ๊ณตํด ํ๋ถํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ์ฌํฉ๋๋ค.
- 3Vanna 2.0์ ๋ค์ํ LLM ๋ฐ Database์ ํธํ๋๋ฉฐ, ๊ธฐ์กด ์ธ์ฆ ์์คํ ๊ณผ์ ํตํฉ, ์ปค์คํ Tool ๋ฐ Lifecycle hooks๋ฅผ ํตํ ํ์ฅ์ฑ์ ์ ๊ณตํ์ฌ Production ํ๊ฒฝ์ ์ต์ ํ๋์์ต๋๋ค.
Vanna 2.0์ ์์ฐ์ด ์ง๋ฌธ์ SQL ์ฟผ๋ฆฌ๋ก ๋ณํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์์ฐ์ด ๋ต๋ณ ๋ฐ ์๊ฐํ๋ ๋ฐ์ดํฐ๋ก ์ ๊ณตํ๋ AI agent-based ์์คํ
์
๋๋ค. ์ด ๋ฒ์ ์ ํนํ ๊ธฐ์
ํ๊ฒฝ์์์ ๋ณด์, ํ์ฅ์ฑ ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ์ค์ ์ ๋๊ณ ์ฌ์ค๊ณ๋์์ต๋๋ค.
ํต์ฌ ๋ฐฉ๋ฒ๋ก ๋ฐ ๊ธฐ์ ์ ํน์ง:
Vanna 2.0์ ํต์ฌ์ Agent ๊ธฐ๋ฐ ์ํคํ
์ฒ์ user-aware ์์คํ
์
๋๋ค.
- Agent-based Architecture:
- ์ฌ์ฉ์์ ์์ฐ์ด ์ง์๋
Web Component()๋ฅผ ํตํดYour Server(FastAPI๋ก ๊ตฌํ ๊ฐ๋ฅ)๋ก ์ ๋ฌ๋ฉ๋๋ค. Your Server๋ ์์ฒญ์ ํฌํจ๋ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด(์: ์ฟ ํค, JWT)๋ฅผ ๊ธฐ๋ฐ์ผ๋กUser Resolver๋ฅผ ์ฌ์ฉํ์ฌUser๊ฐ์ฒด(ID, ์ด๋ฉ์ผ, ๊ทธ๋ฃน ๋ฉค๋ฒ์ญ ํฌํจ)๋ฅผ ์์ฑํฉ๋๋ค.- ์ด
User๊ฐ์ฒด๋Agent์๊ฒ ์ ๋ฌ๋์ด ๋ชจ๋ ํ์ ์์ ์context๋ก ํ์ฉ๋ฉ๋๋ค. Agent๋LLM service(์:AnthropicLlmService)์ToolRegistry๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ์ง์๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ฌ์ฉ์์ ์์ฐ์ด ์ง์๋
- User-Aware at Every Layer:
- User Resolver: ๊ฐ๋ฐ์๊ฐ ๊ธฐ์กด ์ธ์ฆ ์์คํ
(์ฟ ํค, JWT ๋ฑ)๊ณผ ์ฐ๋ํ์ฌ
RequestContext๋ก๋ถํฐ ์ฌ์ฉ์ ์ ์(User๊ฐ์ฒด)์ ์ถ์ถํ๋ ๋ก์ง์ ์ ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์์คํ ์ ์ฌ์ฉ์์identity์group memberships๋ฅผ ๋ช ํํ ์ธ์งํฉ๋๋ค. - User-Aware Tools:
Agent๊ฐ ํธ์ถํ๋ ๋ชจ๋Tool์ToolContext๋ฅผ ํตํด ํ์ฌ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์๋์ผ๋ก ๋ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด, SQL ์คํ์ ๋ด๋นํ๋RunSqlTool์ ์ฌ์ฉ์์ ๊ถํ(group memberships)์ ๊ธฐ๋ฐ์ผ๋กrow-level security๋ฅผ ์๋ ์ ์ฉํ์ฌ ํด๋น ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋ ๋ฐ์ดํฐ๋ง ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ํฌํจํ๋๋ก ํํฐ๋งํฉ๋๋ค. ์ฌ์ฉ์ ์ ์Tool๋ํaccess_groups์์ฑ์ ํตํด ์ ๊ทผ ๊ถํ์ ์ ์ํ๊ณ ,execute๋ฉ์๋ ๋ด์์user์ ๋ณด๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค. - Enterprise Security Features:
User-awareness๋audit logs(์ฌ์ฉ์๋ณ ์ฟผ๋ฆฌ ์ถ์ ),rate limiting(์ฌ์ฉ์๋ณ ์ฟผํฐ ๊ด๋ฆฌ),content filtering๋ฑ ๋ค์ํ ๋ณด์ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
- User Resolver: ๊ฐ๋ฐ์๊ฐ ๊ธฐ์กด ์ธ์ฆ ์์คํ
(์ฟ ํค, JWT ๋ฑ)๊ณผ ์ฐ๋ํ์ฌ
- Streaming Responses:
Agent๋ ์ฟผ๋ฆฌ ์คํ ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผStreaming Componentsํํ๋กWeb Component๋ก ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค. ์ฌ๊ธฐ์๋Progress Updates,SQL Code Block(๊ด๋ฆฌ์์๊ฒ๋ง ํ์ ๊ฐ๋ฅ),Interactive Data Table,Charts(Plotly ๊ธฐ๋ฐ ์๊ฐํ), ๊ทธ๋ฆฌ๊ณNatural Language Summary๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด๋Server-Sent Events (SSE)๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
- Extensible But Opinionated:
- Custom Tools: ๊ฐ๋ฐ์๋
Toolํด๋์ค๋ฅผ ์์๋ฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ง๋ ์๋ก์ดTool์ ์ ์ํ๊ณAgent์ ๋ฑ๋กํ ์ ์์ต๋๋ค. ๊ฐTool์pydantic๊ธฐ๋ฐ์args_schema๋ฅผ ์ ์ํ์ฌLLM์ด ํธ์ถํ ๋ ํ์ํ ์ธ์๋ฅผ ๋ช ํํ ํฉ๋๋ค.access_groups์์ฑ์ ํตํดTool์ ์ ๊ทผ ๊ถํ๋ ์ค์ ํ ์ ์์ต๋๋ค. - Lifecycle Hooks: ์์ฒญ ์ฒ๋ฆฌ ๊ณผ์ ์ ํน์ ์ง์ (์: ์ฟผํฐ ํ์ธ, ์ปค์คํ
๋ก๊น
, ์ฝํ
์ธ ํํฐ๋ง)์ ์ฌ์ฉ์ ์ ์ ๋ก์ง์ ์ฝ์
ํ ์ ์๋
hooks๋ฅผ ์ ๊ณตํฉ๋๋ค. - LLM Middlewares:
LLMํธ์ถ ์ ํ์ ์บ์ฑ, ํ๋กฌํํธ ์์ง๋์ด๋ง, ๋น์ฉ ์ถ์ ๋ฑ์ ๊ตฌํํ ์ ์๋middleware๊ณ์ธต์ ์ง์ํฉ๋๋ค. - Observability: ๋ด์ฅ๋
tracing๋ฐmetricsํตํฉ์ ํตํด ์์คํ ์ ๋์์ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค.
- Custom Tools: ๊ฐ๋ฐ์๋
์ํคํ ์ฒ ํ๋ฆ ์์ฝ:
User๋ Web Component()๋ฅผ ํตํด ์์ฐ์ด ์ง๋ฌธ์ ํฉ๋๋ค. ์ด ์ง๋ฌธ์ ์ธ์ฆ ์ ๋ณด์ ํจ๊ป Your Server๋ก POST ์์ฒญ๋ฉ๋๋ค. Your Server๋ User Resolver๋ฅผ ํตํด ์ฌ์ฉ์(User)๋ฅผ ์๋ณํ๊ณ , ์ด ์ ๋ณด๋ฅผ Agent์๊ฒ ์ ๋ฌํฉ๋๋ค. Agent๋ ์๋ณ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก Tools(์: RunSqlTool)๋ฅผ ํธ์ถํ์ฌ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์คํํฉ๋๋ค. ์ด๋ Tools๋ ์ฌ์ฉ์์ ๊ถํ์ ๋ฐ๋ผ row-level security๋ฅผ ์ ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ ์ดํฉ๋๋ค. ์ต์ข
์ ์ผ๋ก Agent๋ ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ(Table, Chart, Summary)๋ฅผ Web Component๋ก ์คํธ๋ฆฌ๋ฐํ๊ณ , Web Component๋ ์ด๋ฅผ ์ฌ์ฉ์์๊ฒ beautiful UI๋ก ํ์ํฉ๋๋ค.
Vanna 2.0์ ์ด๋ฌํ agent-based ๋ฐ user-aware ์ค๊ณ๋ฅผ ํตํด ๋ค์ํ LLM ๋ฐ Database์ ํธํ๋๋ฉฐ, ๊ธฐ์กด ์ธ์ฆ ์์คํ
๊ณผ ์ฝ๊ฒ ํตํฉ๋์ด ๋ฐ์ดํฐ ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
, ๋ฉํฐํ
๋ํธ SaaS, ๋๋ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์์ natural language interface ๊ตฌ์ถ์ ์ ํฉํฉ๋๋ค.