← 목록

Vanna AI (El estándar de la industria para Text-to-SQL)

devto 2026-07-04 원문 보기 ↗



Idea central: Vanna es uno de los frameworks de código abierto más utilizados en la actualidad para crear asistentes de SQL con IA. Funciona en dos pasos: primero entrenas un modelo de IA (o un índice vectorial) con tu esquema, documentación y consultas SQL reales pasadas, y luego genera código con una precisión quirúrgica.

Ventajas: Se conecta nativamente a Snowflake, BigQuery, PostgreSQL y MySQL. Incluye interfaces gráficas listas para usar en Slack o aplicaciones web.

Novedades de la versión 2.0

¿Cómo funciona? (Conceptos Clave)

  1. Resolutor de usuarios (User Resolver): Define cómo extraer la identidad del usuario de las solicitudes (cookies, JWT, etc.).
  2. Herramientas con reconocimiento de usuario: Las herramientas comprueban automáticamente los permisos en función de la pertenencia del usuario a grupos.
  3. Componentes de transmisión: El backend transmite componentes de interfaz de usuario estructurados (tablas, gráficos) al frontend en tiempo real.
  4. Interfaz de usuario web integrada: El componente predefinido <vanna-chat> lo renderiza todo a la perfección.

Ejemplo de Código (Configuración de producción con su autorización)

Aquí tienes un ejemplo completo de cómo integrar Vanna con tu aplicación FastAPI y tu sistema de autenticación existentes:

1. Backend (Python + FastAPI):

python
python
from fastapi import FastAPI
from vanna import Agent
from vanna.servers.fastapi.routes import register_chat_routes
from vanna.servers.base import ChatHandler
from vanna.core.user import UserResolver, User, RequestContext
from vanna.integrations.anthropic import AnthropicLlmService
from vanna.tools import RunSqlTool
from vanna.integrations.sqlite import SqliteRunner
from vanna.core.registry import ToolRegistry

App de FastAPI existente

app = FastAPI()

1. Define tu user resolver (usando TU propio sistema de auth)

class MyUserResolver(UserResolver):
async def resolve_user(self, request_context: RequestContext) -> User:
# Extraer desde cookies, JWTs, o sesión
token = request_context.get_header('Authorization')
user_data = self.decode_jwt(token) # Tu lógica existente

    return User(
        id=user_data['id'],
        email=user_data['email'],
        group_memberships=user_data['groups']  # Usado para permisos
    )

2. Configurar el agente con herramientas

llm = AnthropicLlmService(model="claude-3-5-sonnet")
tools = ToolRegistry()
tools.register(RunSqlTool(sql_runner=SqliteRunner("./data.db")))

agent = Agent(
llm_service=llm,
tool_registry=tools,
user_resolver=MyUserResolver()
)

3. Añadir las rutas de Vanna a tu aplicación

chat_handler = ChatHandler(agent)
register_chat_routes(app, chat_handler)

Ahora tienes listo el endpoint: POST /api/vanna/v2/chat_sse (streaming)

`

2. Frontend (Componente Web):

Simplemente agrega esta etiqueta HTML en tu página web. Funciona con React, Vue o HTML simple y utiliza tus cookies/JWT existentes:

HTML

sse-endpoint="/api/vanna/v2/chat_sse"
theme="dark">

Al hacer una pregunta en lenguaje natural, el componente frontend recibe por transmisión ( streaming ):

Herramientas Personalizadas
Puedes extender Vanna con herramientas específicas para tu caso de uso de negocio (por ejemplo, enviar un correo automático con los resultados):

Python
from vanna.core.tool import Tool, ToolContext, ToolResult
from pydantic import BaseModel, Field
from typing import Type

class EmailArgs(BaseModel):
recipient: str = Field(description="Email recipient")
subject: str = Field(description="Email subject")

class EmailTool(Tool[EmailArgs]):
@property
def name(self) -> str:
return "send_email"

@property
def access_groups(self) -> list[str]:
return ["send_email"] # Verificación de permisos

def get_args_schema(self) -> Type[EmailArgs]:
return EmailArgs

async def execute(self, context: ToolContext, args: EmailArgs) -> ToolResult:
user = context.user # Inyectado automáticamente por Vanna

# Tu lógica de negocio
await self.email_service.send(
    from_email=user.email,
    to=args.recipient,
    subject=args.subject
)

return ToolResult(success=True, result_for_llm=f"Email sent to {args.recipient}")




Registrar tu herramienta personalizada

tools.register(EmailTool())

Características Avanzadas y Casos de Uso

¿Para qué casos es ideal?

Flujo de Arquitectura (Sequence Diagram)

El siguiente flujo detalla el ciclo de vida de una solicitud en Vanna 2.0 desde que el usuario realiza la pregunta hasta que se renderizan los componentes visuales:

Comparativa rápida

Enfoque Complejidad Mejor para Herramientas clave
1. LLM + Python puro Baja Prototipos rápidos, scripts internos. API de OpenAI, sqlite3
2. Agentes (smolagents) Media-Alta Consultas complejas, autocorrección. Hugging Face, smolagents
3. Streamlit + HF Media Paneles para usuarios no técnicos Streamlit, transformers
4. RAG Dinámico Alta Entornos Enterprise con cientos de tablas BD Vectoriales, DB-GPT
5. Vanna AI Media-Alta Producción escalable, UI web lista y segura Vanna, FastAPI

Conclusiones y buenas prácticas.

Comunidad y Apoyo (Vanna Ecosystem)

Si decides inclinarte por la implementación de agentes empresariales con Vanna AI, aquí tienes los accesos directos a sus canales oficiales para resolver dudas de integración avanzada:

**Documentación completa* — Guías completas y referencia detallada de la API de Vanna.
Foros de discusión de GitHub — Espacio para sugerencias de nuevas funciones, extensiones y preguntas/respuestas de la comunidad.
Problemas de GitHub — Reportes de errores, fallos de conectores y seguimiento de parches.
Soporte empresarial — Soporte técnico directo vía support@vanna.ai.

Este post recopila y adapta ejemplos de fuentes públicas con fines educativos y de referencia para la comunidad de desarrolladores.

Ejemplos Oficiales de Inicio Rápido: GitHub - vanna-ai/vanna-boilerplate (Este repositorio contiene plantillas listas para clonar usando Flask, Streamlit o FastAPI, ideales para no empezar desde cero).

Componente Frontend Oficial (): GitHub - vanna-ai/vanna-components (El código fuente del componente web de interfaz gráfica que vimos en los diagramas si quieres modificar su diseño o comportamiento).

Notebooks de Jupyter con Ejemplos por Base de Datos: En la misma organización de GitHub tienen guías paso a paso en formato Notebook para configuraciones específicas:

Para conectar e instruir con Snowflake: Vanna Snowflake Notebook
Para conectar e instruir con BigQuery: Vanna BigQuery Notebook
Para entornos locales con SQLite: Vanna SQLite Notebook