threading을 사용한 context 전파
tracing을 시작하고 단일 trace 내에서 child task에 병렬 처리를 적용하고 싶은 것은 일반적입니다. Python의 stdlibThreadPoolExecutor는 기본적으로 tracing을 중단시킵니다.
이유
Python의 contextvars는 새 thread 내에서 비어있는 상태로 시작됩니다. trace 연속성을 유지하기 위한 두 가지 접근 방식이 있습니다:해결 방법
-
LangSmith의 ContextThreadPoolExecutor 사용
LangSmith는 자동으로 context 전파를 처리하는
ContextThreadPoolExecutor를 제공합니다: -
parent run tree 수동 제공
또는 parent run tree를 inner function에 수동으로 전달할 수 있습니다:
get_current_run_tree()를 사용하여 현재 run tree를 가져오고 langsmith_extra parameter를 사용하여 inner function에 전달합니다.
두 방법 모두 별도의 thread에서 실행되더라도 inner function 호출이 초기 trace stack 아래에 올바르게 집계되도록 보장합니다.