Vanna 구성하기 — LLM·DB·메모리·인증 설정

Vanna 구성하기 — LLM·DB·메모리·인증 설정

"자연어 질문 → SQL → 결과"를 만들려면 Vanna 에이전트를 구성해야 해요. 크게 네 가지를 정하면 돼요 — LLM, 데이터베이스, 에이전트 메모리, 사용자 인증. 이 예시는 Anthropic의 Claude와 SQLite를 조합한 흐름이에요.

출처: https://vanna.ai/docs/configure

패키지 설치

pip install 'vanna[anthropic,fastapi]'

LLM 구성

from vanna.integrations.anthropic import AnthropicLlmService

llm = AnthropicLlmService(
    model="claude-sonnet-4-5",
    api_key="sk-ant-..."  # 또는 os.getenv("ANTHROPIC_API_KEY")
)

데이터베이스 구성

SQL 실행을 담당하는 도구를 등록해요. 여기선 SQLite의 RunSqlTool을 써요.

from vanna.tools import RunSqlTool
from vanna.integrations.sqlite import SqliteRunner

db_tool = RunSqlTool(
    sql_runner=SqliteRunner(database_path="./your_database.db")
)

에이전트 메모리 구성

에이전트 메모리는 성공한 질문-SQL 쌍(더 일반적으로는 질문-도구인자 튜플)을 저장해서, 다음에 비슷한 질문이 오면 참고해 SQL을 처음부터 재생성하지 않아도 되게 해줘요. 이게 Vanna가 데이터베이스 스키마·업무 로직을 점점 학습하는 원리예요.

from vanna.tools.agent_memory import SaveQuestionToolArgsTool, SearchSavedCorrectToolUsesTool, SaveTextMemoryTool
from vanna.integrations.local.agent_memory import DemoAgentMemory
from vanna.core.registry import ToolRegistry

agent_memory = DemoAgentMemory(max_items=1000)
tools = ToolRegistry()
tools.register_local_tool(SaveQuestionToolArgsTool(), access_groups=['admin'])
tools.register_local_tool(SearchSavedCorrectToolUsesTool(), access_groups=['admin', 'user'])
tools.register_local_tool(SaveTextMemoryTool(), access_groups=['admin', 'user'])

사용자 인증 구성

사용자를 어떻게 식별·인증할지 정해요. 아래는 쿠키 기반으로 이메일에서 그룹 멤버십을 정하는 간단한 예시예요.

from vanna.core.user import UserResolver, User, RequestContext

class SimpleUserResolver(UserResolver):
    async def resolve_user(self, request_context: RequestContext) -> User:
        user_email = request_context.get_cookie('vanna_email') or '[email protected]'
        group = 'admin' if user_email == '[email protected]' else 'user'
        return User(id=user_email, email=user_email, group_memberships=[group])

user_resolver = SimpleUserResolver()

Agent로 묶기

구성 요소들을 Agent로 조립하면 완성돼요.

from vanna import Agent
from vanna.core.registry import ToolRegistry
from vanna.tools import VisualizeDataTool

# 등록된 tools + agent_memory + llm + user_resolver 로 Agent 생성

더 알아보기

다른 LLM 제공사(OpenAI·Azure·Gemini·Ollama)와 DB(SQLite 외) 조합은 공식 Configure 문서에서 선택해서 보면 돼요.