


Ops
@weave.op()(Python) 데코레이터로 감싸거나 weave.op()(TypeScript)로 래핑하면 Weave가 해당 함수의 코드, 입력, 출력, 실행 메타데이터를 자동으로 캡처합니다. Op는 트레이싱, 평가 스코어러, 그리고 추적되는 모든 계산의 기본 구성 요소입니다.
Calls
- 입력 인수
- 출력 값
- 실행 시간과 지연 시간
- (중첩된 호출에 대한) 부모-자식 관계
- 발생한 모든 오류
- Trace(동일한 실행 컨텍스트 내 Call들의 모음)에 속할 수 있습니다
- 부모 및 자식 Call을 가질 수 있으며, 트리 구조를 형성합니다
Call 생성
1. LLM 라이브러리 자동 추적
- Python
- TypeScript
Weave는
openai, anthropic, cohere, mistral과 같은 주요 LLM 라이브러리에 대한 호출을 자동으로 추적합니다. 프로그램 시작 시점에 weave.init('project_name')만 호출하면 됩니다:Call 객체의 summary 딕셔너리에 저장할 수 있습니다. 실행 중에 call.summary를 수정하면, 호출이 완료될 때 사용자가 추가한 값이 Weave가 계산한 요약 데이터와 병합됩니다.
2. 함수 데코레이터와 래핑
- Python
- TypeScript
실행 중에 Call 객체 핸들 얻기
- Python
- TypeScript
경우에 따라 그런 다음
Call 객체 자체에 대한 핸들을 얻는 것이 유용할 수 있습니다. op.call 메서드를 호출하면 결과와 Call 객체를 모두 반환합니다. 예시는 다음과 같습니다:call을 사용해서 추가 속성을 설정하거나, 업데이트하거나, 가져올 수 있습니다(가장 일반적인 사용 사례는 피드백에 사용할 호출 ID를 가져오는 것입니다).op가 클래스의 메서드인 경우, 인스턴스를 첫 번째 인수로 op에 전달해야 합니다(아래 예시 참고).
실행 시 호출 표시 이름 설정
- Python
- TypeScript
호출의 표시 이름을 재정의해야 할 때가 있습니다. 다음 네 가지 방법 중 하나로 설정할 수 있습니다:
- op을 호출하는 시점에 표시 이름을 변경합니다:
__weave 딕셔너리를 사용하면 호출 표시 이름이 설정되며, 이는 Op 표시 이름보다 우선합니다.- 호출마다 표시 이름을 개별적으로 변경합니다.
Op.call메서드를 사용해Call객체를 반환한 다음,Call.set_display_name을 사용해 표시 이름을 설정합니다.
- 특정 Op에서 생성되는 모든 Call의 표시 이름을 변경합니다:
-
call_display_name는Call객체를 입력으로 받아 문자열을 반환하는 함수가 될 수도 있습니다. 함수가 호출될 때Call객체는 자동으로 전달되므로, 함수 이름, 호출 입력값, 필드 등을 기반으로 이름을 동적으로 생성하는 데 사용할 수 있습니다. -
일반적인 사용 사례 중 하나는 함수 이름에 타임스탬프를 덧붙이는 것입니다.
-
.attributes를 사용해 사용자 지정 메타데이터를 기록할 수도 있습니다.
@weave.op으로 데코레이션된 함수 또는 메서드입니다.
기본적으로 Op의 이름은 함수 이름과 같으며, 해당 Op에서 생성된 Call들은 동일한 표시 이름을 갖습니다. 위 예시는 특정 Op에서 생성되는 모든 Call의 표시 이름을 재정의하는 방법을 보여줍니다. 때때로 사용자는 Op 자체의 이름을 재정의하고 싶어 합니다. 이는 다음 두 가지 방법 중 하나로 수행할 수 있습니다:- 어떤 Call이 기록되기 전에 Op의
name속성을 설정합니다.
- op 데코레이터에서
name옵션을 설정합니다.
병렬(멀티스레드) 함수 호출 추적
- Python
- TypeScript
기본적으로 병렬 호출은 모두 Weave에서 개별 루트 호출로 표시됩니다. 동일한 상위 Weave UI에서는 하나의 상위 호출 아래에 다섯 개의 중첩된 하위 호출이 생성되므로, 값 증가 연산이 병렬로 실행되더라도 완전한 계층형 트레이스를 확인할 수 있습니다.
op 아래에 올바르게 중첩되도록 하려면 ThreadPoolExecutor를 사용해야 합니다.다음 코드 예시는 ThreadPoolExecutor 사용 방법을 보여줍니다.
첫 번째 함수 func는 x를 받아 x+1을 반환하는 간단한 op입니다. 두 번째 함수 outer는 입력 목록을 받는 또 다른 op입니다.
outer 내부에서 ThreadPoolExecutor와 exc.map(func, inputs)를 사용하면, 각 func 호출이 동일한 상위 트레이스 컨텍스트를 유지합니다.
3. 수동 Call 추적
- Python
- TypeScript
- HTTP API
4. 클래스 및 객체 메서드 추적
- Python
- TypeScript
weave.op을 사용해 클래스의 임의의 메서드를 추적할 수 있습니다.호출 보기
- 웹 앱
- Python
- TypeScript
- HTTP API
웹 앱에서 호출을 보려면 다음을 수행합니다.
- 프로젝트의 Traces 탭으로 이동합니다.
- 목록에서 확인하려는 호출을 찾습니다.
- 호출을 클릭하여 상세 페이지를 엽니다.

weave.Markdown으로 렌더링된 trace 사용자 정의하기
weave.Markdown을 사용하면 원본 데이터를 유지하면서 trace 정보의 표시 방식을 사용자 정의할 수 있습니다. 이를 통해 입력과 출력을 읽기 쉬운 서식 있는 콘텐츠 블록으로 렌더링하면서, 그 이면의 데이터 구조는 그대로 보존할 수 있습니다.
- Python
- Typescript
@weave.op 데코레이터에서 postprocess_inputs와 postprocess_output 함수를 사용하여 trace 데이터를 서식화할 수 있습니다. 다음 코드 예제는 postprocessor를 사용해 Weave에서 호출을 이모지와 더 읽기 쉬운 형식으로 렌더링하는 방법을 보여 줍니다:
호출 업데이트

표시 이름 설정
- Python
- TypeScript
- HTTP API
콜의 표시 이름을 설정하려면
Call.set_display_name() 메서드를 사용할 수 있습니다.피드백 추가
Call 삭제
- Python
- TypeScript
- HTTP API
Python API를 사용하여 Call을 삭제하려면
Call.delete 메서드를 사용하세요.여러 Call 삭제
- Python
- TypeScript
Python API를 사용해 여러 개의 Call을 삭제하려면
delete_calls()에 Call ID 목록을 전달합니다.Calls 쿼리 및 내보내기

/calls 페이지(“Traces” 탭)에는 프로젝트의 모든 Call이 테이블 형태로 표시됩니다. 이 페이지에서 다음 작업을 수행할 수 있습니다:
- 정렬
- 필터링
- 내보내기

- Python
- TypeScript
- HTTP API
Python API를 사용해 Call을 가져오려면
client.get_calls 메서드를 사용할 수 있습니다:Call 스키마
| Property | Type | Description |
|---|---|---|
id | string (uuid) | Call의 고유 식별자 |
project_id | string (optional) | 연결된 프로젝트 식별자 |
op_name | string | 연산 이름(참조일 수도 있음) |
display_name | string (optional) | Call에 대한 사용자 친화적인 이름 |
trace_id | string (uuid) | 이 Call이 속한 trace의 식별자 |
parent_id | string (uuid) | 상위 Call의 식별자 |
started_at | datetime | Call이 시작된 시점의 타임스탬프 |
attributes | Dict[str, Any] | Call에 대한 사용자 정의 메타데이터 (실행 중에는 읽기 전용) |
inputs | Dict[str, Any] | Call에 대한 입력 파라미터 |
ended_at | datetime (optional) | Call이 종료된 시점의 타임스탬프 |
exception | string (optional) | Call이 실패한 경우의 에러 메시지 |
output | Any (optional) | Call의 결과 |
summary | Optional[SummaryMap] | 실행 이후 요약 정보. 실행 중에 이를 수정하여 사용자 지정 메트릭을 기록할 수 있습니다. |
wb_user_id | Optional[str] | 연결된 Weights & Biases 사용자 ID |
wb_run_id | Optional[str] | 연결된 Weights & Biases 실행 ID |
deleted_at | datetime (optional) | Call이 삭제된 경우 해당 시점의 타임스탬프 |
id,trace_id,parent_id필드는 시스템 내에서 Call을 구성하고 서로 연관시키는 데 사용됩니다.- 시간 정보(
started_at,ended_at)는 성능 분석을 가능하게 합니다. attributes와inputs필드는 Call에 대한 컨텍스트를 제공합니다.attributes는 Call이 시작되면 고정되므로, 호출 전에weave.attributes로 설정해야 합니다.output과summary는 결과를 캡처하며, 실행 중에summary를 업데이트하여 추가 메트릭을 기록할 수 있습니다.- Weights & Biases와의 통합은
wb_user_id와wb_run_id를 통해 이뤄집니다.
- Cost
- Duration
- Status
저장된 뷰
Traces 테이블에서 W&B 실행 보기
- Python
- TypeScript
다음 Python 코드는 트레이싱된 op가 이 코드 예제를 사용하려면:
wandb.init() 컨텍스트 내에서 실행될 때 W&B
실행에 어떻게 연결되는지를 보여줍니다. 이러한 트레이스는
Weave UI에 표시되며 해당 실행과 연관됩니다.- 터미널에서 다음과 같이 의존성을 설치합니다:
- W&B에 로그인합니다:
- 스크립트에서
your-username/your-project를 실제 W&B 엔터티/프로젝트로 바꿉니다. - 스크립트를 실행합니다:
- https://weave.wandb.ai에 접속한 후, 프로젝트를 선택합니다.
- Traces 탭에서 트레이스 결과를 확인합니다. 연결된 실행에 대한 링크는 Traces 테이블에 표시됩니다.
자동 패치 구성
openai, anthropic, cohere, mistral 같은 일반적인 LLM 라이브러리에 대한 호출을 자동으로 패치하고 추적합니다.
- Python
- TypeScript
자주 묻는 질문(FAQ)
큰 트레이스가 잘리지 않게 하려면 어떻게 하나요?
트레이싱을 비활성화하려면 어떻게 해야 하나요?
환경 변수
WEAVE_DISABLED=true를 설정하면 됩니다.
WEAVE_DISABLED는 함수 정의 시점에 한 번만 읽힙니다. 이 변수는 런타임에 추적을 켜거나 끄는 용도로는 사용할 수 없습니다.
클라이언트 초기화
disabled 플래그를 사용해 클라이언트를 초기화할 수 있습니다.
- Python
- TypeScript
컨텍스트 관리자
with tracing_disabled()를 사용하면 with 블록 내부에서 실행되는 함수 호출에 대해서만 트레이싱이 수행되지 않습니다. 이 방법은 애플리케이션 코드에서 로깅하지 않을 호출의 범위를 명확히 지정할 때 사용하도록 설계되었습니다.
Call에 대한 정보를 어떻게 캡처하나요?
call 메서드를 직접 호출하여 call 객체에 바로 접근할 수도 있습니다.
call 객체에는 입력, 출력 및 기타 메타데이터를 포함해 호출에 대한 모든 정보가 들어 있습니다.