メインコンテンツへスキップ
これらの例では、W&B Inference を Weave と組み合わせて使用し、トレース、評価、比較を行う方法を紹介します。

基本的な例: Weave を使って Llama 3.1 8B をトレースする

この例では、Llama 3.1 8B モデルにプロンプトを送信し、その呼び出しを Weave でトレースする方法を示します。トレースにより、LLM 呼び出しのすべての入力と出力が記録され、パフォーマンスが監視され、Weave UI 上で結果を分析できます。
Weave におけるトレーシングの詳細をご確認ください。
この例では次のことを行います:
  • チャット補完リクエストを行う @weave.op() デコレータ付き関数を定義する
  • トレースが記録され、W&B のエンティティおよびプロジェクトに関連付けられる
  • 関数が自動的にトレースされ、入力、出力、レイテンシ、およびメタデータがログに記録される
  • 結果がターミナルに出力され、トレースが https://wandb.aiTraces タブに表示される
この例を実行する前に、前提条件を満たしておいてください。
import weave
import openai

# トレース用のWeaveチームとプロジェクトを設定する
weave.init("<your-team>/<your-project>")

client = openai.OpenAI(
    base_url='https://api.inference.wandb.ai/v1',

    # https://wandb.ai/settings でAPIキーを作成する
    api_key="<your-api-key>",

    # オプション: 使用状況追跡用のチームとプロジェクト
    project="wandb/inference-demo",
)

# WeaveでモデルのコールをトレースするWeave
@weave.op()
def run_chat():
    response = client.chat.completions.create(
        model="meta-llama/Llama-3.1-8B-Instruct",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "Tell me a joke."}
        ],
    )
    return response.choices[0].message.content

# トレースされたコールを実行してログに記録する
output = run_chat()
print(output)
コードを実行した後、Weave でトレースを表示するには、次のいずれかを行います。
  1. ターミナルに出力されたリンクをクリックする(例: https://wandb.ai/<your-team>/<your-project>/r/call/01977f8f-839d-7dda-b0c2-27292ef0e04g
  2. または https://wandb.ai にアクセスし、Traces タブを選択する

応用例: Weave Evaluations と Leaderboards を利用する

モデル呼び出しのトレースに加えて、パフォーマンスを評価して Leaderboard を公開することもできます。この例では、質問応答データセット上で 2 つのモデルを比較します。 この例を実行する前に、前提条件 を満たしてください。
import os
import asyncio
import openai
import weave
from weave.flow import leaderboard
from weave.trace.ref_util import get_ref

# トレース用のWeaveチームとプロジェクトを設定する
weave.init("<your-team>/<your-project>")

dataset = [
    {"input": "What is 2 + 2?", "target": "4"},
    {"input": "Name a primary color.", "target": "red"},
]

@weave.op
def exact_match(target: str, output: str) -> float:
    return float(target.strip().lower() == output.strip().lower())

class WBInferenceModel(weave.Model):
    model: str

    @weave.op
    def predict(self, prompt: str) -> str:
        client = openai.OpenAI(
            base_url="https://api.inference.wandb.ai/v1",
            # https://wandb.ai/settings でAPIキーを作成する
            api_key="<your-api-key>",
            # オプション: 使用状況追跡用のチームとプロジェクト
            project="<your-team>/<your-project>",
        )
        resp = client.chat.completions.create(
            model=self.model,
            messages=[{"role": "user", "content": prompt}],
        )
        return resp.choices[0].message.content

llama = WBInferenceModel(model="meta-llama/Llama-3.1-8B-Instruct")
deepseek = WBInferenceModel(model="deepseek-ai/DeepSeek-V3-0324")

def preprocess_model_input(example):
    return {"prompt": example["input"]}

evaluation = weave.Evaluation(
    name="QA",
    dataset=dataset,
    scorers=[exact_match],
    preprocess_model_input=preprocess_model_input,
)

async def run_eval():
    await evaluation.evaluate(llama)
    await evaluation.evaluate(deepseek)

asyncio.run(run_eval())

spec = leaderboard.Leaderboard(
    name="Inference Leaderboard",
    description="Compare models on a QA dataset",
    columns=[
        leaderboard.LeaderboardColumn(
            evaluation_object_ref=get_ref(evaluation).uri(),
            scorer_name="exact_match",
            summary_metric_path="mean",
        )
    ],
)

weave.publish(spec)
このコードを実行したら、https://wandb.ai/ で自分の W&B アカウントにアクセスし、次の操作を行ってください。
モデルの評価結果を表示
リーダーボードを表示

次のステップ

  • 利用可能なメソッドの一覧は API リファレンス を参照してください
  • UI でモデルを試してください