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

UIでフィードバックを提供する

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

コール詳細ページから

  1. サイドバーで、Tracesに移動します。
  2. フィードバックを追加したいコールの行を見つけます。
  3. コール詳細ページを開きます。
  4. コールのFeedback列を選択します。
  5. フィードバックの追加、表示、または削除:
Screenshot of Feedback tab in call details

アイコンを使用する

コールテーブルと個々のコール詳細ページの両方に配置されているアイコンを使用して、リアクションの追加や削除、メモの追加ができます。
  • コールテーブル:コールテーブルの適切な行のFeedback列にあります。
  • コール詳細ページ:各コール詳細ページの右上隅にあります。
リアクションを追加するには:
  1. 絵文字アイコンをクリックします。
  2. サムズアップ、サムズダウンを追加するか、+アイコンをクリックしてより多くの絵文字を表示します。
リアクションを削除するには:
  1. 削除したい絵文字リアクションにカーソルを合わせます。
  2. リアクションをクリックして削除します。
コール詳細ページのFeedback列からもフィードバックを削除できます。
コメントを追加するには:
  1. コメントバブルアイコンをクリックします。
  2. テキストボックスにメモを追加します。
  3. メモを保存するには、Enterキーを押します。追加のメモを追加できます。
フィードバックノートの最大文字数は1024文字です。ノートがこの制限を超えると、作成されません。
Screenshot of calls grid with feedback column

SDKを通じてフィードバックを提供する

UIでのフィードバックの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:フィードバックのタイプ(リアクション、ノート、カスタム)。
  • payload:フィードバックのペイロード
import weave
client = weave.init('intro-example')

# Get all feedback in a project
all_feedback = client.get_feedback()

# Fetch a specific feedback object by id.
# The API returns a collection, which is expected to contain at most one item.
one_feedback = client.get_feedback("<feedback_uuid>")[0]

# Find all feedback objects with a specific reaction. You can specify offset and limit.
thumbs_up = client.get_feedback(reaction="👍", limit=10)

# After retrieval, view the details of individual feedback objects.
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>(絵文字)の1つを追加します、例えば👍など。
  • call.feedback.add_note("<note>"):ノートを追加します。
  • call.feedback.add("<label>", <object>):カスタムフィードバック<object><label>で指定して追加します。
フィードバックノートの最大文字数は1024文字です。ノートがこの制限を超えると、作成されません。
import weave
client = weave.init('intro-example')

call = client.get_call("<call_uuid>")

# Adding an emoji reaction
call.feedback.add_reaction("👍")

# Adding a note
call.feedback.add_note("this is a note")

# Adding custom key/value pairs.
# The first argument is a user-defined "type" string.
# Feedback must be JSON serializable and less than 1 KB when serialized.
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}"

# Execute the operation and retrieve the result and call ID
result, call = simple_operation.call("example input")
call_id = call.id

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

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

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

人間によるアノテーションはWeave UIでサポートされています。人間によるアノテーションを行うには、まずUIまたはAPIを使用して人間アノテーションスコアラーを作成する必要があります。その後、UIでスコアラーを使用してアノテーションを行いAPIを使用してアノテーションスコアラーを変更することができます。

UIで人間アノテーションスコアラーを作成する

UIで人間アノテーションスコアラーを作成するには、次の手順に従います:
  1. サイドバーで、Scorersに移動します。
  2. 右上隅で、+ Create scorerをクリックします。
  3. 設定ページで、以下を設定します:
    • Scorer typeHuman annotation
    • Name
    • Description
    • Typeに設定します。これは収集されるフィードバックのタイプを決定します。例えばbooleanintegerなどです。
  4. Create scorerをクリックします。これでスコアラーを使用してアノテーションを行うことができます。
次の例では、人間のアノテーターはLLMが取り込んだドキュメントのタイプを選択するよう求められています。そのため、スコア設定のために選択されたTypeは、可能なドキュメントタイプを含むenumです。 Human Annotation scorer form

UIで人間アノテーションスコアラーを使用する

人間アノテーションスコアラーを作成すると、自動的にFeedback コール詳細ページのサイドバーに設定されたオプションが表示されます。スコアラーを使用するには、次の手順に従います:
  1. サイドバーで、次に移動します Traces
  2. 人間のアノテーションを追加したいコールの行を見つけます。
  3. コール詳細ページを開きます。
  4. 右上隅で、Show feedback ボタンをクリックします。 Marker icon in call header 利用可能な人間のアノテーションスコアラーがサイドバーに表示されます。 Human Annotation scorer feedback sidebar
  5. アノテーションを作成します。
  6. クリック Save
  7. コール詳細ページで、Feedback をクリックしてコールテーブルを表示します。新しいアノテーションがテーブルに表示されます。また、Annotations 列で Traces のコールテーブルでアノテーションを確認することもできます。
    最新の情報を表示するには、コールテーブルを更新してください。
Human Annotation scorer feedback in calls table

APIを使用して人間のアノテーションスコアラーを作成する

人間のアノテーションスコアラーはAPIを通じても作成できます。各スコアラーは独自のオブジェクトであり、独立して作成および更新されます。プログラムで人間のアノテーションスコアラーを作成するには、次の手順に従います:
  1. インポート AnnotationSpec クラスを weave.flow.annotation_spec
  2. 使用 publish メソッドを weave からスコアラーを作成します。
次の例では、2つのスコアラーが作成されています。最初のスコアラー、Temperatureは、LLMコールの知覚温度をスコアリングするために使用されます。2番目のスコアラー、Toneは、LLMレスポンスのトーンをスコアリングするために使用されます。各スコアラーはsaveを使用して関連するオブジェクトID(temperature-scorertone-scorer)で作成されます。
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を使用して人間のアノテーションスコアラーを変更する

拡張して APIを使用して人間のアノテーションスコアラーを作成する、次の例では元のオブジェクトID(Temperatureスコアラーの更新バージョンを作成します。temperature-scorer)をpublishで使用します。結果は、すべてのバージョンの履歴を持つ更新されたオブジェクトです。
人間のアノテーションスコアラーオブジェクトの履歴はScorersタブのHuman annotationsで確認できます。
import weave
from weave.flow.annotation_spec import AnnotationSpec

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

# create a new version of the scorer
spec1 = AnnotationSpec(
  name="Temperature",
  description="The perceived temperature of the llm call",
  field_schema={
    "type": "integer",  # <<- change type to integer
    "minimum": -1,
    "maximum": 1,
  }
)
weave.publish(spec1, "temperature-scorer")
Human Annotation scorer history

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

フィードバックAPIでは、特別に構築された名前とannotation_refフィールドを指定することで、人間のアノテーションスコアラーを使用できます。annotation_spec_refは、適切なタブを選択するか、AnnotationSpecの作成中にUIから取得できます。
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(),
)