LLM アプリケーションを効率的に評価するには、フィードバックを収集して分析するための堅牢なツールが必要です。W&B Weave は統合されたフィードバックシステムを備えており、ユーザーは UI から直接、または SDK を通じてプログラムから Call に対するフィードバックを提供できます。絵文字のリアクション、テキストコメント、構造化データなど、さまざまな種類のフィードバックがサポートされており、チームは次のことを行えます。
- パフォーマンス監視のための評価用データセットを構築する。
- LLM のコンテンツに関する問題を効果的に特定して解決する。
- ファインチューニングのような高度なタスク向けの例を収集する。
このガイドでは、UI と SDK の両方で Weave のフィードバック機能を使用する方法、フィードバックをクエリして管理する方法、さらに詳細な評価のために人によるアノテーションを使用する方法について説明します。
Weave UI では、Call details パネルからまたはアイコンを使用して、フィードバックを追加したり表示したりできます。
- Weave プロジェクトのサイドバーで、Traces にアクセスします。
- フィードバックを追加する Call の行を見つけます。
- リンクされた Trace 名をクリックして、トレース ツリーと Call details パネルを開きます。
- Call details のタブバーで、Feedback を選択します。
- フィードバックを追加、表示、または削除します。
- Call details のフィードバックビューの右上にあるアイコンを使って、フィードバックを追加または表示します。
- Call details のフィードバック表でフィードバックを表示または削除します。 該当するフィードバック行の一番右の列にあるごみ箱アイコンをクリックして、フィードバックを削除します。
Traces 表と各 Call details パネルにあるアイコンを使って、リアクションの追加や削除、メモの追加を行えます。
- Traces 表: Traces 表の該当する行の Feedback 列にあります。
- Call details パネル: 各 Call details パネルの右上にあります。
リアクションを追加するには:
- 絵文字アイコンをクリックします。
- サムズアップ、サムズダウンを追加するか、さらに絵文字を表示するには + アイコンをクリックします。
リアクションを削除するには:
- 削除したい絵文字リアクションにカーソルを合わせます。
- そのリアクションをクリックして削除します。
Call details パネルの Feedback 列からフィードバックを削除することもできます。
コメントを追加するには:
- コメントの吹き出しアイコンをクリックします。
- テキストボックスにメモを入力します。フィードバックメモの最大文字数は 1024 文字です。
- メモを保存するには、Enter キーを押します。メモは追加で入力できます。
フィードバックメモの最大文字数は 1024 文字です。メモがこの上限を超えると、作成されません。
フィードバックに関する SDK の使用例は、UI の Call details パネルにある Use タブで確認できます。
Weave Python SDK を使用すると、call に対してプログラムから 追加、削除、およびフィードバックのクエリを実行できます。TypeScript SDK は現在、フィードバック機能をサポートしていません。
SDK を使用して、Weave プロジェクトのフィードバックをクエリできます。SDK は、次のフィードバックのクエリ操作をサポートしています。
client.get_feedback(): プロジェクト内のすべてのフィードバックを返します。
client.get_feedback("<feedback_uuid>"): <feedback_uuid> で指定した特定のフィードバックオブジェクトをコレクションとして返します。
client.get_feedback(reaction="<reaction_type>"): 特定のリアクションタイプのすべてのフィードバックオブジェクトを返します。
client.get_feedback() では、各フィードバックオブジェクトについて次の追加情報も取得できます。
id: フィードバックオブジェクトの ID。
created_at: フィードバックオブジェクトの作成時刻情報。
feedback_type: フィードバックのタイプ (reaction、note、custom) 。
payload: フィードバックのペイロード。
import weave
client = weave.init('intro-example')
# プロジェクト内のすべてのフィードバックを取得します
all_feedback = client.get_feedback()
# ID で特定のフィードバックオブジェクトを取得します。
# API はコレクションを返し、最大で 1 件の項目が含まれる想定です。
one_feedback = client.get_feedback("<feedback_uuid>")[0]
# 特定のリアクションを持つすべてのフィードバックオブジェクトを取得します。offset と limit を指定できます。
thumbs_up = client.get_feedback(reaction="👍", limit=10)
# 取得後、各フィードバックオブジェクトの詳細を表示します。
for f in client.get_feedback():
print(f.id)
print(f.created_at)
print(f.feedback_type)
print(f.payload)
この機能はまだ TypeScript では利用できません。
Call の UUID を使って、Call にフィードバックを追加できます。UUID を使って特定の Call を取得するには、Call の実行中または実行後に UUID を取得してください。SDK では、Call にフィードバックを追加するために次の操作をサポートしています。
call.feedback.add_reaction("<reaction_type>"): 👍 など、サポートされている <reaction_types> (絵文字) を 1 つ追加します。
call.feedback.add_note("<note>"): ノートを追加します。
call.feedback.add("<label>", <object>): <label> で指定したカスタム フィードバック <object> を追加します。
フィードバックノートの最大文字数は 1024 文字です。この上限を超えるノートは作成されません。
import weave
client = weave.init('intro-example')
call = client.get_call("<call_uuid>")
# 絵文字リアクションを追加
call.feedback.add_reaction("👍")
# ノートを追加
call.feedback.add_note("this is a note")
# カスタムのキー/値ペアを追加します。
# 最初の引数はユーザー定義の "type" 文字列です。
# フィードバックは JSON でシリアライズ可能であり、シリアライズ後のサイズが 1 KB 未満である必要があります。
call.feedback.add("correctness", { "value": 5 })
この機能は TypeScript ではまだ利用できません。
Call の直後にフィードバックを追加する必要がある場合は、Call の実行中または実行後に、プログラムで Call UUID を取得できます。
Call 実行中
Call 実行中に UUID を取得するには、現在の Call を取得し、その ID を返します。
import weave
weave.init("uuid")
@weave.op()
def simple_operation(input_value):
# 単純な処理を実行
output = f"Processed {input_value}"
# 現在の Call ID を取得
current_call = weave.require_current_call()
call_id = current_call.id
return output, call_id
この機能は TypeScript ではまだ利用できません。
Call 実行後
また、call() method を使用して operation を実行し、Call の実行後に ID を取得することもできます。
import weave
weave.init("uuid")
@weave.op()
def simple_operation(input_value):
return f"Processed {input_value}"
# operation を実行し、結果と call ID を取得する
result, call = simple_operation.call("example input")
call_id = call.id
この機能は TypeScript ではまだ利用できません。
UUID を指定すると、特定の call からフィードバックを削除できます。
call.feedback.purge("<feedback_uuid>")
この機能は、TypeScript ではまだ利用できません。
人によるアノテーションは Weave UI でサポートされています。この機能を使用すると、フィードバックとして追加する人手入力のデータ用に、トレースにカスタムフィールドを作成できます。人によるアノテーションを行うには、まず UI または API を使用して Human Annotation スコアラーを作成する必要があります。その後、UI でそのスコアラーを使用してアノテーションを作成 したり、API を使用してアノテーションスコアラーを変更 したりできます。
UI で Human Annotation スコアラーを作成する
UI で Human Annotation スコアラーを作成するには、次の手順に従います。
- プロジェクトのサイドバーで、Assets にアクセスします。
- Assets のナビゲーションパネルで、Scorers をクリックします。
- Scorers パネルのヘッダーで、New scorer をクリックします。
- Create Scorer モーダルダイアログで、次の項目を設定します。
Scorer type を Human annotation に設定
Name
Description
Type。boolean や integer など、収集するフィードバックのタイプを指定します。
- Create scorer をクリックします。これで、スコアラーを使用してアノテーションを付けられます。
次の例では、人手アノテーターに、LLM が取り込んだドキュメントの種類を選択するよう求めています。そのため、スコア設定で選択する Type は、指定可能なドキュメントタイプを含む enum です。
UI で Human Annotation スコアラーを使用する
Human Annotation スコアラーを作成すると、Traces ページで使用できるようになります。
スコアラーを使用するには、次の手順を実行します。
-
プロジェクトのサイドバーで、Traces にアクセスします。
-
Human Annotation を追加する対象の Call の行を見つけます。
-
リンクされた Trace 名をクリックして、トレース ツリーと Call details パネルを開きます。
-
Call details タブバーの右上で、Show feedback ボタンをクリックします。
使用可能な Human Annotation スコアラーが、追加の Annotate パネルに表示されます。
-
アノテーションを追加します。
-
Save をクリックします。
-
Call details パネルのタブバーで、Feedback タブをクリックして Feedback 表を表示します。新しいアノテーションが表に表示されます。メインの Traces 表の Annotations 列でもアノテーションを確認できます。
最新の情報を表示するには、Traces 表を更新してください。
API を使用して Human Annotation スコアラーを作成する
API 経由で Human Annotation スコアラーを作成することもできます。各スコアラーはそれぞれ独立したオブジェクトで、個別に作成・更新します。プログラムから Human Annotation スコアラーを作成するには、次の手順を実行します。
weave.flow.annotation_spec から AnnotationSpec クラスをインポートします。
weave の publish method を使用してスコアラーを作成します。
次の例では、2 つのスコアラーを作成しています。1 つ目のスコアラー Temperature は、LLM call の知覚温度をスコアリングするために使用します。2 つ目のスコアラー Tone は、LLM response のトーンをスコアリングするために使用します。各スコアラーは、対応するオブジェクト ID (temperature-scorer と tone-scorer) を指定して save を使用して作成されます。
import weave
from weave.flow.annotation_spec import AnnotationSpec
client = weave.init("feedback-example")
spec1 = AnnotationSpec(
name="Temperature",
description="The perceived temperature of the llm call",
field_schema={
"type": "number",
"minimum": -1,
"maximum": 1,
}
)
spec2 = AnnotationSpec(
name="Tone",
description="The tone of the llm response",
field_schema={
"type": "string",
"enum": ["Aggressive", "Neutral", "Polite", "N/A"],
},
)
weave.publish(spec1, "temperature-scorer")
weave.publish(spec2, "tone-scorer")
この機能はまだ TypeScript では利用できません。
API を使用して Human Annotation スコアラーを更新する
API を使用して Human Annotation スコアラーを作成するの続きとして、次の例では publish 時に元のオブジェクト ID (temperature-scorer) を使用し、Temperature スコアラーの更新版を作成します。これにより、すべてのバージョンの履歴を持つ更新済みオブジェクトが作成されます。
Human Annotation スコアラーのオブジェクト履歴は、Human annotations 配下の Scorers タブで確認できます。
import weave
from weave.flow.annotation_spec import AnnotationSpec
client = weave.init("feedback-example")
# スコアラーの新しいバージョンを作成
spec1 = AnnotationSpec(
name="Temperature",
description="llm call の体感温度",
field_schema={
"type": "integer", # <<- タイプを integer に変更
"minimum": -1,
"maximum": 1,
}
)
weave.publish(spec1, "temperature-scorer")
この機能はまだ TypeScript では利用できません。
API を使用して Human Annotation スコアラーを利用する
feedback API では、特別な形式の名前と annotation_ref フィールドを指定することで、Human Annotation スコアラーを使用できます。annotation_spec_ref は、UI で該当するタブを選択して取得するか、AnnotationSpec の作成時に取得できます。
import weave
client = weave.init("feedback-example")
call = client.get_call("<call_id>")
annotation_spec = weave.ref("<annotation_spec_ref_uri>")
call.feedback.add(
feedback_type="wandb.annotation." + annotation_spec.name,
payload={"value": 1},
annotation_ref=annotation_spec.uri(),
)