> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Customize Ops

> Learn how to color your Ops for better visibility, how to modify what's logged, and how to control the サンプリング率

Weave Op は、すべての Call を自動的にログする、バージョン管理された関数です。このガイドは、Weave を使用してコードをインストルメントする開発者向けに、Op の作成、Weights & Biases UI での表示のカスタマイズ、Weave がログするデータの制御、サンプリングと削除の管理方法を説明します。

<Tabs>
  <Tab title="Python">
    Op を作成するには、Python 関数に `weave.op()` デコレーターを付けます。

    ```python lines theme={"system"}
    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')` を呼び出さなければ、通常どおりに動作します (コードのバージョン管理やトラッキングは行われません) 。

    Weave toolbelt を使用して、Op を[サーブ](/ja/products/wandb/weave/guides/tools/serve)または[デプロイ](/ja/products/wandb/weave/guides/tools/deploy)できます。
  </Tab>

  <Tab title="TypeScript">
    Op を作成するには、TypeScript 関数を `weave.op` でラップします。

    ```typescript twoslash lines theme={"system"}
    // @noErrors
    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)
    ```
  </Tab>
</Tabs>

<h2 id="customize-display-names">
  表示名をカスタマイズする
</h2>

カスタム表示名を使用すると、Weights & Biases UI で Op を特定しやすくなります。特に、関数名が一般的または自動生成されている場合に便利です。

<Tabs>
  <Tab title="Python">
    Op の表示名をカスタマイズするには、`@weave.op` デコレーターの `name` パラメーターを設定します:

    ```python lines theme={"system"}
    @weave.op(name="custom_name")
    def func():
        ...
    ```
  </Tab>

  <Tab title="TypeScript">
    ```text theme={"system"}
    この機能は TypeScript ではまだ利用できません。
    ```
  </Tab>
</Tabs>

<h2 id="apply-kinds-and-colors">
  kind とカラーを適用する
</h2>

Weights & Biases UI で Op を整理しやすくするには、コード内の `@weave.op` デコレーターに `kind` 引数と `color` 引数を追加して、カスタムの kind とカラーを適用します。たとえば次のコードでは、親関数に `LLM` の `kind` と `blue` の `color` を、ネストされた関数に `tool` の `kind` と `red` の `color` を適用しています。

<Tabs>
  <Tab title="Python">
    ```python lines theme={"system"}
    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()
    ```
  </Tab>

  <Tab title="TypeScript">
    ```text theme={"system"}
    This feature is not available in TypeScript yet.
    ```
  </Tab>
</Tabs>

これにより、Weights & Biases UI 上の Op に次のようにカラーと kind が適用されます。

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/weave/_media/weave_colors_kinds.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=b2bac689704aa30088eea3c1311fc492" alt="LLM kind と blue カラーが適用された親 Call と、tool kind と red カラーが適用されたネストされた Call が表示された Weights & Biases UI。" width="1234" height="605" data-path="products/wandb/weave/_media/weave_colors_kinds.png" />
</Frame>

`kind` に指定できる値は次のとおりです。

* `agent`
* `llm`
* `tool`
* `search`

`color` に指定できる値は次のとおりです。

* `red`
* `orange`
* `yellow`
* `green`
* `blue`
* `purple`

<h2 id="customize-logged-inputs-and-outputs">
  ログされる入力と出力のカスタマイズ
</h2>

<Tabs>
  <Tab title="Python">
    元の関数を変更せずに、Weave がログするデータを変更するには (機密データを隠す場合など) 、Op デコレーターに `postprocess_inputs` と `postprocess_output` を渡します。

    `postprocess_inputs` は、キーが引数名、値が引数の値である dict を受け取り、変換後の入力を格納した dict を返します。

    `postprocess_output` は、関数が通常返す任意の値を受け取り、変換後の出力を返します。

    ```python lines theme={"system"}
    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")
    ```
  </Tab>

  <Tab title="TypeScript">
    ```text theme={"system"}
    このフィーチャーは TypeScript ではまだ利用できません。
    ```
  </Tab>
</Tabs>

<h2 id="control-sampling-rate">
  サンプリング率の制御
</h2>

<Tabs>
  <Tab title="Python">
    Weave が Op の Call をトレースする頻度を制御するには、`@weave.op` デコレーターの `tracing_sample_rate` パラメーターを設定します。Call の一部だけをトレースする必要がある高頻度の Op に使用します。

    エージェントの開発中はすべてのトレースを収集し、エージェントの動作の調整と理解に役立てます。本番では、トレースのサンプリングを設定して、エージェントの動作の可観測性を維持しながらコストを削減します。

    Weave は最も外側の Op にのみサンプリング率を適用します。ネストされた Op にサンプリング率が設定されていても、親 Op が先に呼び出されてその Op を呼び出す場合、Weave はネストされた Op のサンプリング率を無視します。

    ```python lines theme={"system"}
    @weave.op(tracing_sample_rate=0.1)  # Call の約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
    ```

    Weave が Op の Call をサンプリング対象に選ばない場合:

    * 関数は通常どおり実行されます。
    * Weave はトレースデータを受信しません。
    * Weave はその Call の子 Op をトレースしません。

    サンプリング率は 0.0 以上 1.0 以下である必要があります。
  </Tab>

  <Tab title="TypeScript">
    ```text theme={"system"}
    この機能は TypeScript ではまだ使用できません。
    ```
  </Tab>
</Tabs>

<h2 id="control-call-link-output">
  Call リンクの出力を制御する
</h2>

デフォルトでは、Weave は各 Call をログする際に、その Call へのリンクを出力します。ログする際に Call リンクの出力を抑制するには、環境変数 `WEAVE_PRINT_CALL_LINK` を `false` に設定します。この設定を使用すると、ログの冗長な出力を減らし、見やすくできます。

```bash lines theme={"system"}
export WEAVE_PRINT_CALL_LINK=false
```

<h2 id="delete-an-op">
  Op を削除する
</h2>

Op のバージョンを削除すると、project からそのバージョンが削除されます。古くなったバージョンや不要なバージョンの整理に使用してください。

<Tabs>
  <Tab title="Python">
    Op のバージョンを削除するには、Op の ref で `.delete()` を呼び出します。

    ```python lines theme={"system"}
    weave.init('intro-example')
    my_op_ref = weave.ref('track_me:v1')
    my_op_ref.delete()
    ```

    削除された Op にアクセスすると、エラーが返されます。
  </Tab>

  <Tab title="TypeScript">
    ```text theme={"system"}
    この機能は TypeScript ではまだ使用できません。
    ```
  </Tab>
</Tabs>


## Related topics

- [Virtual Private Clouds (VPCs)](/products/networking/vpc/about-vpcs.md)
