LOTUS: 데이터에 LLM과 에이전트 처리를 대규모로 적용하는 시맨틱 연산자 프레임워크

LOTUS 소개

LOTUS는 대규모 데이터셋에 LLM과 에이전트 기반 처리를 빠르고 안정적으로 적용하기 위한 프레임워크입니다. 문서 수천 건에서 특정 필드를 뽑거나, 코드베이스 전체를 훑어 버그를 찾거나, 에이전트 로그를 대량으로 분석하는 작업은 결국 "데이터셋의 모든 레코드에 대해 LLM을 반복 호출하는 일"로 귀결됩니다. 이때 호출을 어떻게 배치하고 어떤 모델을 언제 쓸지 직접 조율하지 않으면 정확도와 비용을 동시에 만족시키기 어렵습니다. LOTUS는 이 문제를 시맨틱 연산자(Semantic Operator)라는 선언적 추상화와 그것을 실행하는 옵티마이저로 풀어냅니다.

LOTUS는 스탠퍼드 대학교(Stanford University)와 UC 버클리(UC Berkeley) 연구진이 만들었으며, 시맨틱 연산자의 개념과 최적화 기법은 논문 "Semantic Operators: A Declarative Model for Rich, AI-based Analytics Over Text Data" (arXiv:2407.11418)와 후속 VLDB 논문에서 제시되었습니다. 즉 LOTUS는 단순한 래퍼 라이브러리가 아니라, LLM 기반 데이터 처리를 관계형 데이터베이스의 질의 최적화처럼 다루려는 연구를 코드로 구현한 결과물입니다.

핵심 아이디어는 "무엇을 할지"와 "어떻게 실행할지"를 분리하는 것입니다. 사용자는 자연어 지시와 함께 map, filter, reduce 같은 고수준 연산자로 원하는 처리를 선언하고, LOTUS 옵티마이저가 호출 배칭·모델 캐스케이드·지연 실행(lazy execution) 같은 기법으로 실행 계획을 결정합니다. 본 게시물에서는 LOTUS의 동작 방식, 두 종류의 시맨틱 연산자, 설치와 사용법, 그리고 저자가 공개한 최적화 결과를 정리합니다.

LOTUS의 동작 방식

LOTUS의 파이프라인은 네 단계로 요약됩니다. 데이터프레임·SQL·이미지·코드베이스·문서·텍스트 같은 코퍼스(corpus)를 입력으로 받고, 사용자는 이를 시맨틱 연산자로 선언적으로 프로그래밍합니다. 그러면 LOTUS 옵티마이저가 실행 방식을 결정하고, 더 높은 정확도와 더 낮은 비용으로 결과를 만들어냅니다.

여기서 옵티마이저가 담당하는 일이 LOTUS의 차별점입니다. 같은 시맨틱 연산이라도 옵티마이저는 여러 호출을 묶어 배칭하고, 쉬운 레코드는 저렴한 모델로 어려운 레코드만 강한 모델로 넘기는 모델 캐스케이드(model cascade)를 적용하며, 전체 파이프라인을 지연 계획(lazy planning)으로 구성합니다. 사용자는 실행 전략을 직접 짜지 않고 원하는 결과만 선언하면 됩니다.

LOTUS의 시맨틱 연산자

시맨틱 연산자는 데이터셋에 대한 LLM 기반 변환을 자연어 지시로 지정하는 단위입니다. 각 연산자는 데이터의 흐름을 그대로 두면서 내부 실행만 최적화할 수 있도록 설계되어 있습니다. 아래 그림은 대표적인 네 연산자가 문서(doc)를 LM에 통과시켜 결과를 만드는 방식을 보여줍니다.

  • sem_map 은 각 레코드를 변환합니다. 문서마다 요약·분류·재작성을 적용하는 식입니다.
  • sem_filter 는 조건(predicate)에 맞는 레코드만 남깁니다. 자연어로 표현된 판단 기준으로 걸러냅니다.
  • sem_agg 는 여러 레코드를 하나로 묶는 집계(reduce) 연산입니다. 다수의 문서를 하나의 결과로 종합합니다.
  • sem_join 은 두 집합을 조건에 따라 결합합니다.

LOTUS는 실행 스타일을 작업에 맞출 수 있도록 두 종류의 시맨틱 연산자를 제공합니다.

에이전트형 연산자(Agentic operators) 는 코퍼스 위에서 도구를 사용하는 에이전트를 실행합니다(corpus.agent(ops=["map", "filter", "reduce"], ...)). 여러 단계와 도구 호출이 필요한 복잡하거나 모호한 작업, 예를 들어 코드를 실제로 실행해 정확한 값을 계산하거나, 파일을 파싱하거나, 코드베이스를 훑는 작업에 적합합니다.

LLM형 연산자(LLM operators)sem_map, sem_filter, sem_agg, sem_join, sem_extract 등으로, 레코드당 훨씬 적은 수의 모델 호출을 사용합니다. LLM-as-judge 평가, 문서·속성 추출, 대규모 비정형 데이터 분석처럼 작업이 명확히 정의된 경우에 알맞습니다.

LOTUS 설치 및 사용법

LOTUS는 PyPI 패키지 lotus-ai로 배포됩니다.

pip install lotus-ai

모델은 LiteLLM이 지원하는 어떤 프로바이더든 사용할 수 있습니다. 아래는 저자가 제공하는 자체 완결형 예제로, 몇 개의 함수 코드 조각을 코퍼스로 삼아 각 함수를 샌드박스 REPL에서 실제로 실행해 버그를 찾은 뒤, 함수별 결과를 하나의 보고서로 종합(reduce)합니다.

import lotus
from lotus.models import LM
from lotus.tools import PythonREPLTool

# LM 설정 — 먼저 API 키를 export (예: export OPENAI_API_KEY=sk-...)
lotus.settings.configure(lm=LM(model="gpt-5", reasoning_effort="low"))

# 코퍼스는 인라인 문서, 데이터프레임, 파일, 하나의 긴 텍스트 모두 가능
snippets = [
    "def average(nums): return sum(nums) / (len(nums) - 1)",
    "def word_count(s): return len(s.split())",
    "def percent(part, whole): return part / whole",
    "def reverse(s): return s[::-1]",
]
corpus = lotus.Corpus.from_documents(snippets)

# 각 에이전트가 샌드박스 REPL에서 함수를 직접 실행해 버그를 찾고,
# LOTUS가 함수별 결과를 하나의 보고서로 종합
result = corpus.agent(
    task="Test each function on example inputs and report which ones are buggy, "
         "with a counterexample for each bug.",
    ops=["map", "reduce"],       # 에이전트형 연산 조합: map, filter, reduce
    tools=[PythonREPLTool()],
)

print(result.output)   # 종합된 버그 보고서

LOTUS는 코퍼스를 샤드(shard)로 나눈 뒤 샤드마다 에이전트를 병렬로 실행하고, 각 에이전트는 정확한 계산을 위해 샌드박스 Python REPL을 갖습니다. 그런 다음 샤드별 결과를 하나의 답으로 종합합니다.

LOTUS의 최적화 결과

저자가 공개한 결과 요약(results summary)에 따르면, LOTUS의 최적화된 파이프라인은 다양한 작업에서 고품질 베이스라인의 정확도를 따라가거나 넘어서면서 더 빠르고 저렴하게 동작합니다. 아래 차트는 세 가지 작업에 대한 정확도와 추론 비용을 베이스라인과 비교한 것입니다.

정확도(Accuracy) 축에서 에이전트 트레이스 분석은 21%에서 97%로, LLM-as-Judge는 70%에서 76.67%로, RAG 파이프라인은 60%에서 90%로 올라갑니다. 같은 작업의 추론 비용(Inference Cost)은 LLM-as-Judge에서 요청당 $0.11에서 $0.046으로, 에이전트 트레이스 분석에서 $0.05에서 $0.038로 낮아집니다. 정확도를 높이면서 비용을 함께 줄인다는 점이 이 결과의 핵심입니다.

LOTUS의 라이선스

LOTUS는 Apache License 2.0으로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.

:house: LOTUS 공식 홈페이지

:books: LOTUS 문서 사이트

:scroll: LOTUS 시맨틱 연산자 논문

:github: LOTUS 프로젝트 GitHub 저장소

더 읽어보기




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! 텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로도 새 글 알림을 받으실 수 있습니다. :smiley:

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: