Documentation Index
Fetch the complete documentation index at: https://wb-21fd5541-weave-caching.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
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 툴벨트를 사용하여 서빙하거나 배포할 수 있습니다. op를 생성하려면 typescript 함수를 weave.op로 감싸세요.import * as weave from 'weave'
function trackMe(v: number) {
return v + 5
}
const trackMeOp = weave.op(trackMe)
trackMeOp(15)
// 인라인으로 작성하는 것도 가능하며, 때로는 이 방식이 더 편리할 수 있습니다.
const trackMeInline = weave.op((v: number) => v + 5)
trackMeInline(15)
표시 이름 사용자 정의하기
@weave.op 데코레이터에서 name 파라미터를 설정하여 op의 표시 이름을 사용자 정의할 수 있습니다:@weave.op(name="custom_name")
def func():
...
이 기능은 아직 TypeScript에서 지원되지 않습니다.
종류(kinds) 및 색상 적용하기
Weave UI에서 ops를 더 효율적으로 정리하기 위해, 코드의 @weave.op 데코레이터에 kind와 color 인수를 추가하여 사용자 정의 종류와 색상을 적용할 수 있습니다. 예를 들어, 다음 코드는 부모 함수에 LLM kind와 blue color를 적용하고, 중첩된 함수에 tool kind와 red 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()
이 기능은 아직 TypeScript에서 지원되지 않습니다.
이렇게 하면 Weave UI에서 다음과 같이 ops에 색상과 종류가 적용됩니다:
사용 가능한 kind 값은 다음과 같습니다:
사용 가능한 color 값은 다음과 같습니다:
red
orange
yellow
green
blue
purple
로그된 입력 및 출력 사용자 정의하기
원본 함수를 수정하지 않고 (예: 민감한 데이터 숨기기) Weave에 로그되는 데이터를 변경하려면, op 데코레이터에 postprocess_inputs와 postprocess_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")
이 기능은 아직 TypeScript에서 지원되지 않습니다.
샘플링 비율 제어
@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 사이의 값이어야 합니다.이 기능은 아직 TypeScript에서 지원되지 않습니다.
호출 링크 출력 제어
로그 기록 중에 호출 링크(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에 엑세스하려고 하면 에러가 발생합니다. 이 기능은 아직 TypeScript에서 지원되지 않습니다.