Cube와 LangChain: LLM 및 시맨틱 레이어를 활용하여 AI 경험 구축하기
요약
본 기사는 Cube의 시맨틱 레이어와 LangChain을 통합하여 LLM 기반 AI 애플리케이션 구축 방법을 소개합니다. 특히 시맨틱 문서 로더를 통해 데이터 모델에서 임베딩을 생성하고 벡터 DB에 저장함으로써, 자연어 질의를 SQL 쿼리로 정확하게 변환하는 과정을 설명합니다.
핵심 포인트
- Cube와 LangChain 통합으로 AI 앱 개발 용이성 확보
- 시맨틱 레이어는 LLM 환각 방지 및 정확성 보장
- 문서 로더로 데이터 모델 임베딩을 벡터 DB에 저장 가능
- 자연어 질의를 SQL 쿼리로 매칭하는 데 유용함
에디터 노트: 본 게시물은 Cube 팀과 협력하여 작성되었습니다. 시맨틱 레이어는 텍스트-투-SQL(text-to-sql) 기반 LLM 애플리케이션을 구축할 때 정확성과 예측 가능성을 보장하는 핵심적인 역할을 합니다. LangChain과의 통합은 Cube 시맨틱 레이어를 기반으로 AI 애플리케이션을 구축하는 것을 매우 쉽게 만들어줍니다.
오랜 시간 동안 우리는 데이터 중심의 세상에 살고 있으며, 데이터를 효율적으로 접근하고 통찰력을 도출하는 것이 가장 중요합니다. 올해는 특히 인공지능(AI)과 대규모 언어 모델(LLMs)에 대한 관심이 폭발적으로 증가했으며, 이는 기술의 최신 발전과 펼쳐지는 광범위한 관점들에 힘입은 것입니다.
LLM을 다루기 위한 포괄적인 툴킷인 LangChain은 AI 경험 개발자들에게 가장 중요한 빌딩 블록 중 하나가 되었습니다. Cube에서도 우리의 시맨틱 레이어가 AI 애플리케이션에 있어 중요한 빌딩 블록임을 알고 있습니다. 왜냐하면 Cube는 단순히 메트릭 계산을 중앙 집중화할 뿐만 아니라, AI 환각(hallucinations)에 대한 해독제 역할도 하기 때문입니다.
시맨틱 문서 로더 (Semantic document loader)
오늘 저희는 LangChain과의 Cube 통합을 발표하게 되어 기쁩니다. 이는 시맨틱 레이어의 데이터 모델에서 파생된 임베딩(embeddings)으로 벡터 데이터베이스를 채우기 위해 사용하도록 설계된 문서 로더로 제공됩니다. 이후 이 벡터 데이터베이스를 쿼리하여 시맨틱 레이어의 가장 적합한 엔티티를 찾을 수 있습니다. 이는 자연어 형태의 질의와 같은 자유 형식 입력을 데이터 모델 내의 뷰(views) 및 그 멤버들과 매칭하는 데 유용합니다.

또한, Cube의 SQL API로 쿼리를 구성하기 위한 예시 OpenAI 프롬프트를 포함한 채팅 기반 데모 애플리케이션을 제공하고 있습니다 (소스 코드는 GitHub에서 확인 가능). 만약 시맨틱 레이어에 대해 Delphi와 유사하게 작동하는 AI 기반 대화형 인터페이스를 만들고 싶다면, 이 프롬프트들이 좋은 시작점이 될 수 있습니다.
채팅 기반 데모 앱 분석
LangChain의 새로운 문서 로더, 벡터 데이터베이스, OpenAI의 LLM, 그리고 사용자 인터페이스를 위한 Streamlit을 사용하여 무엇을 구축할 수 있는지 살펴보겠습니다:
0:00/1×
LLM이 생성한 SQL 쿼리에 포함된 테이블, 컬럼, 집계 및 필터가 인간의 입력과 어떻게 일치하는지 확인해 보세요. GitHub의 README 파일을 참조하여 이 데모 애플리케이션을 사용자의 기기에서 실행하는 방법에 대한 안내를 얻거나 다음 하이라이트를 간략하게 살펴보세요.
Cube에서 메타데이터를 가져와 벡터 데이터베이스에 채우기. ingest.py 파일의 ingest_cube_meta 함수는 새로운 CubeSemanticLoader를 사용하여 Cube로부터 데이터 모델을 로드합니다. 뷰(view)만 로드된다는 점에 유의하세요. 뷰는 데이터 모델의
컬럼(Columns)
columns_question = "사용 가능한 모든 컬럼"
column_docs = vectorstore.similarity_search(
columns_question,
filter=dict(table_name=table_name),
k=15
)
프롬프트 구축 및 OpenAI 호출* OpenAI 대규모 언어 모델(LLM)은 구성된 프롬프트와 함께 호출되며, 응답은 SQL 쿼리와 관련된 필터 추출을 위해 파싱됩니다:
# 프롬프트 구성
prompt = CUBE_SQL_API_PROMPT.format(
input_question=question,
table_info=table_name,
columns_info=columns,
top_k=1000,
no_answer_text=_NO_ANSWER_TEXT,
)
llm_answer = llm(prompt + PROMPT_POSTFIX)

마무리하며(Wrapping up)
Cube가 LangChain과 통합되면서 자연어(natural language)를 사용하여 데이터를 쿼리하는 원활한 인터페이스를 제공합니다. SQL의 복잡성을 추상화하고 LLM의 강력한 기능을 활용함으로써, AI 경험을 구축하는 개발자들에게 데이터 접근에 있어 사용자 친화적이고 오류가 적은 방식을 제공합니다.
기업들이 LLM의 추론(reasoning) 능력과 함께 내부 지식을 올바르게 활용하는 것이 필수적입니다. Cube의 LangChain과의 시맨틱 레이어 통합은 대부분의 제품 회사들이 궁극적으로 이 추론 엔진들을 더 잘 구동하기 위해 LLM을 위한 스마트한 통합 코드를 작성할 것임을 보여주는 훌륭한 예시입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 LangChain Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기