반응형

1.Langfuse 란?

Langfuse는 오픈소스 LLM 옵저버빌리티(Observability) 플랫폼이에요.

AI 애플리케이션의 성능 모니터링, 추적(Tracing), 평가(Evaluation), 그리고 프로덕션 환경에서의 LLM 사용량 분석을 위한 종합적인 도구를 제공합니다.

 

Langfuse 의 주요 기능들.

추적 및 모니터링 - LLM API 호출의 전체 lifecycle 추적- 토큰 사용량, 응답 시간, 비용 분석- 멀티 에이전트 워크플로우의 단계별 추적- 실시간 성능 메트릭 대시보드
데이터 분석 - 프롬프트 성능 분석 및 최적화- 사용자 세션 및 대화 추적- A/B 테스트를 위한 프롬프트 버전 관리- 데이터 내보내기 및 외부 분석 도구 연동
품질 관리 - LLM 응답 품질 평가 및 점수화- 사용자 피드백 수집 및 분석- 모델 성능 회귀 탐지- 프로덕션 환경에서의 품질 모니터링

 

 

2.왜 Langfuse ?

구분문제점Langfuse 해결책

1. 프로덕션 환경에서의 가시성 확보 - LLM API 호출이 블랙박스처럼 작동하여 문제 원인 파악이 어려움- 토큰 사용량과 비용을 실시간으로 추적하기 어려움- 성능 병목지점을 식별하기 어려움 - 모든 LLM 호출의 상세 로그와 메트릭 제공- 실시간 비용 추적 및 예산 관리- 응답 시간, 처리량 등 성능 지표 모니터링
2. 멀티 에이전트 시스템의 복잡성 관리 - 여러 에이전트가 연동하는 워크플로우에서 각 단계별 성능 파악 어려움- 에러 발생 시 정확한 원인 위치 추적 어려움- 에이전트 간 데이터 흐름 파악 어려움 - 워크플로우의 전체 실행 경로 시각화- 각 에이전트별 성능 메트릭 분리 측정- 계층적 추적으로 복잡한 호출 체인 관리
3. 데이터 기반 최적화 - 프롬프트 성능을 정량적으로 평가하기 어려움- 사용자 만족도와 모델 응답 품질 상관관계 파악 어려움- 개선 효과를 객관적으로 측정하기 어려움 - 프롬프트별 성능 지표 자동 수집- 사용자 피드백과 모델 메트릭 연동 분석- A/B 테스트를 통한 개선 효과 검증
4. 비용 최적화 - LLM API 비용이 예상보다 높게 발생- 어떤 기능이 비용을 많이 소모하는지 파악 어려움- 비용 효율적인 모델 선택 기준 부재 - 기능별, 사용자별 세분화된 비용 분석- 모델별 cost-per-performance 비교- 비용 임계값 알림 및 예산 관리

3.Langfuse 아키텍쳐

 

4.구축해보기

환경

  • 쿠버네티스가 설치되어있는 환경
  • Kubectl 설치 및 연동이 되어있고, 배포 권한이 있어야 함

순서

#!/bin/bash

  

helm repo add langfuse-k8s https://langfuse.github.io/langfuse-k8s/

echo "repository added.."

  

helm repo update

echo "repository updated.."

  

LANGFUSE_VERSION="1.5.2"

SERVICE_NAME="langfuse"

VALUES_FILE="langfuse-value.yaml"

NAMESPACE="langfuse"

  

echo "install langfuse..."

helm install $SERVICE_NAME langfuse-k8s/langfuse -n $NAMESPACE \

--values $VALUES_FILE \

--version $LANGFUSE_VERSION

  

helm uninstall langfuse -n langfuse

 

 

처음 웹서버 파드를 띄우고 진입하면 회원가입을 해야 한다. 

 

Setting 부분에서 API 키를 발급받아 아래 연결을 위한 테스트 코드를 작성하고 실행한다.

연결 테스트를 위한 코드

```
from langfuse import Langfuse

from langfuse import observe, get_client

  

langfuse = Langfuse(

secret_key="secret-key",

public_key="pub-key",

host="http://000000000.ap-northeast-2.elb.amazonaws.com"

)

  

@observe

def my_function():

return "Hello, world!" # Input/output and timings are automatically captured

my_function()

# Flush events in short-lived applications

langfuse = get_client()

langfuse.flush()
```

 

그리고 아래 연동된 모습이다.

5.트러블 슈팅

- 에러 요약
    - worker pod 에서 redis 통신 에러 발생
    - web pod 에서 CrashLoopBackOff 발생
    - minIO 오류 발생
    - 설치 시 오류 발생
- 해결방법
    - chart value 값 내에 postgresql, clickhouse 의 password 지정
    - 워커파드의 수동 재시작 ( 아마 잘 working 하는 파드의 순서가 있는 모양인데, worker 파드가 먼저 띄워지면서 에러가 발생하는것으로 보임)
    - host 는 수동으로 셋팅하지 말것
    - minIO 값에 글로벌 설정 통일 및 ID, password 설정

반응형

+ Recent posts