메인 콘텐츠로 건너뛰기
Weave op는 모든 호출을 자동으로 로그하는 버전 관리 기능입니다.
op를 생성하려면 python 함수에 @weave.op() 데코레이터를 추가하세요.
import weave

@weave.op()
def track_me(v):
    return v + 5

weave.init('intro-example')
track_me(15)
op를 호출하면 코드가 이전 호출과 비교하여 변경된 경우 새로운 op 버전이 생성되며, 함수의 입력과 출력을 로그합니다.함수를 호출하기 전에 weave.init('your-project-name')을 호출하지 않으면, @weave.op() 데코레이터가 적용된 함수는 코드 버전 관리나 추적 없이 정상적으로 동작합니다.Ops는 Weave 툴벨트를 사용하여 서빙하거나 배포할 수 있습니다.

표시 이름 사용자 정의하기

@weave.op 데코레이터에서 name 파라미터를 설정하여 op의 표시 이름을 사용자 정의할 수 있습니다:
@weave.op(name="custom_name")
def func():
    ...

종류(kinds) 및 색상 적용하기

Weave UI에서 ops를 더 효율적으로 정리하기 위해, 코드의 @weave.op 데코레이터에 kindcolor 인수를 추가하여 사용자 정의 종류와 색상을 적용할 수 있습니다. 예를 들어, 다음 코드는 부모 함수에 LLM kindblue color를 적용하고, 중첩된 함수에 tool kindred color를 적용합니다:
import weave

weave.init("<your-team-name>/<your-project-name>")

@weave.op(kind="LLM", color="blue")
def llm_func():
    @weave.op(kind="tool", color="red")
    def tool_func():
        return "tool result"

    tool_result = tool_func()
    
    return f"llm result with {tool_result}"

llm_func()
이렇게 하면 Weave UI에서 다음과 같이 ops에 색상과 종류가 적용됩니다:
부모 호출에 LLM 종류와 blue 색상이 적용되고, 중첩된 호출에 tool 종류와 red 색상이 적용된 것을 보여주는 Weave UI.
사용 가능한 kind 값은 다음과 같습니다:
  • agent
  • llm
  • tool
  • search
사용 가능한 color 값은 다음과 같습니다:
  • red
  • orange
  • yellow
  • green
  • blue
  • purple

로그된 입력 및 출력 사용자 정의하기

원본 함수를 수정하지 않고 (예: 민감한 데이터 숨기기) Weave에 로그되는 데이터를 변경하려면, op 데코레이터에 postprocess_inputspostprocess_output을 전달할 수 있습니다.postprocess_inputs는 키가 인수 이름이고 값이 인수 값인 딕셔너리를 입력받아 변환된 입력이 담긴 딕셔너리를 반환합니다.postprocess_output은 함수가 평소에 반환하는 모든 값을 입력받아 변환된 출력을 반환합니다.
from dataclasses import dataclass
from typing import Any
import weave

@dataclass
class CustomObject:
    x: int
    secret_password: str

def postprocess_inputs(inputs: dict[str, Any]) -> dict[str, Any]:
    # 'hide_me' 키를 제외한 모든 입력을 반환합니다.
    return {k:v for k,v in inputs.items() if k != "hide_me"}

def postprocess_output(output: CustomObject) -> CustomObject:
    # 민감한 정보를 마스킹하여 반환합니다.
    return CustomObject(x=output.x, secret_password="REDACTED")

@weave.op(
    postprocess_inputs=postprocess_inputs,
    postprocess_output=postprocess_output,
)
def func(a: int, hide_me: str) -> CustomObject:
    return CustomObject(x=a, secret_password=hide_me)

weave.init('hide-data-example') # 🐝
func(a=1, hide_me="password123")

샘플링 비율 제어

@weave.op 데코레이터에서 tracing_sample_rate 파라미터를 설정하여 op 호출의 추적 빈도를 제어할 수 있습니다. 이는 호출 빈도가 매우 높은 ops에서 호출의 서브셋만 추적해야 할 때 유용합니다.샘플링 비율은 루트 호출(root calls)에만 적용됩니다. op에 샘플링 비율이 설정되어 있더라도, 다른 op에 의해 먼저 호출된 경우에는 해당 샘플링 비율이 무시됩니다.
@weave.op(tracing_sample_rate=0.1)  # 호출의 약 10%만 추적합니다.
def high_frequency_op(x: int) -> int:
    return x + 1

@weave.op(tracing_sample_rate=1.0)  # 항상 추적합니다 (기본값).
def always_traced_op(x: int) -> int:
    return x + 1
op 호출이 샘플링되지 않은 경우:
  • 함수는 정상적으로 실행됩니다.
  • Weave로 추적 데이터가 전송되지 않습니다.
  • 해당 호출에 대한 자식 ops도 추적되지 않습니다.
샘플링 비율은 0.0에서 1.0 사이의 값이어야 합니다.

호출 링크 출력 제어

로그 기록 중에 호출 링크(call link)가 출력되는 것을 억제하고 싶다면, WEAVE_PRINT_CALL_LINK 환경 변수를 false로 설정할 수 있습니다. 이는 출력의 가독성을 높이고 로그의 불필요한 내용을 줄이고 싶을 때 유용합니다.
export WEAVE_PRINT_CALL_LINK=false

op 삭제하기

op 버전을 삭제하려면 op ref에서 .delete()를 호출하세요.
weave.init('intro-example')
my_op_ref = weave.ref('track_me:v1')
my_op_ref.delete()
삭제된 op에 엑세스하려고 하면 에러가 발생합니다.