LLM 프롬프트 A/B 테스트
LLM 프롬프트 A/B 테스트 (A/B Testing of LLM Prompts)
Langfuse 프롬프트 관리는 프롬프트의 다른 버전에 라벨을 붙여(예: prod-a, prod-b) A/B 테스트를 가능하게 해요. 애플리케이션이 이 버전들 사이를 무작위로 오가며, Langfuse는 각 버전의 응답 지연, 비용, 토큰 사용량, 평가 지표 같은 성능 메트릭을 추적해요.
출처: 문서
본문
A/B 테스트를 언제 하나요?
A/B 테스트는 데이터셋에서 테스트해 배운 것에 더해, 서로 다른 프롬프트 버전이 실제 상황에서 어떻게 동작하는지 보여줘요. 다음 경우에 가장 잘 맞아요:
- 앱이 성공을 잘 측정하고, 다양한 종류의 사용자 입력을 다루며, 성능의 기복을 감당할 수 있을 때. 보통 실수가 큰 문제가 아닌 소비자용 앱에 해당돼요.
- 테스트 데이터에서 철저히 테스트한 뒤, 전체 사용자에게 내보내기 전에 소규모 사용자 그룹에게 변경 사항을 먼저 시도하고 싶을 때(canary 배포라고도 해요).
구현
프롬프트 버전에 라벨 붙이기
테스트를 위해 서로 다른 변형을 식별하도록 프롬프트 버전에 라벨을 붙여요(예: prod-a, prod-b).
프롬프트 가져오기 및 A/B 테스트 실행
Python SDKJS/TS SDK
from langfuse import get_client
import random
from langfuse.openai import openai
# Requires environment variables for initialization
from langfuse import get_client
langfuse = get_client()
# Fetch prompt versions
prompt_a = langfuse.get_prompt("my-prompt-name", label="prod-a")
prompt_b = langfuse.get_prompt("my-prompt-name", label="prod-b")
# Randomly select version
selected_prompt = random.choice([prompt_a, prompt_b])
# Use in LLM call
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": selected_prompt.compile(variable="value")}],
# Link prompt to generation for analytics
langfuse_prompt=selected_prompt
)
result_text = response.choices[0].message.content
import { LangfuseClient } from "@langfuse/client";
import { observeOpenAI } from "@langfuse/openai";
import OpenAI from "openai";
// Requires environment variables for initialization
const langfuse = new LangfuseClient();
// Create and wrap OpenAI client
const openai = observeOpenAI(new OpenAI());
// Fetch prompt versions
const promptA = await langfuse.prompt.get("my-prompt-name", {
label: "prod-a",
});
const promptB = await langfuse.prompt.get("my-prompt-name", {
label: "prod-b",
});
// Randomly select version
const selectedPrompt = Math.random() < 0.5 ? promptA : promptB;
// Use in LLM call
const completion = await openai.chat.completions.create({
model: "gpt-3.5-turbo",
messages: [
{
role: "user",
content: selectedPrompt.compile({ variable: "value" }),
},
],
// Link prompt to generation for analytics
langfusePrompt: selectedPrompt,
});
const resultText = completion.choices[0].message.content;
프롬프트를 가져오고 사용하는 추가 예시는 프롬프트 관리 문서를 참고하세요.
결과 분석
Langfuse UI에서 각 프롬프트 버전의 메트릭을 비교하세요:
비교 가능한 주요 메트릭:
- 응답 지연과 토큰 사용량
- 요청당 비용
- 품질 평가 점수
- 직접 정의한 커스텀 메트릭
관련 자료
- 데이터셋에서 (프롬프트 선택만이 아닌) 전체 애플리케이션 동작을 벤치마킹하려면 Experiments를 사용하세요.