릴리스와 버전 관리

릴리스와 버전 관리 (Releases & Versioning)

Langfuse에서 LLM 앱의 변경이 메트릭에 미치는 영향을 추적할 수 있어요. 이를 통해 프로덕션에서 실험(A/B 테스트)을 실행하고 비용·지연시간·품질에 미치는 영향을 측정하거나, 시간에 따른 메트릭 변화를 설명할 수 있어요.

출처: 문서

본문

Langfuse에서 LLM 앱의 변경이 메트릭에 미치는 영향을 추적할 수 있어요. 이렇게 하면:

  • 프로덕션에서 실험(A/B 테스트)을 실행하고 비용·지연시간·품질에 미치는 영향을 측정할 수 있어요.
    • 예시: "새 모델로 전환하면 어떤 영향이 있을까?"
  • 시간에 따른 메트릭 변화를 설명할 수 있어요.
    • 예시: "이 체인의 지연시간이 왜 증가했을까?"

릴리스 (Releases)

SDK는 다음 순서로 release를 찾아요:

  1. SDK 초기화
  2. 환경 변수
  3. 인기 배포 플랫폼의 자동 설정 릴리스 식별자

초기화 (Initialization)

Python SDK

from langfuse import Langfuse

# Set the release when initializing the client
langfuse = Langfuse(release="v2.1.24")

다른 release가 설정되지 않으면 Langfuse SDK는 알려진 릴리스 환경 변수 집합을 기본으로 사용해요. 지원 플랫폼: Vercel, Heroku, Netlify. 지원 환경 변수의 전체 목록은 JS/TS와 Python을 참고하세요.

버전 (Versions)

flowchart LR

    A1[Generation<br/>name:guess-countries<br/>version:1.0]
    A2[Generation<br/>name:guess-countries<br/>version:1.1]

    A1 --> A2

version 파라미터는 모든 observation 유형(span, generation, event 및 기타 observation 유형)에 추가할 수 있어요. 이렇게 하면 Langfuse analytics로 특정 name을 가진 객체의 메트릭에 새 version이 미치는 영향을 추적할 수 있어요.

Python SDK

컨텍스트 내 모든 observation에 버전 설정:

from langfuse import observe, propagate_attributes

@observe()
def process_data():
    # Propagate version to all child observations
    with propagate_attributes(version="1.0"):
        # All nested operations automatically inherit version
        result = perform_processing()

        return result

observation을 직접 생성할 때:

from langfuse import get_client, propagate_attributes

langfuse = get_client()

with langfuse.start_as_current_observation(as_type="span", name="process-data") as span:
    # Propagate version to all child observations
    with propagate_attributes(version="1.0"):
        # All observations created here automatically have version="1.0"
        with span.start_as_current_observation(
            as_type="generation",
            name="guess-countries",
            model="gpt-4o"
        ) as generation:
            # This generation automatically has version="1.0"
            pass

특정 observation에 버전 설정:

from langfuse import get_client

langfuse = get_client()

with langfuse.start_as_current_observation(as_type="span", name="process-data", version="1.0") as span:
    # This span has version="1.0"
    pass

JS/TS SDK

컨텍스트 내 모든 observation에 버전 전파:

import { startActiveObservation, propagateAttributes } from "@langfuse/tracing";

await startActiveObservation("process-data", async (span) => {
  // Propagate version to all child observations
  await propagateAttributes(
    {
      version: "1.0",
    },
    async () => {
      // All observations created here automatically have version="1.0"
      const generation = startObservation(
        "guess-countries",
        { model: "gpt-4" },
        { asType: "generation" }
      );
      // This generation automatically has version="1.0"
      generation.end();
    }
  );
});

특정 observation에 버전 설정:

import { startObservation } from "@langfuse/tracing";

const generation = startObservation(
  "guess-countries",
  { model: "gpt-4" },
  { asType: "generation" }
);
generation.update({ version: "1.0" });
generation.end();

Langchain (Python)

from langfuse import propagate_attributes
from langfuse.langchain import CallbackHandler

handler = CallbackHandler()

# Propagate version to all observations created within the scope
with propagate_attributes(version="1.0"):
    chain.invoke({"input": "<user_input>"}, config={"callbacks": [handler]})

Langchain (JS)

import { CallbackHandler } from "@langfuse/langchain";

const handler = new CallbackHandler({
  version: "1.0",
});

Langfuse 인터페이스의 Version 파라미터

더 알아보기 (Learn more)