> ## 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.

# チュートリアル: アプリのバージョン管理

> Weave モデルを使用して、アプリケーションとそのパラメーターをトラッキングし、バージョン管理する方法を学びます

システムのパフォーマンスを理解するには、[入力、出力、メタデータ](/ja/products/wandb/weave/quickstart)に加えて、[アプリ内を流れるデータ](/ja/products/wandb/weave/tutorial-tracing_2)をトラッキングすることが不可欠です。同じく重要なのが、アプリを継続的にバージョン管理することです。バージョン管理によって、コードやパラメーターの変更が出力にどう影響するかを把握できます。Weave の `Model` クラスを使えば、こうした変更が自動的にトラッキングされます。

このチュートリアルは、LLM アプリケーションの異なるバージョン間で結果を比較・再現したい開発者を対象としています。このチュートリアルを完了すると、アプリケーションのパラメーターとコードを取得する、バージョン管理された Weave `Model` が完成します。また、以前のバージョンを取得して再利用する方法も身につきます。

このチュートリアルでは、次の内容を学びます。

* Weave `Model` を使用して、アプリケーションとそのパラメーターをトラッキングし、バージョン管理する方法
* ログ済みの Weave `Model` をエクスポート、変更、再利用する方法

<h2 id="use-weavemodel">
  `weave.Model` を使用する
</h2>

<Warning>
  `weave.Model` クラスは Python でのみサポートされています。
</Warning>

Weave `Model` を使用すると、モデルベンダー ID、プロンプト、temperature などのパラメーターが変更されるたびに、Weave がそれらを保存してバージョン管理します。

Weave で `Model` を作成するには、次のものが必要です。

* `weave.Model` を継承するクラス。
* すべてのクラスフィールドの型定義。
* `@weave.op()` デコレーターを付けた、型付きの `invoke` 関数。

クラスフィールドやモデルを定義するコードを変更すると、Weave はその変更をログし、バージョンを更新します。これにより、アプリの異なるバージョン間で生成結果を比較できます。

次の例では、Weave がモデル名、temperature、システムプロンプトをトラッキングし、バージョン管理します。

<Tabs>
  <Tab title="Python">
    ```python lines {26,33-34} theme={"system"}
    import json
    from openai import OpenAI

    import weave

    @weave.op()
    def extract_dinos(wmodel: weave.Model, sentence: str) -> dict:
        response = wmodel.client.chat.completions.create(
            model=wmodel.model_name,
            temperature=wmodel.temperature,
            messages=[
                {
                    "role": "system",
                    "content": wmodel.system_prompt
                },
                {
                    "role": "user",
                    "content": sentence
                }
                ],
                response_format={ "type": "json_object" }
            )
        return response.choices[0].message.content

    # weave.Model を継承してサブクラスを作成する
    class ExtractDinos(weave.Model):
        client: OpenAI = None
        model_name: str
        temperature: float
        system_prompt: str

        # 関数名は必ず `invoke` または `predict` にする
        @weave.op()
        def invoke(self, sentence: str) -> dict:
            dino_data  = extract_dinos(self, sentence)
            return json.loads(dino_data)
    ```
  </Tab>

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

これで、モデルをインスタンス化し、`invoke` で呼び出せます。

<Tabs>
  <Tab title="Python">
    ```python lines {7,18} theme={"system"}
    weave.init('jurassic-park')
    client = OpenAI()

    system_prompt = """Extract any dinosaur `name`, their `common_name`, \
    names and whether its `diet` is a herbivore or carnivore, in JSON format."""

    dinos = ExtractDinos(
        client=client,
        model_name='gpt-4o',
        temperature=0.4,
        system_prompt=system_prompt
    )

    sentence = """I watched as a Tyrannosaurus rex (T. rex) chased after a Triceratops (Trike), \
    both carnivore and herbivore locked in an ancient dance. Meanwhile, a gentle giant \
    Brachiosaurus (Brachi) calmly munched on treetops, blissfully unaware of the chaos below."""

    result = dinos.invoke(sentence)
    print(result)
    ```
  </Tab>

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

`.invoke()` を呼び出すと、Weave のトレースに、モデルのパラメーターと、`weave.op()` でデコレートされたモデル関数のコードが記録されます。モデルもバージョン管理されます (この例では `v21`) 。モデルをクリックすると、そのバージョンを使用したすべての Call を確認できます。

<img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/weave/_media/tutorial-model_invoke3.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=9fdbffd1e5837823322919a24c541e08" alt="Weave モデルの再利用" width="1664" height="1292" data-path="products/wandb/weave/_media/tutorial-model_invoke3.png" />

`weave.Model` を使用する際の注意点:

* 必要に応じて、Weave `Model` の関数名には `invoke` の代わりに `predict` を使用することもできます。
* その他のクラスメソッドを Weave でトラッキングするには、`weave.op()` でラップします。
* アンダースコアで始まるパラメーターは Weave によって無視され、ログされません。

<h2 id="export-and-reuse-a-logged-weavemodel">
  ログした `weave.Model` をエクスポートして再利用する
</h2>

モデルが Weave でバージョン管理されるようになったため、コードで再定義しなくても、過去の任意のバージョンを取得して再実行できます。これは、過去の結果を再現したい場合や、特定のモデルバージョンを他のユーザーと共有したい場合に便利です。

Weave は呼び出されたモデルを保存してバージョン管理するため、それらのモデルをエクスポートして再利用できます。

<h3 id="get-the-model-ref">
  モデル の ref を取得する
</h3>

Weights & Biases の UI で、特定のバージョンの モデル の ref を取得できます。

<h3 id="use-the-model">
  モデル を使用する
</h3>

モデル オブジェクトの URI を取得したら、それをエクスポートして再利用できます。エクスポートされたモデルは初期化済みのため、そのまま使用できます。

<Tabs>
  <Tab title="Python">
    ```python lines {2} theme={"system"}
    # エクスポートされた Weave モデルは初期化済みのため、そのまま呼び出せます。
    new_dinos = weave.ref("weave://morgan/jurassic-park/object/ExtractDinos:ey4udBU2MU23heQFJenkVxLBX4bmDsFk7vsGcOWPjY4").get()

    # クライアントを再度 OpenAI クライアントに設定します。
    new_dinos.client = client

    new_sentence = """I also saw an Ankylosaurus grazing on giant ferns"""
    new_result = new_dinos.invoke(new_sentence)
    print(new_result)
    ```
  </Tab>

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

新しい入力にも同じ モデル バージョン (v21) が使用されていることがわかります。

<img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/weave/_media/tutorial-model_re-use.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=f962108efde0d0dde004de5ab442183f" alt="Weave モデルの再利用" width="1260" height="1120" data-path="products/wandb/weave/_media/tutorial-model_re-use.png" />

これで、バージョン管理された Weave `Model` を用意できました。このモデルは継続的に改良でき、取得してアプリケーションのさまざまなバージョンで再利用できます。

<h2 id="whats-next">
  次のステップ
</h2>

* [評価パイプライン構築のチュートリアル](/ja/products/wandb/weave/tutorial-eval) に沿って、アプリケーションの反復的な改善に取り組みましょう。
