메인 콘텐츠로 건너뛰기
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.op()으로 데코레이션된 함수는, 그 전에 weave.init('your-project-name')를 호출하지 않으면 (코드 버전 관리와 추적 없이) 평소와 같이 동작합니다.op는 Weave toolbelt를 사용해 served 하거나 deployed 할 수 있습니다.

표시 이름 사용자 지정

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

종류와 색상 적용하기

Weave UI에서 op들을 더 체계적으로 관리하려면 코드의 @weave.op 데코레이터에 kindcolor 인수를 추가해 사용자 지정 kind와 color를 적용할 수 있습니다. 예를 들어, 다음 코드는 상위 함수에 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에서 op들에 종류와 색상이 다음과 같이 적용됩니다:
Weave UI에서 상위 호출에는 LLM kind와 blue color가, 중첩 호출에는 tool kind와 red color가 표시되어 있는 모습.
사용 가능한 kind 값은 다음과 같습니다:
  • agent
  • llm
  • tool
  • search
사용 가능한 color 값은 다음과 같습니다:
  • red
  • orange
  • yellow
  • green
  • blue
  • purple

로그되는 입력값과 출력값 사용자 정의하기

원본 함수를 수정하지 않고(예: 민감한 데이터를 숨기기 위해) Weave에 로그되는 데이터를 변경하려면, op 데코레이터에 postprocess_inputspostprocess_output을 인자로 전달하면 됩니다.postprocess_inputs는 키가 인자 이름이고 값이 인자 값인 dict를 입력으로 받아, 변환된 입력값이 들어 있는 dict를 반환합니다.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]:
    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 호출이 추적되는 빈도를 제어할 수 있습니다. 이는 호출 빈도가 높은 Op에서 일부 호출만 추적하면 되는 경우에 유용합니다.Weave는 샘플링 비율을 루트 호출에만 적용한다는 점에 유의하세요. 어떤 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로 전송되지 않습니다.
  • 해당 호출에 대해서는 자식 Op도 추적되지 않습니다.
샘플링 비율은 0.0 이상 1.0 이하의 값이어야 합니다.
로깅 중에 호출 링크가 출력되지 않도록 하려면 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에 접근하면 오류가 반환됩니다.