


- Inputs (인수)
- Outputs (반환값)
- 메타데이터 (기간, 예외, LLM 사용량 등)
- Trace에 속함 (동일한 실행 컨텍스트 내의 calls 집합)
- 부모 및 자식 Calls를 가짐 (트리 구조 형성)
Creating Calls
Weave 에서 Calls를 생성하는 세 가지 주요 방법이 있습니다:1. LLM 라이브러리의 자동 추적
- Python
- TypeScript
Weave 는
openai, anthropic, cohere, mistral과 같은 일반적인 LLM 라이브러리에 대한 호출을 자동으로 추적합니다. 프로그램 시작 시 weave.init('project_name')을 호출하기만 하면 됩니다:summary 사전(dictionary)에 메트릭이나 다른 사후 호출 값을 저장할 수 있습니다. 실행 중에 call.summary를 수정하면 추가한 모든 값이 호출이 끝날 때 Weave 가 계산한 요약 데이터와 병합됩니다.
2. 함수 데코레이팅 및 래핑
하지만 LLM 애플리케이션에는 추적하고 싶은 추가 로직(전처리/후처리, 프롬프트 등)이 있는 경우가 많습니다.- Python
- TypeScript
실행 중에 call 오브젝트 핸들 가져오기
- Python
- TypeScript
가끔 그런 다음
Call 오브젝트 자체에 대한 핸들을 가져오는 것이 유용할 때가 있습니다. 결과와 Call 오브젝트를 모두 반환하는 op.call 메소드를 호출하여 이를 수행할 수 있습니다. 예:call을 사용하여 추가 속성을 설정, 업데이트 또는 가져올 수 있습니다 (피드백에 사용할 호출 ID를 가져오는 데 가장 흔히 사용됨).op이 클래스의 메소드인 경우, 인스턴스를 op의 첫 번째 인수로 전달해야 합니다 (아래 예시 참조).
실행 시 call 표시 이름 설정
- Python
- TypeScript
가끔 호출의 표시 이름을 오버라이드하고 싶을 수 있습니다. 다음 네 가지 방법 중 하나로 이를 수행할 수 있습니다:
- op을 호출할 때 표시 이름을 변경합니다:
__weave 사전을 사용하면 호출 표시 이름을 설정하며, 이는 Op 표시 이름보다 우선합니다.- 호출별로 표시 이름을 변경합니다. 이는
Call오브젝트를 반환하는Op.call메소드를 사용하며, 그런 다음Call.set_display_name을 사용하여 표시 이름을 설정할 수 있습니다.
- 특정 Op의 모든 Calls에 대해 표시 이름을 변경합니다:
-
call_display_name은Call오브젝트를 받아 문자열을 반환하는 함수일 수도 있습니다. 함수가 호출될 때Call오브젝트가 자동으로 전달되므로, 함수의 이름, 호출 입력, 필드 등을 기반으로 동적으로 이름을 생성할 수 있습니다. -
일반적인 유스 케이스 중 하나는 함수 이름에 타임스탬프를 추가하는 것입니다.
-
.attributes를 사용하여 커스텀 메타데이터를 기록할 수도 있습니다.
@weave.op으로 데코레이팅된 함수 또는 메소드입니다.
기본적으로 Op의 이름은 함수 이름이며, 연관된 호출들도 동일한 표시 이름을 갖게 됩니다. 위의 예시는 특정 Op의 모든 Calls에 대해 표시 이름을 오버라이드하는 방법을 보여줍니다. 가끔 사용자는 Op 자체의 이름을 오버라이드하고 싶어 합니다. 이는 다음 두 가지 방법 중 하나로 가능합니다:- 호출이 로깅되기 전에 Op의
name속성을 설정합니다.
- op 데코레이터에서
name옵션을 설정합니다.
병렬(멀티 스레드) 함수 호출 추적
- Python
- TypeScript
기본적으로 병렬 호출은 Weave 에서 모두 별도의 루트 호출로 나타납니다. 동일한 부모 Weave UI에서 이는 단일 부모 호출과 5개의 중첩된 자식 호출을 생성하므로, 증분 작업이 병렬로 실행되더라도 완전한 계층적 trace를 얻을 수 있습니다.
op 아래에 올바르게 중첩되게 하려면 ThreadPoolExecutor를 사용하세요.다음 코드 샘플은 ThreadPoolExecutor 사용법을 보여줍니다.
첫 번째 함수인 func는 x를 받아 x+1을 반환하는 간단한 op입니다. 두 번째 함수인 outer는 입력 리스트를 받는 또 다른 op입니다.
outer 내부에서 ThreadPoolExecutor와 exc.map(func, inputs)를 사용하면 func에 대한 각 호출이 여전히 동일한 부모 trace 컨텍스트를 유지합니다.
3. 수동 Call 추적
API를 직접 사용하여 수동으로 Calls를 생성할 수도 있습니다.- Python
- TypeScript
- HTTP API
4. 클래스 및 오브젝트 메소드 추적
클래스 및 오브젝트 메소드도 추적할 수 있습니다.- Python
- TypeScript
weave.op을 사용하여 클래스의 모든 메소드를 추적합니다.Viewing Calls
- Web App
- Python
- TypeScript
- HTTP API
웹 앱에서 호출을 보려면 다음 단계를 따르세요:
- 프로젝트의 Traces 탭으로 이동합니다.
- 목록에서 보려는 호출을 찾습니다.
- 호출을 클릭하여 상세 페이지를 엽니다.

weave.Markdown으로 렌더링된 traces 커스터마이징
weave.Markdown을 사용하면 원본 데이터를 잃지 않고 trace 정보가 표시되는 방식을 커스터마이징할 수 있습니다. 이를 통해 기본 데이터 구조를 보존하면서 입력과 출력을 읽기 쉬운 형식의 콘텐츠 블록으로 렌더링할 수 있습니다.
- Python
- Typescript
@weave.op 데코레이터에서 postprocess_inputs 및 postprocess_output 함수를 사용하여 trace 데이터를 포맷팅하세요. 다음 코드 샘플은 포스트프로세서를 사용하여 Weave 에서 이모지와 더 읽기 쉬운 포맷팅으로 호출을 렌더링합니다:
Updating Calls
Calls는 생성된 후에는 대부분 불변이지만, 지원되는 몇 가지 변형 작업이 있습니다: 호출 상세 페이지로 이동하여 UI에서 이러한 모든 작업을 수행할 수 있습니다:
표시 이름 설정
- Python
- TypeScript
- HTTP API
호출의 표시 이름을 설정하려면
Call.set_display_name() 메소드를 사용할 수 있습니다.피드백 추가
자세한 내용은 Feedback Documentation을 참조하세요.Call 삭제
- Python
- TypeScript
- HTTP API
Python API를 사용하여 Call을 삭제하려면
Call.delete 메소드를 사용할 수 있습니다.여러 Calls 삭제
- Python
- TypeScript
Python API를 사용하여 여러 Calls를 일괄 삭제하려면 Call ID 목록을
delete_calls()에 전달하세요.Querying and exporting Calls

/calls 페이지(“Traces” 탭)에는 프로젝트의 모든 Calls에 대한 테이블 뷰가 포함되어 있습니다. 여기에서 다음을 수행할 수 있습니다:
- 정렬
- 필터링
- 내보내기

- Python
- TypeScript
- HTTP API
Python API를 사용하여 호출을 가져오려면
client.get_calls 메소드를 사용할 수 있습니다:Call 스키마
필드 전체 목록은 스키마를 참조하세요.| 속성 | 타입 | 설명 |
|---|---|---|
id | string (uuid) | 호출의 고유 식별자 |
project_id | string (선택사항) | 연관된 프로젝트 식별자 |
op_name | string | 연산의 이름 (참조일 수 있음) |
display_name | string (선택사항) | 호출에 대한 사용자 친화적인 이름 |
trace_id | string (uuid) | 이 호출이 속한 trace의 식별자 |
parent_id | string (uuid) | 부모 호출의 식별자 |
started_at | datetime | 호출이 시작된 시점의 타임스탬프 |
attributes | Dict[str, Any] | 호출에 대한 사용자 정의 메타데이터 (실행 중 읽기 전용) |
inputs | Dict[str, Any] | 호출에 대한 입력 파라미터 |
ended_at | datetime (선택사항) | 호출이 종료된 시점의 타임스탬프 |
exception | string (선택사항) | 호출 실패 시 에러 메시지 |
output | Any (선택사항) | 호출의 결과 |
summary | Optional[SummaryMap] | 실행 후 요약 정보. 실행 중에 이를 수정하여 커스텀 메트릭을 기록할 수 있습니다. |
wb_user_id | Optional[str] | 연관된 Weights & Biases 사용자 ID |
wb_run_id | Optional[str] | 연관된 Weights & Biases run ID |
deleted_at | datetime (선택사항) | 호출 삭제 시점의 타임스탬프 (해당하는 경우) |
id,trace_id,parent_id필드는 시스템 내에서 호출을 정리하고 관련짓는 데 도움이 됩니다.- 시간 정보(
started_at,ended_at)를 통해 성능 분석이 가능합니다. attributes및inputs필드는 호출에 대한 컨텍스트를 제공합니다. Attributes는 호출이 시작되면 고정되므로 호출 전에weave.attributes로 설정해야 합니다.output및summary는 결과를 캡처하며, 실행 중에summary를 업데이트하여 추가 메트릭을 로깅할 수 있습니다.- Weights & Biases와의 인테그레이션은
wb_user_id및wb_run_id를 통해 용이해집니다.
- 비용
- 기간
- 상태
Saved views
Trace 테이블 구성, 필터 및 정렬을 _저장된 뷰_로 저장하여 선호하는 설정에 빠르게 엑세스할 수 있습니다. UI 및 Python SDK를 통해 저장된 뷰를 구성하고 엑세스할 수 있습니다. 자세한 내용은 Saved Views를 참조하세요.Traces 테이블에서 W&B run 보기
Weave 를 사용하면 코드의 함수 호출을 추적하고 이들이 실행된 W&B runs에 직접 링크할 수 있습니다. @weave.op()으로 함수를 추적하고 wandb.init() 컨텍스트 내에서 호출하면, Weave 는 자동으로 해당 trace를 W&B run과 연결합니다. 연관된 runs에 대한 링크는 Traces 테이블에 표시됩니다.- Python
- TypeScript
다음 Python 코드는 코드 샘플 사용 방법:
wandb.init() 컨텍스트 내에서 실행될 때 추적된 작업이 어떻게 W&B runs에 연결되는지 보여줍니다. 이러한 traces는 Weave UI에 나타나며 해당 run과 연관됩니다.- 터미널에서 의존성 설치:
- W&B 로그인:
- 스크립트에서
your-username/your-project를 실제 W&B entity/project로 변경합니다. - 스크립트 실행:
- https://weave.wandb.ai에 접속하여 프로젝트를 선택합니다.
- Traces 탭에서 trace 결과를 확인합니다. 연관된 runs에 대한 링크가 Traces 테이블에 표시됩니다.
Configure autopatching
기본적으로 Weave 는openai, anthropic, cohere, mistral과 같은 일반적인 LLM 라이브러리에 대한 호출을 자동으로 패치하고 추적합니다.
- Python
- TypeScript
FAQs
대규모 trace가 잘리는 현상을 어떻게 방지하나요?
자세한 내용은 문제 해결 가이드의 Trace 데이터가 잘림 섹션을 참조하세요.추적을 어떻게 비활성화하나요?
환경 변수
프로그램 전체에 대해 무조건적으로 추적을 비활성화하고 싶은 경우, 환경 변수WEAVE_DISABLED=true를 설정할 수 있습니다.
클라이언트 초기화
때로는 특정 조건에 따라 특정 초기화에 대해서만 추적을 활성화하고 싶을 수 있습니다. 이 경우 init 설정에서disabled 플래그로 클라이언트를 초기화할 수 있습니다.
- Python
- TypeScript
컨텍스트 매니저
마지막으로, 애플리케이션 로직에 따라 단일 함수에 대해서만 추적을 비활성화하고 싶을 수 있습니다. 이 경우weave.trace.context.call_context에서 임포트할 수 있는 with set_tracing_enabled(False) 컨텍스트 매니저를 사용할 수 있습니다.
Call에 대한 정보를 어떻게 캡처하나요?
일반적으로 op을 직접 호출합니다:call 메소드를 호출하여 호출 오브젝트에 직접 엑세스할 수도 있습니다:
call 오브젝트는 입력, 출력 및 기타 메타데이터를 포함하여 호출에 대한 모든 정보를 담고 있습니다.
