Arize Phoenix - LLM 관찰성 및 평가 치트시트
Arize Phoenix는 LLM 애플리케이션 및 에이전트를 위한 오픈소스 관찰성 및 평가 플랫폼입니다. OpenTelemetry 기반입니다: 계측이 표준 OTLP 추적을 내보내고 Phoenix가 수집하므로 모든 프롬프트, 모델 호출, 도구 호출, 검색 단계를 볼 수 있습니다. 그 후 평가를 실행할 수 있습니다. 로컬로 실행하며 (노트북, 컨테이너, 또는 자체 호스팅 서버), OpenInference 계측기를 통해 공통 프레임워크와 통합됩니다.
설치
| 방법 | 명령어 |
|---|
| pip | pip install arize-phoenix |
| 로컬 서버 실행 | phoenix serve (UI at http://localhost:6006) |
| Docker | docker run -p 6006:6006 arizephoenix/phoenix:latest |
| 노트북에서 | import phoenix as px; px.launch_app() |
| 계측 extras | pip install openinference-instrumentation-openai (및 기타) |
추적 빠른 시작
from phoenix.otel import register
# 추적기 공급자를 구성하고 Phoenix 수집기를 가리킵니다
tracer_provider = register(
project_name="my-llm-app",
endpoint="http://localhost:6006/v1/traces",
)
# 라이브러리 자동 계측 (예: OpenAI)
from openinference.instrumentation.openai import OpenAIInstrumentor
OpenAIInstrumentor().instrument(tracer_provider=tracer_provider)
# ...이제 당신의 LLM 호출이 Phoenix에서 추적으로 표시됩니다
| 개념 | 의미 |
|---|
| Span | 하나의 작업 (LLM 호출, 도구 호출, 검색 단계) |
| Trace | 하나의 요청에 대한 span의 트리 |
| Project | 추적의 명명된 컬렉션 |
| OpenInference | Phoenix가 OTLP 위에서 사용하는 의미론적 규칙 |
프레임워크 계측
| 라이브러리 | 계측기 패키지 |
|---|
| OpenAI | openinference-instrumentation-openai |
| LangChain | openinference-instrumentation-langchain |
| LlamaIndex | openinference-instrumentation-llama-index |
| Anthropic | openinference-instrumentation-anthropic |
| DSPy | openinference-instrumentation-dspy |
| 자동 (많음) | register(auto_instrument=True)를 통해 활성화 |
수동 Spans
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("retrieve") as span:
span.set_attribute("input.value", query)
docs = retriever(query)
span.set_attribute("retrieval.documents", len(docs))
평가
Phoenix는 추적 (특히 LLM-as-judge 평가)을 채점하고 결과를 첨부할 수 있습니다.
from phoenix.evals import llm_classify, OpenAIModel, HALLUCINATION_PROMPT_TEMPLATE
results = llm_classify(
dataframe=spans_df,
model=OpenAIModel(model="gpt-4o"),
template=HALLUCINATION_PROMPT_TEMPLATE,
rails=["factual", "hallucinated"],
)
| 평가 | 측정 대상 |
|---|
| Hallucination | 답변이 컨텍스트에 근거하는가? |
| QA correctness | 답변이 참조 대비 올바른가? |
| Relevance | 검색된 문서가 쿼리와 관련이 있는가? |
| Toxicity | 안전하지 않은/유독한 콘텐츠 |
| Custom | 당신의 LLM-as-judge 또는 코드 템플릿 |
데이터세트 및 실험
| 기능 | 사용 |
|---|
| Datasets | 추적에서 예제 입력/출력 선별 |
| Experiments | 데이터세트에서 작업을 실행하고 채점 |
px.Client().upload_dataset(...) | 프로그래밍 방식으로 데이터세트 생성 |
| Compare runs | 프롬프트/모델 변경 간 품질 추적 |
검색 디버깅
| 기능 | 도움말 |
|---|
| 검색된 문서의 Span 속성 | RAG가 정확히 무엇을 가져갔는지 확인 |
| Embedding/UMAP 뷰 | 임베딩 클러스터 및 드리프트 발견 |
| 검색 관련성 평가 | 쿼리별 검색 품질 정량화 |
Phoenix vs 기타 LLM 관찰성
| 측면 | Arize Phoenix | Langfuse | MLflow |
|---|
| 표준 | OpenTelemetry/OTLP | OTel + SDK | MLflow tracing |
| 포커스 | 추적 + 평가 + 검색 디버그 | 추적 + 프롬프트 + 평가 | 전체 ML 플랫폼 + LLM |
| 자체 호스팅 | 예 | 예 | 예 |
| 최고 용도 | OTel 기반 평가 & RAG 디버깅 | 제품 분석 + 프롬프트 | MLflow 이미 사용 중인 팀 |
리소스