๋ชฉ๋ก์œผ๋กœ
GitHub - vanna-ai/vanna: ๐Ÿค– Chat with your SQL database ๐Ÿ“Š. Accurate Text-to-SQL Generation via LLMs using Agentic Retrieval ๐Ÿ”„.
Service2025.05.11

GitHub - vanna-ai/vanna: ๐Ÿค– Chat with your SQL database ๐Ÿ“Š. Accurate Text-to-SQL Generation via LLMs using Agentic Retrieval ๐Ÿ”„.

์š”์•ฝ

Vanna 2.0์€ Natural Language๋ฅผ SQL ๋ฐ ๋ฐ์ดํ„ฐ Insight๋กœ ๋ณ€ํ™˜ํ•˜๋Š” LLM ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์œผ๋กœ, Agentic Retrieval์„ ํ†ตํ•ด User-Aware ๊ถŒํ•œ, Row-Level Security ๋“ฑ ํ–ฅ์ƒ๋œ Enterprise ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๏ธ ์ด ์†”๋ฃจ์…˜์€ <vannaโˆ’chat><vanna-chat> ์›น ์ปดํฌ๋„ŒํŠธ ํ˜•ํƒœ์˜ ๋ชจ๋˜ Web UI๋ฅผ ๋‚ด์žฅํ•˜์—ฌ, ์‹ค์‹œ๊ฐ„ Streaming ๋ฐฉ์‹์œผ๋กœ ํ…Œ์ด๋ธ”, ์ฐจํŠธ, Progress Updates๋ฅผ ์ œ๊ณตํ•ด ํ’๋ถ€ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์„ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๏ธ Vanna 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(<vannaโˆ’chat><vanna-chat>)๋ฅผ ํ†ตํ•ด 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 ๋“ฑ ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ๊ธฐ๋Šฅ์˜ ๊ธฐ๋ฐ˜์ด ๋ฉ๋‹ˆ๋‹ค.

  • 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 ํ†ตํ•ฉ์„ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ๋™์ž‘์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์•„ํ‚คํ…์ฒ˜ ํ๋ฆ„ ์š”์•ฝ:

    User๋Š” Web Component(<vannaโˆ’chat><vanna-chat>)๋ฅผ ํ†ตํ•ด ์ž์—ฐ์–ด ์งˆ๋ฌธ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์งˆ๋ฌธ์€ ์ธ์ฆ ์ •๋ณด์™€ ํ•จ๊ป˜ 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 ๊ตฌ์ถ•์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

    ์›๋ณธ ๋ณด๊ธฐ
    GitHub
    Shared by Anonymous