Langfuse를 스캔했습니다. 자체 플랫폼을 통해 자신의 LLM 호출을 관찰하고 있습니다.
요약
오픈 소스 LLM 관측성 플랫폼인 Langfuse의 아키텍처를 분석합니다. Langfuse는 자체 플랫폼을 사용하여 내부 LLM 호출을 추적하는 '독고다이(Dogfooding)' 방식을 채택하고 있으며, LangChain을 통해 다양한 LLM 제공업체를 통합 관리합니다.
핵심 포인트
- Langfuse는 자체 인제스션 파이프라인으로 내부 LLM 호출을 관측함
- Dogfooding 전략을 통해 제품의 신뢰성과 디버깅 능력을 확보함
- LangChain을 활용해 Anthropic, OpenAI 등 6개 모델을 통합 인터페이스로 제공함
- 플레이그라운드 및 LLM-as-judge 평가 시스템 구축에 활용됨
"오픈 소스 스캔(Scanning Open Source)" 시리즈의 세 번째 포스트입니다. 지금까지: Dub은 사기 엔진을 숨기고 있습니다. Inbox Zero는 프롬프트 인젝션(Prompt Injection) 방어 기능을 갖추고 있습니다. 패턴은 이렇습니다: 모든 프로젝트는 그들의 슬로건보다 아키텍처적으로 더 거대합니다.
오늘의 주제: Langfuse — 오픈 소스 LLM 관측성 (Observability) 플랫폼. YC W23. 8K+ 스타.
스캔
$ npx anatomia-cli scan .
langfuse web-app
...
5초 소요. 두 개의 접점(Surface) — 웹 앱(Web app)과 워커(Worker). 검증 경고(Validation warning)는 맥락을 이해할 가치가 있습니다: Langfuse는 tRPC를 광범위하게 사용하며, 검증은 라우터 계층의 .input() 스키마를 통해 이루어집니다. 스캐너는 파일 수준의 임포트(Import)를 확인하므로 미들웨어 기반의 검증은 감지하지 못할 수 있습니다. 실타래를 풀어내며 발견한 내용은 다음과 같습니다.
Langfuse는 자체 플랫폼을 통해 자신의 LLM 호출을 추적합니다
이 발견은 제가 멈춰 서서 코드를 다시 읽게 만들었습니다.
Langfuse는 플레이그라운드(Playground, 사용자가 다양한 모델을 대상으로 프롬프트를 테스트하는 곳) 및 LLM-as-judge 평가와 같은 기능을 구동하기 위해 내부적으로 LangChain을 사용합니다. 스캔 결과 AI: LangChain이 감지되었습니다. 하지만 흥미로운 점은 그들이 LangChain을 사용한다는 사실이 아닙니다. 그 호출들을 '어떻게' 추적하느냐 하는 점입니다.
getInternalTracingHandler.ts에서 Langfuse는 자신들의 오픈 소스 LangChain 통합 패키지인 langfuse-langchain을 사용하여 콜백 핸들러(Callback handler)를 생성합니다. 모든 내부 LLM 호출은 고객의 트레이스(Trace)를 처리하는 것과 동일한 인제스션 파이프라인(Ingestion pipeline)인 processEventBatch를 통해 흐릅니다. 관측성 도구가 자기 자신을 관측하고 있는 것입니다.
이것은 디버깅이 아닙니다. 아키텍처적 독고다이(Dogfooding)입니다. 팀 자체의 LLM 사용량이 고객들이 사용하는 것과 동일한 파이프라인을 통해 프로덕션 트레이스를 생성합니다. 만약 추적 기능이 고장 난다면, 고객이 보고하기 전에 그들 자신의 대시보드에서 먼저 이를 인지하게 될 것입니다.
하나의 추상화를 통한 6개의 LLM 제공업체
스캔 결과 AI SDK로 LangChain이 감지되었습니다. fetchLLMCompletion.ts의 임포트를 추적했을 때, 6개의 제공업체가 연결되어 있었습니다:
import { ChatAnthropic } from "@langchain/anthropic";
import { ChatVertexAI } from "@langchain/google-vertexai";
import { ChatBedrockConverse } from "@langchain/aws";
...
Anthropic, Google Vertex, AWS Bedrock, Google Generative AI, OpenAI, 그리고 Azure OpenAI까지 — 이 모든 것이 LangChain을 통해 통합 인터페이스 (unified interface)로 연결되어 있습니다. 이는 사용자가 다양한 모델에 대해 프롬프트 (prompt)를 테스트할 수 있는 플레이그라운드 (playground)와, LLM이 다른 LLM의 출력을 평가하는 평가 시스템 (evaluation system)을 구동하는 기반이 됩니다.
24개의 워커 큐 (worker queues)
스캔 결과 web과 worker라는 두 가지 영역이 감지되었습니다. 워커 (worker)에는 253개의 소스 파일과 24개의 별도 큐 프로세서 (queue processors)가 존재합니다: 데이터 수집 (ingestion), 평가 (evaluations), 실험 (experiments), 배치 내보내기 (batch exports), 데이터 보관 (data retention), 통합 (integrations) (PostHog, Mixpanel), OpenTelemetry 수집 (ingestion) 등이 포함됩니다. Langfuse는 트레이스 (traces)를 비동기적으로 처리합니다. 즉, 웹 앱 (web app)이 데이터를 수락하면, 워커 (worker)가 이를 처리, 집계, 평가 및 라우팅 (routing)합니다. 이러한 분리 구조 덕분에 트레이스 수집 (trace ingestion)이 대시보드 (dashboard)를 절대 차단하지 않습니다.
IDE에서 프롬프트 관리를 위한 MCP 서버
web/src/features/mcp/ 경로에 26개의 TypeScript 파일이 있습니다. Langfuse는 모델 컨텍스트 프로토콜 (Model Context Protocol, MCP) 서버를 제공합니다. 이를 통해 Claude Code 또는 기타 MCP 호환 도구에서 직접 프롬프트를 관리하고 관찰 데이터 (observation data)를 쿼리할 수 있습니다. 에디터를 떠나지 않고도 프롬프트를 생성하고, 버전을 관리하며, 라벨을 지정할 수 있습니다. 만약 프롬프트 관리를 위해 Langfuse를 사용하고 개발을 위해 Claude Code를 사용한다면, 이 기능은 두 도구 사이의 루프를 완성해 줍니다.
65개의 Prisma 모델이 알려주는 LLM 플랫폼의 실제 필요 요소
단순히 모델의 개수만이 핵심은 아닙니다. 중요한 것은 그 모델들이 '무엇'인가 하는 점입니다:
핵심 트레이싱 (Core tracing): 트레이스 (traces), 관찰 (observations), 세션 (sessions), 미디어 첨부 파일 (media attachments)
평가 (Evaluation): 평가 템플릿 (eval templates), 작업 구성 (job configurations), 작업 실행 (job executions), 점수 설정 (score configs)
사람의 검토 (Human review): 어노테이션 큐 (annotation queues), 큐 항목 (queue items), 큐 할당 (queue assignments)
프롬프트 관리 (Prompt management): 프롬프트 (prompts), 프롬프트 의존성 (prompt dependencies), 보호된 라벨 (protected labels), LLM 스키마 (LLM schemas), LLM 도구 (LLM tools)
자동화 (Automation): 자동화 (automations), 트리거 (triggers), 액션 (actions), 자동화 실행 (automation executions), 모니터 (monitors)
통합 (Integrations): PostHog, Mixpanel, Slack, 블롭 스토리지 (blob storage) — 각 항목마다 고유한 모델을 보유
어노테이션 큐 (annotation queue) 시스템은 주목할 만한 가치가 있습니다. 이는 Human-in-the-loop (인간 참여형) 검토 워크플로우로, 트레이스 (traces)를 검토자에게 할당하고, 설정 가능한 기준에 따라 점수를 매기며, 완료 상태를 추적합니다. 이는 "AI가 이렇게 말했다"와 "사람이 이것이 정확함을 확인했다" 사이를 잇는 가교 역할을 합니다. 대부분의 관찰성 (observability) 도구들은 대시보드 단계에서 멈춥니다. Langfuse는 AI 출력물에 대한 인간의 판단을 위한 구조화된 프로세스를 갖추고 있습니다.
이것이 시사하는 점
자가 추적 (self-tracing) 패턴은 모든 것을 하나로 묶는 실타래입니다. Langfuse는 플레이그라운드 (playground)와 평가 (evaluations)를 위해 LLM 호출을 실행합니다. 해당 호출들은 자체 수집 파이프라인 (ingestion pipeline)을 통해 흐르고, 자체 워커 큐 (worker queues)에 의해 처리되며, 자체 대시보드에서 확인할 수 있습니다. 만약 여러분이 관찰성 플랫폼으로서 Langfuse를 평가하고 있다면, 그들이 자신들의 AI 워크로드에 자신들의 제품을 신뢰하고 있다는 사실이 코드베이스에서 가장 강력한 신호입니다.
어노테이션 큐 (annotation queue) 시스템은 주목할 만한 두 번째 발견 사항입니다. 즉, 트레이스를 검토자에게 할당하고, 설정 가능한 기준에 따라 점수를 매기며, 완료 상태를 추적하는 Human-in-the-loop 검토 워크플로우입니다. 대부분의 관찰성 도구들은 대시보드 단계에서 멈춥니다. Langfuse는 "AI가 이렇게 말했다"와 "사람이 이것이 정확함을 확인했다" 사이의 가교를 구조화했습니다.
"Scanning Open Source" 시리즈의 3번째 포스트. 내일: Formbricks.
npx anatomia-cli scan . — GitHub
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기