STROT가 LLM 의도를 컴파일해 런타임 판단을 로컬 모델로 대체한다
STROT는 LLM에게 "무엇을 판단할지"를 한 번만 가르치고, 그 이후의 실제 판단은 로컬의 작은 모델이 처리하도록 만드는 파이썬 라이브러리다. 지원 티켓 분류, 위험 점수 산정, 워크플로 라우팅처럼 같은 스키마로 반복되는 작업에서 매 건마다 거대 모델을 호출하는 대신, 컴파일 시점에 의도를 고정해 두고 런타임에는 확률과 신뢰도가 붙은 타입 안전 JSON만 뽑아낸다. GitHub의 strot-ai/Project-STROT 저장소와 PyPI 패키지로 공개됐으며, arXiv:2505.01636 논문의 아이디어를 구현한 것이다.
컴파일은 의도당 한 번만 일어난다. 자연어로 적은 의도와 예시 레코드, 그리고 개발자가 이미 갖고 있는 정답 라벨을 넣으면 합성 단계에서 프롬프트와 핸들러, 프로젝션이 만들어진다. 이어 '골든 게이트'라 불리는 관문에서 알려진 정답을 통과해야 다음 단계로 넘어가고, 통과한 뒤에는 교사 모델이 샘플을 라벨링해 결정 모델을 캘리브레이션한다. 산출물은 콘텐츠 주소 기반 캐시에 저장되며, 스키마가 바뀌면 재컴파일이 정확히 한 번만 트리거된다.
런타임 경로는 짧다. 레코드가 들어오면 컴파일된 프로젝션을 거쳐 결정 모델로 향하고, 신뢰도 게이트를 통과한 것만 타입이 붙은 JSON으로 나온다. API는 두 갈래다. run()은 레코드를 액션으로 라우팅해 컴파일된 핸들러를 실행하고, decide()는 불리언·점수·선택지 형태의 질문에 레코드별로 답한다. 반환값에는 각 항목의 확률과 신뢰도가 함께 실린다.
공개된 벤치마크는 144M 파라미터의 SupersonicLabs/Julia-1 모델을 CPU에서 돌린 결과다. 398건의 그라운디드 라우팅 데이터셋에서 컴파일 경로는 92.5%, 단순 방식은 74.8%로 18%포인트 차이가 났다. 학습 때 보지 못한 라벨로 구성한 AG News 과제에서도 86.7% 대 72.7%로 14%포인트 앞섰다. 호스팅 결정 API의 예제와 비교한 감정 점수는 1.79 대 1.8로 사실상 같았다. 재현용 컨테이너와 손실(loss)까지 benchmarks/ 디렉터리에 함께 공개했다는 점이 눈에 띈다.
설계의 핵심은 런타임에 아무것도 생성하지 않는다는 점이다. 출력은 레지스트리에 정의된 선택과 계산의 결과일 뿐이라 구조적 환각이 생길 여지가 없다고 설명한다. 여기에 온도 스케일링과 분할 컨포멀 예측을 결합해, 실제로 처리된 건의 오답 비율이 α 이하가 되도록 맞추고 나머지는 판단을 보류한다. 골든 레코드 승격 절차도 있어, 알려진 정답을 통과하지 못한 아티팩트는 서비스에 투입되지 않는다.
최근 에이전트 기반 파이프라인의 골칫거리는 비용보다 변동성이다. 같은 입력에도 출력이 흔들리고, 지연이 들쭉날쭉하며, 모델 버전이 바뀌면 동작이 달라진다. STROT는 LLM을 컴파일러로만 쓰고 실행은 결정론적 런타임에 맡기는 쪽을 택했다. 에이전트는 컴파일 타임에만 존재하고 런타임에는 없다는 문구가 이 접근을 요약한다.
실무에서는 pip install strot-ai로 코어를 설치하고, [local]·[hosted]·[anthropic] 확장으로 각각 로컬 결정 모델, 호스팅 런타임, 합성용 모델을 붙인다. 코어는 표준 라이브러리만 쓰므로 의존성이 가볍다. 오프라인 배포는 prefetch_nlu()로 모델을 이미지에 굽고 환경변수로 경로를 지정하는 방식이다. 결정 모델은 nlu= 인자로 갈아끼울 수 있는 슬롯이라, 기본 Julia-1 대신 호스팅 API나 별도 전문 모델을 넣을 수 있다. 라이선스는 MIT이고 기본 결정 모델은 Apache-2.0이다.
주의할 점도 분명하다. 성능 수치는 144M급 소형 모델과 특정 데이터셋에서 나온 것이므로 도메인이 바뀌면 다시 검증해야 한다. 컨포멀 보장은 전체 건에 대한 주변(marginal) 보장이지 레코드 단위 보장이 아니며, 보류된 레코드는 결국 사람이나 다른 경로가 처리해야 한다. 또 파이썬 패키지 julia와 이름이 겹치므로 julia를 설치하면 안 된다는 안내를 문서에 명시하고 있다.