🇧🇷 Glancer — Converse com seu banco de dados Rails em linguagem natural
개요
Glancer는 Rails 애플리케이션에서 자연어 질의를 통해 데이터베이스에 접근할 수 있게 해주는 Ruby on Rails 엔진입니다. RAG(Retrieval Augmented Generation)와 LLM(Large Language Model)을 활용하여 사용자가 직접 SQL 쿼리를 작성할 필요 없이 데이터베이스 정보를 얻을 수 있도록 지원합니다.
주요 내용
- 기능: 사용자가 자연어로 질문을 입력하면, Glancer는 시스템의 관련 문맥을 검색하고, ActiveRecord 쿼리(SELECT 문)를 생성, 검증, 안전하게 실행한 후 결과를 반환합니다. 예를 들어 "지난 30일간 주문 상태별로 집계된 주문 수는 몇 개인가요?"와 같은 질문에 대한 SQL 쿼리를 자동으로 생성하고 실행합니다.
- 구현:
-
Gemfile에glancer를 추가하고rails generate glancer:install,rails db:migrate,rails glancer:index:all명령어를 실행하여 설치 및 설정을 진행합니다. -
config/initializers/glancer.rb에서 LLM provider (Gemini, OpenAI, OpenRouter 등) 및 모델 설정을 구성합니다. RubyLLM gem을 기반으로 하므로 RubyLLM이 지원하는 모델을 사용할 수 있습니다. -
config/glancer/llm_context.glancer.md파일에 비즈니스 도메인에 대한 설명을 Markdown 형식으로 작성하여 LLM이 데이터베이스 스키마와 비즈니스 로직을 더 잘 이해하도록 돕습니다. - 보안:
- 모든 쿼리는 롤백되는 트랜잭션 내에서 실행됩니다.
- DELETE, UPDATE, INSERT, DROP 등의 위험한 키워드는 쿼리 실행 전에 차단됩니다.
- 읽기 복제본(read replica)을 지정하여 안전하게 쿼리를 실행할 수 있습니다.
- 인프라: 추가적인 인프라스트럭처(Pinecone, Weaviate 등) 없이 기존 데이터베이스의 JSON 컬럼을 사용하여 임베딩을 저장합니다.
- UI/UX:
- 결과는 CSV 내보내기 기능이 있는 테이블 형식으로 표시됩니다.
- 데이터의 의미에 따라 자동으로 그래프가 생성됩니다.
- 쿼리 실행 스레드가 애플리케이션의 메인 스레드를 차단하지 않도록 설계되었습니다.
-
@table_name을 사용하여 특정 테이블을 지정하거나, 생성된 SQL을 편집하고 재실행할 수 있습니다. 음성 입력 기능도 지원합니다. -
/glancer/db-schema경로에서 데이터베이스 스키마를 시각적으로 확인할 수 있습니다. - Blazer 연동: 기존에 Blazer gem을 사용하는 경우, Glancer는 생성된 SQL을 Blazer에서 바로 열 수 있는 버튼을 제공합니다.
- 개발 배경: RAG 및 LLM 연구를 바탕으로, Rails 팀 내에서 발생할 수 있는 데이터 조회 요청을 효율적으로 처리하기 위한 개인 연구 프로젝트로 시작되었습니다.
시사점
Glancer는 개발자가 아닌 팀원들도 SQL 쿼리 작성 없이 자연어로 데이터베이스 정보를 쉽게 조회할 수 있게 하여, 데이터 접근성을 향상시키고 비즈니스 의사결정 속도를 높일 수 있습니다. 추가 인프라 없이 기존 Rails 환경에 쉽게 통합될 수 있다는 장점이 있습니다.
원문을 불러오는 중...
댓글
GitHub Discussions