Skip to main content
W&B Weave は、深くネストされたパターンを含め、同期および非同期のジェネレーター関数のトレースをサポートしています。このページでは、ジェネレーター関数を @weave.op でデコレートし、その入力、yield された出力、ネストされた Call の階層全体を Weave が取得できるようにする方法を説明します。ストリーミング処理や遅延評価を行うコードパスがあり、その出力を他のトレースと一緒に Weights & Biases UI で確認したい場合に活用してください。
ジェネレーターは値を遅延的に yield するため、Weave が出力をログするのは、ジェネレーターを完全に消費したとき (たとえば、リストに変換したとき) だけです。 トレースに出力が確実に記録されるよう、ジェネレーターを完全に消費してください (たとえば、list() を使用します)。
次のスクリーンショットは、前述のコードのトレースを選択した状態の Traces ページです。中央のパネルには、選択したトレースのトレース ツリーが表示されます。トレース ツリーの階層には、deeply_nested_generator、nested_generator、inner の各 Op が表示されています。 深くネストされた Op を示すトレース ツリーが選択された Weave トレース ページ

ジェネレーターを消費する

このセクションでは、Weave でジェネレーターの出力を記録するにはジェネレーターを消費する必要がある理由と、有効な消費パターンについて説明します。 Weave がジェネレーターの出力を取得するのは、ジェネレーターを最後まで消費した後に限られます。ジェネレーターは反復処理によって消費します (例:list()、for ループ、または要素がなくなるまで next() を呼び出す) 。非同期ジェネレーターの場合も同様に、async for などの方法で消費する必要があります。 @weave.op で関数やメソッドをデコレートする方法の詳細については、Call を作成するを参照してください。

yield された値を 1 つのトレースに集約する

yield された値の生のシーケンスではなく、結合した結果 (連結した string やリストなど) を Weave に記録させたい場合は、アキュムレーターを使用します。 weave.op の accumulator パラメーターを使用すると、ジェネレーター関数から yield された値をどのように結合するかをカスタマイズできます。たとえば、ストリーミングされたテキストトークンを 1 つの string に連結できます。アキュムレーターは 2 つの引数を取る関数です。Weave は yield された値ごとにこの関数を 1 回呼び出し、結果を段階的に構築します。
accumulator パラメーターは TypeScript では使用できません。
次の例は、yield された各値をリストに追加するカスタムアキュムレーターです。ジェネレーターを最後まで消費すると、Weave はこのリストを Call の出力として記録します。
最終更新日 2026年9月30日