Skip to content
Guides7 min read

에이전트 평가를 위한 Potato 대 LangSmith와 Langfuse: 실무 비교

에이전트 평가에서 LangSmith, Langfuse, Potato가 각각 무엇을 위해 만들어졌는지, 이들 사이에서 트레이스를 옮기는 방법, 그리고 인간의 판단을 어디에서 측정하는지 설명합니다.

Potato Team

LangSmith와 Langfuse는 프로덕션 환경의 LLM 애플리케이션을 트레이스하고 모니터링하기 위해 만들어졌습니다. Potato는 그 트레이스가 보여 주는 내용에 대해 구조화된 인간의 판단을 수집하고, 판단하는 사람들이 얼마나 일치하는지 측정하기 위해 만들어졌습니다. 둘 다 필요한 팀은 보통 관측성 도구에서 캡처하고 인간 평가 연구는 Potato에서 진행합니다.

세 도구는 비교가 자주 나올 만큼 겹치지만, 겹치는 지점은 하나뿐입니다. 세 도구 모두 기록된 에이전트 실행에 인간의 판단을 붙일 수 있습니다. 무엇을 중심으로 구성되어 있는지는 서로 다르고, 그 차이가 여러분이 던지는 질문에 어떤 도구가 맞는지를 결정합니다.

각 도구는 무엇을 위해 만들어졌나

LangSmith는 LLM 애플리케이션을 계측하고 트레이스하고 디버깅하며, LangChain 및 LangGraph와 가장 깊이 통합되어 있습니다. 이 프레임워크로 만든 애플리케이션의 트레이스는 별도 계측 없이 들어오고, 플랫폼은 실행 검사, 지연 시간과 비용 추적, 데이터셋에 대한 평가 실험 실행을 중심으로 구성되어 있습니다. 어노테이션 큐는 루브릭 피드백 키, 실행당 리뷰어 수 설정, 쌍대 비교 큐, 서로의 피드백을 볼 수 없는 리뷰어를 지원합니다.

Langfuse는 같은 영역을 오픈 소스로 다루며, 하나의 프레임워크가 아니라 모든 LLM 애플리케이션을 대상으로 하고 트레이싱과 함께 프롬프트 관리도 제공합니다. 점수는 트레이스 수준과 observation(span) 수준에서 매길 수 있고, 범주형 score config를 사용하면 고정된 레이블 집합을 정의하고 하나의 span에 이름 붙은 점수를 여러 개 붙일 수 있습니다.

Potato는 에이전트 트레이스로 확장된 어노테이션 플랫폼입니다. 애플리케이션이 아니라 연구를 중심으로 구성되어 있으므로, 기본 단위는 누가 무엇을 어노테이션하는지, 각 항목을 몇 명이 보는지, 의견이 갈리면 어떻게 되는지, 그리고 레이블이 의미가 있는지에 대해 일치도 통계가 무엇을 말하는지입니다. 에이전트 트레이스는 현재 릴리스가 등록한 61개 어노테이션 유형 가운데 하나의 항목 유형일 뿐이며, 그래서 어노테이터 간 일치도, 훈련 단계, 판정, 크라우드소싱을 에이전트용으로 새로 만들지 않고도 그대로 물려받습니다.

세 도구 중 어느 것도 추상적으로 더 낫지는 않습니다. 유용한 질문은 병목이 에이전트가 무엇을 했는지 보는 데 있는지, 아니면 그에 대해 수집하는 인간 레이블을 신뢰하는 데 있는지입니다.

도구 간에 트레이스 옮기기

Potato는 코드를 계측하지 않고 트레이스를 사후에 읽기 때문에, 15개 트레이스 형식에 대한 변환기를 등록해 둡니다.

bash
python -m potato.trace_converter --list-formats

목록에는 react, openai, anthropic, langchain, langfuse, multi_agent, mcp, otel, atif, webarena, web_agent, swebench, swe_agent_trajectory, claude_code, aider가 있습니다. 별도의 langsmith 변환기는 없으므로 LangSmith 실행 내보내기는 langchain 변환기를 거칩니다. CrewAI, AutoGen, LangGraph 로그는 multi_agent를 거칩니다.

내보낸 파일의 변환은 워크플로의 각 방향마다 명령 하나로 끝납니다.

bash
# LangSmith runs, exported from LangSmith, converted for annotation
python -m potato.trace_converter \
  --input langsmith_export.jsonl \
  --output data/traces.jsonl \
  --input-format langchain
 
# Langfuse traces, exported from Langfuse
python -m potato.trace_converter \
  --input langfuse_traces.json \
  --output data/traces.jsonl \
  --input-format langfuse

사용하는 프레임워크가 목록에 없으면 --auto-detect가 필드 시그니처를 보고 변환기를 고르고, 새 변환기는 BaseTraceConverter의 하위 클래스로 작성합니다. 감지는 처음 일치하는 변환기를 택하므로, 파일에 맞는 형식을 알게 되면 형식을 명시적으로 지정하세요.

트레이스는 내보내기 단계 없이 들어올 수도 있습니다. Potato의 트레이스 수집은 LangSmith 실행 페이로드 형식으로 /api/traces/*에 전송된 실행을 받아들이므로, LangChain 콜백이나 트레이싱 SDK가 실행이 일어나는 대로 어노테이션 큐에 밀어 넣을 수 있습니다.

yaml
trace_ingestion:
  enabled: true
  api_key: "your-api-key"
  notify_annotators: true

트레이스가 들어온 뒤 Potato가 더하는 것

어노테이션 플랫폼이 제 몫을 하는 곳은 스키마입니다. trajectory_eval은 정오 레이블, 하위 유형이 있는 계층적 오류 분류 체계, 가중치를 설정할 수 있는 심각도 수준, 누적 품질 점수를 하나의 트레이스에 붙는 하나의 스키마에 담습니다.

yaml
annotation_schemes:
  - annotation_type: trajectory_eval
    name: step_evaluation
    description: "Mark each step and classify anything that went wrong"
    steps_key: conversation
    step_text_key: text
    error_types:
      - name: execution
        subtypes: [wrong_tool, wrong_args, api_error]
    severities:
      - name: minor
        weight: -1
      - name: critical
        weight: -10
    show_score: true

트레이스를 비교할 때 중요한 부분은 심각도 가중치입니다. 표시된 단계를 단순히 세면 한 에이전트는 실수가 네 번, 다른 에이전트는 두 번이라는 것만 알 수 있고, 가중 점수는 그 네 번이 사소한 것이었고 두 번이 위험한 것이었는지를 알려 줍니다.

비교 평가는 pairwise 스키마로 하며, 모드는 세 가지입니다. 이진 모드는 클릭할 수 있는 타일 두 개와 선택적인 동점 버튼을 보여 주고, 척도 모드는 선택 대신 두 항목 사이에 슬라이더를 두며, multi_dimension 모드는 유용성, 정확성, 안전성처럼 이름 붙은 차원마다 독립적인 A/B 판정을 요청합니다.

코딩 에이전트에는 전용 표시가 있습니다. JSON 문자열로 읽는 통합 diff는 리뷰할 수 없기 때문입니다.

diff 렌더링을 갖춘 Potato의 코딩 트레이스 표시통합 diff 렌더링, 구문 강조, 파일 트리를 갖춘 Potato의 코딩 트레이스 표시

coding_trace 표시는 diff를 파일 트리와 함께 렌더링하고 긴 터미널 출력을 접어 두며, code_review 스키마는 설정 가능한 범주의 줄 단위 코멘트, 파일별 평가 차원, 풀 리퀘스트 방식의 판정을 수집합니다. 그다음 coding_eval 내보내기 도구가 프로세스 보상 모델 레이블, 코드 리뷰 어노테이션, DPO 선호 쌍, SWE-bench 호환 점수를 기록합니다. 대시보드가 필요로 하는 형태가 아니라 학습 데이터가 필요로 하는 형태입니다.

웹 에이전트 트레이스는 SVG 액션 오버레이가 있는 스크린샷과 필름스트립으로 렌더링됩니다.

스크린샷과 필름스트립이 있는 웹 에이전트 트레이스 뷰어SVG 액션 오버레이가 있는 스크린샷과 필름스트립 탐색을 보여 주는 웹 에이전트 트레이스 뷰어

멀티 에이전트 실행은 하나의 단계 흐름으로 평탄화되지 않고 전용 어노테이션 화면을 가집니다. 레지스트리에는 어노테이터가 편집할 수 있는 상호작용 그래프, 에이전트 간 실패 귀속, 핸드오프 리뷰, 에이전트별 및 팀별 스코어카드, 공유 타임라인상의 도구 경합, 창발적 행동 태깅을 위한 스키마가 있습니다. 체화 에이전트와 멀티모달 에이전트도 마찬가지로, 컴퓨터 사용 궤적, 전이중 음성 상호작용, 비디오 시간적 그라운딩이 독립된 스키마로 제공됩니다.

판단을 수집하는 데서 그치지 않고 측정하기

프로젝트에서 가장 늦게 드러나는 차이는 두 어노테이터의 의견이 갈린 뒤에 무슨 일이 일어나는가입니다. Potato는 불일치를 해결해야 할 갈등이 아니라 측정값으로 다루므로, 텍스트 어노테이션 연구가 쓰는 것과 같은 일치도 통계, 판정 큐, 훈련 단계, 골드 항목이 추가 설정 없이 에이전트 트레이스에도 적용됩니다. Potato의 자체 도구 비교는 2026-06-24 확인 기준으로, 트레이싱 플랫폼은 인간의 판단을 점수로 수집하도록 만들어졌고 그 판단에 대한 신뢰도 통계를 문서화한 곳은 없다는 점, 그리고 Langfuse는 같은 트레이스의 이전 어노테이션을 대체하므로 그곳에서 독립적인 이중 어노테이션을 하려면 우회 방법이 필요하다는 점을 기록하고 있습니다.

이는 평가가 곧 증거일 때 중요합니다. 검토되지 않은 단일 판단으로 만든 성공률에는 오차 막대가 없고, 기준이 흐트러진 리뷰어는 개선된 에이전트와 똑같아 보입니다.

실행 중인 에이전트 관찰하기

Potato는 녹화를 재생하는 대신 어노테이션 페이지 안에서 에이전트를 실행할 수도 있습니다. live_agent 블록은 비전 모델을 헤드리스 브라우저에 연결하고 세션을 어노테이터에게 스트리밍하며, 어노테이터는 세션을 일시 정지하거나 지시를 보내거나 수동 제어를 넘겨받을 수 있습니다.

yaml
live_agent:
  endpoint_type: anthropic_vision
  ai_config:
    model: claude-sonnet-4-20250514
    api_key: ${ANTHROPIC_API_KEY}
  max_steps: 30
  allow_takeover: true
  allow_instructions: true
 
instance_display:
  fields:
    - key: agent_trace
      type: live_agent
      label: "Live Agent Session"
      display_options:
        show_overlays: true
        show_filmstrip: true

사후 리뷰보다 이 설정이 수고할 가치가 있는 상황은 세 가지입니다. 파괴적인 동작 전에 실행을 멈추는 것은 기록된 트레이스로는 제공할 수 없는 안전 장치입니다. 실행 도중 사람이 제어를 넘겨받은 기록은 시연 데이터가 됩니다. 그리고 에이전트가 개입에서 어떻게 회복하는지 지켜보면 완료된 어떤 트레이스에도 담겨 있지 않은 질문에 답할 수 있습니다.

함께 운영하기

일반적인 프로덕션 구성은 둘 다 사용하며, 도구마다 원하는 것이 다르기 때문에 역할 분담이 깔끔합니다. LangSmith나 Langfuse로 에이전트를 계측하고 모든 실행을 트레이스합니다. 인간의 의견을 들을 가치가 있는 실행을 샘플링합니다. 보통은 실패, 엣지 케이스, 무작위 대조 표본입니다. 이를 Potato용으로 변환하고, 트레이스당 여러 어노테이터로 어노테이션 연구를 진행하고, 점수와 함께 일치도 보고서를 읽습니다. 오류 분류 체계의 집계를 개발에 다시 반영하면, 하위 유형 분포를 보고 하나의 체계적인 실패가 있는지 긴 꼬리인지를 알 수 있습니다.

bash
python -m potato.trace_converter \
  --input langfuse_failed_traces.json \
  --output data/traces_to_review.jsonl \
  --input-format langfuse
 
potato start config.yaml -p 8000

선택하기

애플리케이션이 LangChain이나 LangGraph로 만들어졌고 프로덕션 가시성이 필요하다면 LangSmith를 쓰세요. 계측 작업 없이 트레이스가 들어오고, 관리형 서비스라 인프라 문제도 사라집니다. 같은 가시성을 여러 제공자에 걸쳐 오픈 소스로 원하고, 프롬프트 버전 관리도 같은 도구에서 하고 싶다면 Langfuse를 쓰세요. 필요한 결과물이 근거를 댈 수 있는 인간 레이블 집합일 때, 연구에 항목당 여러 어노테이터와 일치도 수치가 필요할 때, 에이전트가 코딩, 멀티 에이전트, 체화 에이전트여서 트레이스에 전용 표시가 필요할 때, 또는 데이터가 자체 인프라에 머물러야 할 때는 Potato를 쓰세요. Potato는 GPL-3.0-or-later 라이선스의 자체 호스팅 도구이며, 좌석당 또는 트레이스당 비용이 없습니다.

여기 적은 LangSmith와 Langfuse에 관한 내용은 2026-06-24에 확인한 두 도구의 문서를 반영하며, 두 도구 모두 변경이 빠릅니다. 정정은 GitHub 저장소에서 환영합니다. 설정 자체는 에이전트 평가 가이드를, 원시 트레이스에서 내보낸 판단까지 이어지는 실제 예시는 AI 에이전트 평가하기를 참고하세요.