릴리스와 버전 관리
릴리스와 버전 관리 (Releases & Versioning)
Langfuse에서 LLM 앱의 변경이 메트릭에 미치는 영향을 추적할 수 있어요. 이를 통해 프로덕션에서 실험(A/B 테스트)을 실행하고 비용·지연시간·품질에 미치는 영향을 측정하거나, 시간에 따른 메트릭 변화를 설명할 수 있어요.
출처: 문서
본문
Langfuse에서 LLM 앱의 변경이 메트릭에 미치는 영향을 추적할 수 있어요. 이렇게 하면:
- 프로덕션에서 실험(A/B 테스트)을 실행하고 비용·지연시간·품질에 미치는 영향을 측정할 수 있어요.
- 예시: "새 모델로 전환하면 어떤 영향이 있을까?"
- 시간에 따른 메트릭 변화를 설명할 수 있어요.
- 예시: "이 체인의 지연시간이 왜 증가했을까?"
릴리스 (Releases)
SDK는 다음 순서로 release를 찾아요:
- SDK 초기화
- 환경 변수
- 인기 배포 플랫폼의 자동 설정 릴리스 식별자
초기화 (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 파라미터