LLM으로 LLM을 디버깅하다: Claude Code × Langfuse로 트레이스 분석 환경 만들기

Langfuse를 들여다보는 나날들
LLM 기반 프로덕트를 운영하다 보면, Langfuse 대시보드를 들여다보는 시간이 늘어납니다.
저희 Neuradex에서는 AI 에이전트를 위한 메모리 플랫폼을 개발하고 있습니다. LLM을 많이 쓰다 보니, Langfuse로 트레이스를 모니터링하는 건 일상 업무의 일부입니다.
"이 트레이스, 왠지 응답이 느린데" "이 세션, 중간에 대화가 이상해졌어" "비용이 갑자기 올랐는데, 어떤 프롬프트 때문이지?"
문제 있는 트레이스를 찾아서, 입력과 출력을 비교하고, 프롬프트를 확인하면서 뭐가 잘못됐는지 추측합니다.
이 작업, LLM이 잘하는 영역 아닐까요?
그래서 Claude Code에 Langfuse를 읽게 해봤습니다. 결과적으로, LLM이 다른 LLM의 출력을 분석하고 문제점을 짚어주기 시작했습니다.
Claude Code × Langfuse Skills 구조
Claude Code에는 "Skills"라는 기능이 있습니다. 특정 태스크를 실행하기 위한 커스텀 명령어를 정의할 수 있는 기능입니다.
이걸로 Langfuse API를 호출하는 스킬을 만들었습니다.
/langfuse-trace-list # 트레이스 목록
/langfuse-trace-view # 트레이스 상세
/langfuse-session-list # 세션 목록
/langfuse-session-view # 세션 상세
/langfuse-prompt-list # 프롬프트 목록
/langfuse-prompt-view # 프롬프트 상세
/langfuse-prompt-upsert # 프롬프트 업데이트
/langfuse-model-list # 모델/비용 목록
이제 Claude Code한테 "Langfuse 데이터 좀 봐줘"라고 부탁할 수 있게 됩니다.
LLM이 다른 LLM의 실행 기록을 읽을 수 있게 된 것입니다.
실전: 이렇게 트레이스를 분석합니다
기본적인 플로우는 이렇습니다.
- Langfuse Console을 살펴봅니다
- 수상한 trace ID나 session ID를 발견합니다
- Claude Code에 그대로 전달합니다
- 분석시키고, 필요하면 수정까지
예시 1: 수상한 트레이스 진단하기
Langfuse에서 발견한 느린 트레이스. ID를 복사해서 Claude Code에 전달합니다.
이 trace ID 좀 봐줘: abc123-xxxx-yyyy
왠지 느린데, 원인 알겠어?
Claude Code는 /langfuse-trace-view로 트레이스 상세를 가져와서, 이런 식으로 답합니다.
이 트레이스, input tokens가 12,000 넘네요. system prompt에 들어간 예시가 너무 많아요. few-shot examples를 3개에서 1개로 줄이거나, 다른 방법을 검토하는 게 좋을 것 같습니다.
JSON을 보면서 "음, 토큰 수 많네" 하고 생각하는 것보다, 구체적인 개선안까지 제시해줍니다.
예시 2: 문제가 있는 세션 원인 분석
Langfuse에서 세션 목록을 보다가, 중간부터 대화가 이상해진 세션을 발견했습니다. 해당 세션 ID를 전달합니다.
이 session 좀 봐줘: session-xyz-789
중간부터 대화가 이상해진 것 같은데
Claude Code는 /langfuse-session-view로 세션 내 전체 트레이스를 가져옵니다. 시간순으로 대화 흐름을 따라가며 분석합니다.
5번째 턴에서, 유저가 한국어랑 영어를 섞어서 입력했네요. 여기서 LLM이 언어를 잘못 인식해서, 이후 답변이 영어 베이스가 돼버렸어요. system prompt에 언어 처리 규칙을 추가하거나, 언어 감지 단계를 넣는 게 좋겠습니다.
사람이 같은 분석을 하려면 각 턴의 input/output을 전부 읽어야 합니다. LLM은 한 번에 맥락을 파악합니다.
예시 3: 툴 콜 동작 분석하기
툴 콜 디버깅은 특히 까다롭습니다. 에러로 실패하면 그나마 알아차릴 수 있지만, "에러는 안 나는데 기대한 동작이 아닌" 패턴이 가장 추적하기 어렵습니다.
이 session 좀 봐줘: session-tool-unexpected-123
에러는 안 나는데, 검색 결과가 이상해
Claude Code는 세션 내 여러 트레이스에 걸쳐 툴 콜 흐름을 추적해서, 이런 식으로 답합니다.
3번째 트레이스에서
search_documents를 호출하는데, 인자query가 빈 문자열이네요. 2번째 트레이스의extract_keywords출력을 보면 키워드는 제대로 추출됐는데, 그걸query로 넘기는 부분에서 포맷이 어긋났어요. 프롬프트에서 출력 형식을 명시하거나, 파싱 처리를 점검하는 게 좋겠습니다.
에러가 안 나는 케이스는, 여러 트레이스의 JSON을 펼쳐서 "어디서 의도와 다른 값이 됐는지" 추적해야 합니다. LLM은 세션 전체를 보고 "여기서 값이 이상해졌어요"라고 흐름을 따라 짚어줍니다.
예시 4: 프롬프트 개선까지 맡기기
문제 원인이 프롬프트에 있다는 걸 알았으면, 그대로 수정을 맡길 수 있습니다.
이 프롬프트 개선해줘: my-chat-prompt
아까 그 언어 혼용 문제 안 생기게
Claude Code는 /langfuse-prompt-view로 현재 프롬프트를 가져와서 개선안을 제시합니다. OK면 /langfuse-prompt-upsert로 Langfuse에 바로 반영할 수 있습니다.
개발 환경 프롬프트를 업데이트하고, 문제가 안 생기는지 검증. 문제없으면 Langfuse Console에서 "Promote to Production"으로 프로덕션 반영. 이 루프가 대화만으로 완결됩니다.
왜 'LLM에게 LLM을 분석시키는 게' 효과적인가
1. 복잡한 JSON 구조 해석
Langfuse 트레이스 데이터는 중첩이 깊습니다. metadata, input, output, spans... 이걸 사람이 해독하는 건 꽤 고된 일입니다.
LLM한테 넘기면, 구조를 이해한 상태에서 핵심을 요약해줍니다.
2. 모호한 표현도 이해
"응답이 이상해" "왠지 느려" "비용이 높은 것 같아"
이런 애매한 표현을, LLM은 제대로 해석해줍니다. 구체적인 메트릭으로 바꿔서 문제를 특정해줍니다.
3. 대화하면서 분석을 심화
"그거, 좀 더 자세히" "다른 트레이스랑 비교해봐" "그럼 어떻게 고치면 돼?"
대화형으로 깊이 들어갈 수 있습니다. 대시보드 이것저것 클릭하는 것보다, 생각의 흐름대로 디버깅할 수 있습니다.
Skills는 쉽게 만들 수 있다
이번에 쓴 스킬들은, 기본적으로 Langfuse API를 래핑한 것뿐입니다.
# /langfuse-trace-view
trace ID를 받아서, Langfuse API에서 상세 정보를 가져옵니다.
결과를 Markdown으로 정리해서 반환.
Claude Code의 Skills는 자연어로 태스크를 정의할 수 있습니다. API 호출의 세부사항은 Claude Code가 해석해줍니다.
스킬 하나 만드는 데, 30분이면 충분합니다. 한 번 만들어두면, 팀 전원이 /langfuse-trace-view abc123으로 같은 기능을 사용할 수 있게 됩니다.
정리
- Langfuse 데이터를 Claude Code로 읽을 수 있게 만들었다
- 수상한 trace/session ID를 전달하면, LLM이 분석해준다
- 프롬프트 수정까지 그대로 맡길 수 있다
- LLM 디버깅을 LLM에게 맡기는 방식
LLM의 출력을 이해하는 데 LLM을 활용하는 건 합리적인 접근입니다. 같은 구조의 데이터를 다루니까요.
Neuradex에서는 이런 LLM 운영 노하우를 살려서, AI 에이전트가 더 효과적으로 동작할 수 있는 메모리 기반을 만들고 있습니다. LLM을 '사용'하는 것을 넘어 '운영'하는 시대. 그 환경 조성을 이어가겠습니다.