Skip to main content
リモート Scorer は、W&B Weave 内ではなく、お客様のインフラストラクチャー上で実行される Scorer です。モニターが Call を選択すると、Weave のスコアリングワーカーがその Call を HTTP POST リクエストでお客様の HTTPS エンドポイントに送信し、応答をその Call のフィードバックとして記録します。社内データを使ったポリシーチェックや自社ホストのモデルなど、Weave 内で実行できないスコアリングロジックには、リモート Scorer を使用してください。 このページでは、@weave.op でトレースした Call 向けのリモート Scorer について説明します。Agents ビューでエージェントのターンをスコアリングする方法については、リモート Scorer でエージェントのターンをスコアリングするを参照してください。Call 向けのリモート Scorer は Python SDK で設定します。TypeScript SDK には RemoteScorer は含まれていません。

リモートスコアリングの仕組み

Call は次の順序でスコアリングされます。
  1. 監視対象の Op への Call が終了します。
  2. スコアリングワーカーは、その Op を対象操作に含む実行中のモニターを検索し、各モニターのフィルターとサンプリング率を適用します。
  3. 条件に一致したモニターの各 RemoteScorer について、ワーカーは Call を含む schema_version: 1 リクエストを構築し、Scorer の認証情報を解決します。さらに、エンドポイント URL を許可されたホストと照合したうえで、POST リクエストを送信します。
  4. ワーカーは応答を検証し、その結果を Call のフィードバックとして書き込みます。また、成否にかかわらず、スコアリングの試行も Call として記録します。
リモート Scorer はモニター経由でのみ実行されます。weave.Evaluation や call.apply_scorer() では使用できません。どちらも Scorer の score() メソッドを呼び出しますが、リクエストを送信するのはスコアリングワーカーだけであるため、RemoteScorer ではこのメソッドが NotImplementedError を送出します。Weave UI の Score calls アクションでも RemoteScorer は拒否され、RemoteScorer requires a monitor というメッセージが表示されます。選択した Call ごとに 1 件のリクエストが生成され、送信は 1 回だけです。リクエストがタイムアウトした場合や応答がない場合も、Weave は再試行しません。デフォルトのタイムアウトは 30 秒です。

リモートスコアリングを有効にする

リモートスコアリングは、組織またはデプロイメントで有効化されるまではオフになっています。また、スコアリングワーカーが Scorer エンドポイントを呼び出すのは、そのホストが許可リストに登録されている場合に限られます。有効化の方法はデプロイメントタイプによって異なります。 Multi-tenant Cloud 組織でリモート Scorer を有効にするには、組織の管理者または請求管理者が次の手順を実行する必要があります。
  1. https://wandb.ai/account-settings/[ORG]/settings を開きます。[ORG] は、ご利用の project を所有する組織に置き換えてください。
  2. Remote scoring タブを選択します。
  3. Enable remote scoring をオンにします。
  4. Allowed hosts で Add host をクリックし、リモート Scorer の呼び出し先となるホストをそれぞれ入力します。リモートスコアリングを有効にした状態で保存するには、ホストを 1 つ以上指定する必要があります。そのホストのすべてのポートを許可する場合は、ポートを空欄のままにします。
  5. Save settings をクリックします。
専用クラウド デプロイメントでのリモートスコアリングの有効化と、許可するホストの設定を W&B に依頼してください。 セルフマネージド W&B Weave を W&B Self-Managed デプロイメントで実行している場合は、各スコアリングワーカー (オンライン評価ワーカー、Call スコアリングワーカー、エージェントスコアリングワーカー) で extraEnv を使用して以下の環境変数を設定します。 Weave UI にリモートスコアリングの設定と Scorer のオプションを表示するには、W&B サーバーで GORILLA_GATE_WEAVE_REMOTE_SCORING=true も設定してください。 許可ホストのルール スコアリングワーカーは、すべての scorer のエンドポイント URL を以下のルールに照らしてチェックします。scorer が OAuth を使用する場合は、OAuth トークンエンドポイント URL も別途チェックします。
  • エントリは、ホスト名が完全に一致するホストに一致します。ポートは任意で指定できます。ポートを指定しないエントリでは、そのホストのすべてのポートが許可されます。
  • *. で始まるエントリは、任意の階層のサブドメインに一致しますが、ドメイン自体には一致しません。たとえば、*.corp.example.com は a.corp.example.com や a.b.corp.example.com には一致しますが、corp.example.com には一致しません。*. に続く接尾辞には 2 つ以上のラベルが必要なため、*.com は拒否されます。ワイルドカードと IP アドレスを組み合わせることはできません。
  • オペレーターの許可リストと組織の許可リストの両方が存在する場合、URL は両方の条件を満たす必要があります。オペレーターの許可リストが空の場合、追加の制限はかかりません。許可リストが 1 つも存在しない場合、ワーカーはすべてのホストを拒否します。
  • ループバック、プライベート、内部、およびクラウドメタデータのアドレスは拒否されます。セルフマネージドでは、WF_SCORING_WORKER_REMOTE_SCORER_ALLOWED_PRIVATE_CIDRS に指定したネットワーク内のプライベートアドレスは許可されます。
  • デプロイメントで安全でない HTTP が許可されている場合を除き、HTTPS が必須です。
  • リダイレクトには追従しません。

scorer エンドポイントを構築する

エンドポイントは Weave から JSON の POST リクエストを受け入れ、スコアを JSON で返します。リファレンス実装については、サンプルコードを参照してください。

リクエスト

Weave は、スコアリング対象ごとに 1 件の HTTP POST リクエストを、次のヘッダーを付けて Scorer のエンドポイント URL に送信します。 Weave は同じスコアリング試行を複数回配信する場合があります。エンドポイントで必要に応じて、Idempotency-Key を使用して重複を排除してください。キーは同じリクエストバージョン内では変わりません。そのため、同じ Call に対する V1 リクエストと V2 リクエストでは、キーが異なります。 すべてのリクエストボディには、次のトップレベルフィールドが含まれます。 Weave は、値のないオプションフィールドを null として送信せず、省略します。また、バージョン番号を変更せずにオプションフィールドを追加する場合があるため、認識できないフィールドは無視してください。 リクエストボディと応答ボディのサイズ上限はそれぞれ 1 MiB で、内容は JSON テキストのみです。画像、オーディオ、動画が含まれることはありません。これらの制限を超える対象は送信されないため、スコアリングも行われません。1 件のリクエストに含まれる対象は 1 つです。 Call の場合、schema_version は 1 で、スコアリング対象の Call はトップレベルの original_call に格納されます。

応答

次の 2 つのフィールドを含む JSON オブジェクトを、HTTP 200 で返します。
  • schema_version: リクエストの schema_version と同じ値の整数。
  • result: 1 つのスコアオブジェクト、スコアオブジェクトのリスト、または {"scores": [...]} 形式のオブジェクト。
スコアオブジェクトには次のフィールドがあります。 Weave は、200 以外の応答をすべて Scorer の失敗として扱い、その試行のフィードバックは記録しません。また、リダイレクトには従わず、失敗として扱います。エラー応答の本文は解析されません。エンドポイントが受け付けることのないリクエストには 4xx を、一時的な問題には 5xx を返してください。 Call リクエストの場合、応答の schema_version は 1 です。次の応答は、レーティングとタグをそれぞれ 1 つずつ返します。

Weave からのリクエストを認証する

Weave は Bearer token を使用してエンドポイントに対して認証を行います。リクエストには W&B の認証情報は含まれません。このトークンは、リクエストが Weave から送信されたものであることをエンドポイント側に証明するためのものです。逆方向の証明には使用されません。各 RemoteScorer は、次の 2 つのモードのいずれかを使用します。 Scorer を登録する前に、project を所有するチームのシークレットストアにクライアントシークレットまたは Bearer token を保存してください。RemoteScorer の設定に保持されるのはシークレット名のみです。実際の値は、スコアリングワーカーがスコアリング時に解決します。

リモート Scorer を登録する

リモート Scorer は、モニターに関連付けられた RemoteScorer オブジェクトです。Python SDK を使用して作成します。 RemoteScorer をパブリッシュした後、Monitor を有効化します。この Monitor では、scorers にパブリッシュした Scorer を指定し、op_names にスコア付けの対象となる Op の名前を指定します。endpoint_url は必須です。config と auth_config はオプションです。
コードを実行すると、monitor.activate() はモニターを有効な状態でパブリッシュし、Op 名だけで指定された箇所を現在の project の完全な Op ref に展開します。

サンプルコード

weave リポジトリの examples/remote_scorer ディレクトリには、このページで説明するリクエストと応答の形式のリファレンス実装があります。このサンプルは Python と FastAPI で記述されていますが、エンドポイントの言語、フレームワーク、ホストは自由に選択できます。Call の場合、関係するファイルは次のとおりです。
  • remote_scorer_app.py: GET /health と POST /score を提供する FastAPI アプリです。
  • scoring_logic.py: フレームワークに依存しないリクエストの解析とスコアリングの処理です。独自のサービスにそのままコピーして使用できるように記述されています。Call の場合は、inputs.message の値をスコアリングします。
  • auth.py: REMOTE_SCORER_DEV_BEARER_TOKEN 環境変数と照合して Bearer token を検証する、開発専用のチェックです。
  • register_remote_scorer.py --op-name: RemoteScorer をパブリッシュし、Op に対する Monitor を有効化します。
  • trigger_test_trace.py: モニターの選択対象となる、トレースされた Call を作成します。
  • sample_request.json: Call 用の完全な V1 リクエストです。
Weave を使用せずにローカルでエンドポイントをテストするには、アプリを起動してから、サンプルリクエストを送信します。
このサンプルには Weave 0.53.0 以降が必要です。ローカルで実行した場合に検証できるのは、エンドポイントに定義したリクエストと応答の動作のみです。 Weave のスコアリングワーカーはループバックアドレスを受け付けず、ホスト型のデプロイメントでは安全でない HTTP は使用できません。

Scorer をテストする

テストの前に、許可されたホストに含まれる HTTPS URL にエンドポイントをデプロイし、登録しておきます。 スコアリング対象の Call をトリガーして、結果を確認します。
  1. 監視対象の Op を 1 回以上呼び出します。
  2. エンドポイントがリクエストを受信したことを確認します。スコアリングは非同期で実行されるため、リクエストは Call の終了後に届きます。
  3. Traces タブで Call を開き、フィードバックを確認します。
エンドポイントは、original_call に Call を含む V1 リクエストを受信します。Weave は、その結果を該当する Call のフィードバックとして記録します。

トラブルシューティング

最終更新日 2026年9月30日