メインコンテンツへスキップ
LLM アプリケーションを効率的に評価するには、フィードバックを収集・分析するための堅牢なツールが必要です。Weave は統合されたフィードバックシステムを提供しており、ユーザーは UI から直接、または SDK を介してプログラムからコールに対するフィードバックを送信できます。絵文字リアクション、テキストコメント、構造化データなど、さまざまな種類のフィードバックに対応しており、チームは次のことができます。
  • パフォーマンス監視のための評価用データセットを構築する。
  • LLM コンテンツの問題を特定して効果的に解決する。
  • ファインチューニングなど高度なタスクのための例を収集する。
このガイドでは、UI と SDK の両方で Weave のフィードバック機能を使用する方法、フィードバックのクエリと管理方法、および詳細な評価のために人手によるアノテーションを使用する方法を説明します。

UI でフィードバックを行う

Weave の UI では、コール詳細ページから または アイコンを使用して、フィードバックを追加したり表示したりできます。

コール詳細ページから

  1. サイドバーから Traces に移動します。
  2. フィードバックを追加するコールの行を探します。
  3. コール詳細ページを開きます。
  4. コールの Feedback 列を選択します。
  5. フィードバックを追加、表示、または削除します:
    • コール詳細のフィードバックビュー右上にある アイコンを使ってフィードバックを追加および表示します
    • コール詳細のフィードバックテーブルからフィードバックを表示および削除します。 該当するフィードバック行の一番右の列にあるゴミ箱アイコンをクリックしてフィードバックを削除します。
コール詳細の Feedback タブのスクリーンショット

アイコンを使用する

コールテーブルと各コール詳細ページの両方にあるアイコンを使って、リアクションの追加・削除やメモの追加ができます。
  • Call table: コールテーブル内の該当する行の Feedback 列にあります。
  • Call details page: 各コール詳細ページの右上にあります。
リアクションを追加するには:
  1. 絵文字アイコンをクリックします。
  2. サムズアップ、サムズダウンを追加するか、その他の絵文字を表示するには + アイコンをクリックします。
リアクションを削除するには:
  1. 削除したい絵文字リアクションにカーソルを合わせます。
  2. 削除するリアクションをクリックします。
コール詳細ページの Feedback からフィードバックを削除することもできます。
コメントを追加するには:
  1. コメント吹き出しアイコンをクリックします。
  2. テキストボックスにメモを入力します。
  3. メモを保存するには Enter キーを押します。メモは複数追加できます。
フィードバックメモに入力できる最大文字数は 1024 です。この上限を超えるメモは作成されません。
Screenshot of calls grid with feedback column

SDK 経由でフィードバックを送信する

フィードバック用の SDK 利用例は、コール詳細ページの Use タブで確認できます。
Weave 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)

コールにフィードバックを追加する

コールの UUID を使用して、そのコールにフィードバックを追加できます。特定のコールを取得するには、UUID を使ってコールの実行中または実行後に取得します。SDK は、コールにフィードバックを追加するために次の操作をサポートしています。
  • call.feedback.add_reaction("<reaction_type>"): 👍 など、サポートされている <reaction_types>(絵文字)のいずれかを追加します。
  • 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 })

コール UUID を取得する

コールの直後にフィードバックを追加する必要がある場合、コールの実行中または実行後にプログラムでコール UUID を取得できます。
呼び出しの実行中
呼び出しの実行中に UUID を取得するには、現在の呼び出しオブジェクトを取得し、その ID を返します。

import weave
weave.init("uuid")

@weave.op()
def simple_operation(input_value):
    # Perform some simple operation
    output = f"Processed {input_value}"
    # Get the current call ID
    current_call = weave.require_current_call()
    call_id = current_call.id
    return output, call_id
コール実行後
別の方法としては、call() メソッドを使用してオペレーションを実行し、コール実行後に ID を取得することもできます:
import weave
weave.init("uuid")

@weave.op()
def simple_operation(input_value):
    return f"Processed {input_value}"

# オペレーションを実行して、結果とコール ID を取得する
result, call = simple_operation.call("example input")
call_id = call.id

コールからフィードバックを削除する

UUID を指定することで、特定のコールからフィードバックを削除できます。
call.feedback.purge("<feedback_uuid>")

人によるアノテーションを追加する

人によるアノテーションは Weave の UI で利用できます。人によるアノテーションを行うには、まず UI または API を使って Human Annotation スコアラーを作成する必要があります。その後、UI でスコアラーを使ってアノテーションを行いAPI を使って Human Annotation スコアラーを変更できます

UI で human annotation scorer を作成する

UI で human annotation scorer を作成するには、次の手順を実行します。
  1. サイドバーから Scorers に移動します。
  2. 画面右上の + Create scorer をクリックします。
  3. 設定ページで、次の項目を設定します:
    • Scorer typeHuman annotation に設定
    • Name
    • Description
    • 収集するフィードバックの型(booleaninteger など)を決定する Type
  4. Create scorer をクリックします。これで、scorer を使ってアノテーションを行うことができます。
次の例では、人間のアノテーターに対して、LLM がどの種類のドキュメントを取り込んだかを選択するよう依頼しています。そのため、スコア設定で選択されている Type は、取り得るドキュメント種別を列挙した enum になっています。
Human Annotation scorer フォーム

UI で human annotation scorer を使用する

human annotation scorer を作成すると、設定したオプションとともに、コール詳細ページの Feedback サイドバーに自動的に表示されます。scorer を使用するには、次の手順を実行します。
  1. サイドバーで Traces に移動します。
  2. human annotation を追加したいコールの行を探します。
  3. コールの詳細ページを開きます。
  4. 右上隅の Show feedback ボタンをクリックします。 コールヘッダーのマーカーアイコン 使用可能な human annotation scorer がサイドバーに表示されます。 Human Annotation scorer のフィードバックサイドバー
  5. アノテーションを入力します。
  6. Save をクリックします。
  7. コール詳細ページで Feedback をクリックして、コールテーブルを表示します。新しいアノテーションがテーブルに表示されます。Traces のコールテーブルの Annotations 列からもアノテーションを確認できます。
    コールテーブルをリフレッシュして、最新の情報を表示してください。
コールテーブル内の Human Annotation scorer のフィードバック

API を使用して human annotation スコアラーを作成する

human annotation スコアラーは API を通じて作成することもできます。各スコアラーはそれ自体が独立したオブジェクトであり、個別に作成および更新されます。human annotation スコアラーをプログラムから作成するには、次の手順を実行します。
  1. weave.flow.annotation_spec から AnnotationSpec クラスをインポートします。
  2. weavepublish メソッドを使用してスコアラーを作成します。
次の例では、2 つのスコアラーを作成します。最初のスコアラー Temperature は、LLM 呼び出しの知覚上の温度をスコアリングするために使用します。2 つ目のスコアラー Tone は、LLM 応答のトーンをスコアリングするために使用します。各スコアラーは、関連付けられたオブジェクト ID(temperature-scorertone-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")

API を使用して human annotation scorer を変更する

API を使用して human annotation scorer を作成するの内容を発展させて、次の例では publish 時に元のオブジェクト ID(temperature-scorer)を使用して、Temperature scorer の更新版を作成します。これにより、すべてのバージョン履歴が保持されたオブジェクトが更新されます。
Human annotationsScorers タブで、human annotation scorer オブジェクトの履歴を表示できます。
import weave
from weave.flow.annotation_spec import AnnotationSpec

client = weave.init("feedback-example")

# scorer の新しいバージョンを作成する
spec1 = AnnotationSpec(
  name="Temperature",
  description="LLM 呼び出しの体感的な温度",
  field_schema={
    "type": "integer",  # <<- 型を integer に変更
    "minimum": -1,
    "maximum": 1,
  }
)
weave.publish(spec1, "temperature-scorer")
Human annotation scorer の履歴

API を使用して人間によるアノテーションスコアラーを利用する

Feedback API を使用すると、特別な形式の name と annotation_ref フィールドを指定することで、人間によるアノテーションスコアラーを利用できます。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(),
)