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

# Instructor

> Weave の Instructor インテグレーションを使用して LLM からの構造化データ抽出をトレースし、Pydantic の検証と再試行ロジックを取得します。

<a target="_blank" href="https://colab.research.google.com/github/wandb/examples/blob/master/weave/docs/quickstart_instructor.ipynb" aria-label="Google Colab で開く">
  <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab" />
</a>

[Instructor](https://python.useinstructor.com/) は、LLM から JSON などの構造化データを取得するための軽量ライブラリです。このガイドでは、Weave で Instructor の Call をトレースする方法を説明します。これにより、構造化抽出のデバッグ、Pydantic の検証の取得、再試行ロジックの確認が行えます。

<h2 id="tracing">
  トレース
</h2>

言語モデルアプリケーションのトレースは、開発時にも本番環境でも、一か所に集約して保存することが重要です。トレースはデバッグに役立つだけでなく、アプリケーションの改善に活用できるデータセットにもなります。

Weave は [Instructor](https://python.useinstructor.com/) のトレースを自動的に取得します。トラッキングを開始するには、`weave.init(project_name="[YOUR-WANDB-PROJECT-NAME]")` を呼び出してから、通常どおりライブラリを使用してください。

```python lines theme={"system"}
import instructor
import weave
from pydantic import BaseModel
from openai import OpenAI


# 目的の出力構造を定義します
class UserInfo(BaseModel):
    user_name: str
    age: int

# Weave を初期化します
weave.init(project_name="instructor-test")

# OpenAI クライアントにパッチを適用します
client = instructor.from_openai(OpenAI())

# 自然言語のテキストから構造化データを抽出します
user_info = client.chat.completions.create(
    model="gpt-3.5-turbo",
    response_model=UserInfo,
    messages=[{"role": "user", "content": "John Doe is 30 years old."}],
)
```

| <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/weave/_media/instructor_lm_trace.gif?s=887af8a4f18d621eb929a99aea9d8c20" alt="Weave における Instructor LM のトレースと構造化出力抽出のワークフロー" width="2880" height="1512" data-path="products/wandb/weave/_media/instructor_lm_trace.gif" /> |
| - |
| Weave は、Instructor を使用して行われたすべての LLM Call をトラッキングしてログします。トレースは Weave の Web インターフェースで確認できます。 |

<h2 id="track-your-own-ops">
  独自の Op をトラッキングする
</h2>

関数を `@weave.op` でラップすると、入力、出力、アプリのロジックの取得が始まり、アプリ内のデータの流れをデバッグできるようになります。Op は深くネストでき、トラッキングしたい関数のツリーを構築できます。さらに、実験を進めながらコードのバージョン管理も自動的に行われ、Git にまだコミットしていないその場限りの変更内容も取得されます。

[`@weave.op`](/ja/products/wandb/weave/guides/tracking/ops) でデコレートした関数を作成します。

次の例では、`extract_person` 関数が `@weave.op` でラップされたメトリクス関数です。これにより、OpenAI のチャット補完 Call などの中間ステップを確認できます。

```python lines theme={"system"}
import instructor
import weave
from openai import OpenAI
from pydantic import BaseModel


# 目的の出力構造を定義します
class Person(BaseModel):
    person_name: str
    age: int


# Weave を初期化します
weave.init(project_name="instructor-test")

# OpenAI クライアントにパッチを適用します
lm_client = instructor.from_openai(OpenAI())


# 自然言語から構造化データを抽出します
@weave.op()
def extract_person(text: str) -> Person:
    return lm_client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "user", "content": text},
        ],
        response_model=Person,
    )


person = extract_person("My name is John and I am 20 years old")
```

| <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/weave/_media/instructor_op_trace.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=d7d499b3c52a2b841df87450a68df37b" alt="構造化オブジェクト、関数の入力と出力、Pydantic モデルの検証を含む Instructor の op トレース" width="2778" height="1514" data-path="products/wandb/weave/_media/instructor_op_trace.png" /> |
| - |
| `extract_person` 関数を `@weave.op` でデコレートすると、関数の入力と出力に加え、関数内で実行されるすべての LM Call がトレースされます。さらに Weave は、Instructor が生成した構造化オブジェクトを自動的にトラッキングし、バージョン管理します。 |

<h2 id="create-a-model-for-easier-experimentation">
  `Model` を作成して実験を効率化する
</h2>

構成要素が多いと、実験の整理は難しくなります。[`Model`](/ja/products/wandb/weave/guides/core-types/models) クラスを使用すると、システムプロンプトや使用しているモデルなど、アプリの実験に関する詳細を取得して整理できます。これにより、アプリのさまざまな反復処理を整理して比較しやすくなります。

[`Model`](/ja/products/wandb/weave/guides/core-types/models) は、コードのバージョン管理や入力と出力の取得に加えて、アプリケーションの動作を制御する構造化されたパラメーターも取得します。そのため、どのパラメーターが最も効果的だったかを検索できます。また、Weave モデルは [`serve`](#serve-a-weave-model) や [`Evaluation`](/ja/products/wandb/weave/guides/core-types/evaluations) と組み合わせて使用することもできます。

次の例では、`PersonExtractor` を使って実験できます。これらのいずれかを変更するたびに、`PersonExtractor` の新しい*バージョン*が作成されます。

```python lines theme={"system"}
import asyncio
from typing import List, Iterable

import instructor
import weave
from openai import AsyncOpenAI
from pydantic import BaseModel


# 目的の出力構造を定義する
class Person(BaseModel):
    person_name: str
    age: int


# Weave を初期化する
weave.init(project_name="instructor-test")

# OpenAI クライアントにパッチを適用する
lm_client = instructor.from_openai(AsyncOpenAI())


class PersonExtractor(weave.Model):
    openai_model: str
    max_retries: int

    @weave.op()
    async def predict(self, text: str) -> List[Person]:
        model = await lm_client.chat.completions.create(
            model=self.openai_model,
            response_model=Iterable[Person],
            max_retries=self.max_retries,
            stream=True,
            messages=[
                {
                    "role": "system",
                    "content": "You are a perfect entity extraction system",
                },
                {
                    "role": "user",
                    "content": f"Extract `{text}`",
                },
            ],
        )
        return [m async for m in model]


model = PersonExtractor(openai_model="gpt-4", max_retries=2)
asyncio.run(model.predict("John is 30 years old"))
```

| <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/weave/_media/instructor_weave_model.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=9b0d8be8442b85ab18640a24dc01f888" alt="モデルのバージョンとトレース履歴を表示する、Instructor の Weave モデルのトレースおよびバージョン管理画面" width="1490" height="1422" data-path="products/wandb/weave/_media/instructor_weave_model.png" /> |
| - |
| [`Model`](/ja/products/wandb/weave/guides/core-types/models) を使用した Call のトレースとバージョン管理 |

<h2 id="serve-a-weave-model">
  Weave モデルをサービングする
</h2>

`weave.Model` を保存したら、FastAPI エンドポイントとしてサービングし、ノートブックの外部からテストしたり、他のアプリケーションと統合したりできます。`weave.Model` オブジェクトの Weave リファレンスがあれば、FastAPI サーバーを起動してモデルを [`serve`](/ja/products/wandb/weave/guides/tools/serve) できます。

| [<img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/weave/_media/instructor_serve.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=5effd82f29b3af72733bc5a5eee216cc" alt="FastAPI サーバーの設定とモデルのサービングオプションを表示した Instructor の serve インターフェース" width="2778" height="1514" data-path="products/wandb/weave/_media/instructor_serve.png" />](https://forge.coreweave.com/wandb/geekyrakshit/instructor-test/weave/objects/PersonExtractor/versions/xXpMsJvaiTOjKafz1TnHC8wMgH5ZAAwYOaBMvHuLArI) |
| - |
| 任意の `weave.Model` の Weave リファレンスは、そのモデルのページに移動し、UI からコピーして取得できます。 |

モデルをサービングするには、ターミナルで次のコマンドを実行します。

```bash theme={"system"}
weave serve weave://your_entity/project-name/YourModel:[HASH]
```
