メインコンテンツへスキップ
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') を実行しなかった場合、(コードのバージョン管理と追跡なしで)通常どおり動作します。Ops は Weave toolbelt を使って serve したり、deploy したりできます。

表示名をカスタマイズする

@weave.op デコレータの name パラメータを設定することで、op の表示名をカスタマイズできます。
@weave.op(name="custom_name")
def func():
    ...

種類と色を適用する

Weave UI で ops をより整理しやすくするために、コード内の @weave.op デコレータに kind 引数と color 引数を追加して、カスタムの種類と色を設定できます。たとえば、次のコードでは親関数に LLMkindbluecolor を適用し、ネストした関数に toolkindredcolor を適用しています。
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 に対して、次のように種類と色が適用されます。
Weave UI。親の呼び出しに LLM kind と blue color が適用され、ネストされた呼び出しに tool kind と red color が適用されている様子。
利用可能な kind の値は次のとおりです。
  • agent
  • llm
  • tool
  • search
利用可能な color の値は次のとおりです。
  • red
  • orange
  • yellow
  • green
  • blue
  • purple

記録される入力と出力をカスタマイズする

元の関数を変更せずに(たとえば機密データを隠すために)Weave に記録されるデータを変更したい場合は、postprocess_inputspostprocess_output を op デコレータに渡すことができます。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 のうち、一部の呼び出しだけトレースできれば十分な場合に有用です。サンプリングレートはルート呼び出しにのみ適用されることに注意してください。ある 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_LINKfalse に設定できます。これは、出力の冗長さを抑えてログの散らかりを減らしたい場合に役立ちます。
export WEAVE_PRINT_CALL_LINK=false

op の削除

op のバージョンを削除するには、op の参照(op ref)に対して .delete() を呼び出します。
weave.init('intro-example')
my_op_ref = weave.ref('track_me:v1')
my_op_ref.delete()
削除された op にアクセスしようとすると、エラーが発生します。