모델로 애플리케이션 버전 관리하기

모델로 애플리케이션 버전 관리하기 (Model)

LLM 애플리케이션을 만들다 보면 "이번 프롬프트 변경이 실제로 나아진 걸까?", "파라미터를 바꿨을 때 예측이 어떻게 달라졌지?" 같은 의문이 꼭 생겨요. Weave의 Model은 데이터와 코드를 하나로 묶어 애플리케이션의 버전을 구조적으로 관리하게 해 주는 개념이에요. 이 페이지에서는 Model을 정의하고, 호출해 입력·출력을 기록하고, 코드나 파라미터가 바뀌면 자동으로 버전이 올라가는 흐름까지 차근차근 살펴볼게요.

출처: Track application versions with models — W&B Weave 공식 문서

Model 정의하기

Weave에서 모델을 만들려면 다음 세 가지가 필요해요.

  • weave.Model을 상속받는 클래스
  • 모든 파라미터의 타입 정의
  • @weave.op() 데코레이터가 붙은, 타입이 명시된 predict 함수
from weave import Model
import weave

class YourModel(Model):
    attribute1: str
    attribute2: int

    @weave.op()
    def predict(self, input_data: str) -> dict:
        # Model logic goes here
        prediction = self.attribute1 + ' ' + input_data
        return {'pred': prediction}

모델은 평소처럼 호출하면 돼요.

import weave
weave.init('intro-example')

model = YourModel(attribute1='hello', attribute2=5)
model.predict('world')

이렇게 하면 predict()를 호출할 때마다 모델 설정과 입력·출력이 함께 기록돼요. 이제 버전이 붙은 Weave Model이 생기고, 이후 섹션에서 이 위에 기능을 하나씩 얹게 됩니다.

모델의 자동 버전 관리

모델을 정의하는 파라미터나 코드가 바뀌면 Weave가 그 변경을 기록하고 버전을 올려줘요. 덕분에 서로 다른 버전의 예측 결과를 비교할 수 있게 되죠. 프롬프트를 반복하거나 다른 LLM을 시도해 보면서 설정값별 예측을 비교할 때 특히 유용해요.

예를 들어 이렇게 새 모델을 만들면:

import weave
weave.init('intro-example')

model = YourModel(attribute1='howdy', attribute2=10)
model.predict('world')

UI에서 이 모델의 버전이 두 개로 나뉘어, 각각 다른 호출 기록을 담고 있는 걸 확인할 수 있어요.

모델 서빙하기 (Serve)

모델을 서빙하면 predict 함수를 HTTP로 노출하게 돼요. 다른 애플리케이션에서 테스트하거나, 코드를 공유하지 않고 팀원에게 나눠줄 때 편리해요. Weave 모델의 FastAPI 서버를 띄우려면 [MODEL-REF]를 모델 레퍼런스로 바꿔서 실행하면 됩니다.

weave serve [MODEL-REF]

자세한 내용은 serve 문서를 참고해 주세요.

프로덕션 호출 추적하기

모델을 둘 이상의 환경에서 쓰기 시작하면, 프로덕션 트래픽을 개발이나 평가 실행과 분리해서 분석하고 싶어져요. 프로덕션 호출을 구분하려면 예측 값에 속성(attribute)을 추가해서 UI나 API에서 필터링하면 됩니다.

with weave.attributes({'env': 'production'}):
    model.predict('world')

이렇게 하면 환경별로 호출을 나눠서 볼 수 있어요.

더 알아보기