LangSmith로 트레이싱을 계측하는 실습 중, 워크플로우의 LLM 응답은 정상 출력되는데 트레이스 전송만 403 에러로 실패했다.
Failed to multipart ingest runs: langsmith.utils.LangSmithError: Failed to POST https://api.smith.langchain.com/runs/multipart in LangSmith API. HTTPError('403 Client Error: Forbidden for url: https://api.smith.langchain.com/runs/multipart', '{"error":"Forbidden"}\n')
LangSmith API 키를 잘못 넣었나 싶어서 키를 재발급 받고, 커널 재시작 후 다시 워크플로우를 실행해봤다.
=> 결과 똑같음. 또 403 에러가 떴다.
프로젝트 생성이 안되어 있어서 그런가? 싶어서 LangSmith - Tracing 탭에 직접 프로젝트 생성 후 다시 워크플로우 실행했다.
=> 여전히 똑같은 오류가 발생. 또또 403에러가 떴다.
답답해서 클로드 코드한테 물어봤더니 드디어 진짜 원인을 찾았다!
가입할 때 리전을 APAC으로 선택해서, LangSmith 대시보드 주소가 https://apac.smith.langchain.com/였다.
그런데 langsmith 라이브러리가 기본으로 쓰는 엔드포인트는 미국(api.smith.langchain.com)이었던 것 — 이 리전 불일치가 403의 진짜 원인이었다!
.env에 아래 한 줄을 추가했더니 바로 해결됐다.
LANGSMITH_ENDPOINT=https://apac.api.smith.langchain.com
에러가 발생해서 순간적으로 당황했다.
옆에서는 다 실습 하고 있는데 왜 나만 안되지.. 뭐가 문제지ㅠㅠ
잠깐동안 삽질을 했지만,
에러 메시지를 잘 읽어보면 이미 단서가 나와 있었다.
에러 메시지에 찍힌 주소(api.smith.langchain.com)와 내가 로그인해 있던 LangSmith 대시보드 주소(apac.smith.langchain.com)를 나란히 놓고 보니, 둘이 다른 리전이라는 게 바로 보였다.
앞으로 LangSmith뿐 아니라 리전별 서버를 두는 SaaS에서 403/401을 만나면, 키나 권한을 의심하기 전에 "내 계정이 등록된 리전과 내가 부르는 엔드포인트가 같은가"부터 먼저 확인하려고 한다.
정리해보면,
대시보드 주소창에 apac.이나 eu. 같은 접두사가 붙어 있다면, .env에 LANGSMITH_ENDPOINT를 그 리전에 맞게 명시해줘야 한다.