メインコンテンツへスキップ
Weave データセットは、LLM アプリケーションの評価や並べて比較する用途に向けて、例の整理、収集、トラッキング、バージョン管理に役立ちます。このページの手順に従うと、自分やチームメンバーが LLM アプリケーションの動作を継続的に評価し、改善を重ね、比較するために使える、再利用可能でバージョン管理された例のコレクションを作成できます。Dataset は、プログラムからも UI からも作成して操作できます。 このページは、コードまたは Weave UI を通じて評価データを管理したいエンジニアやチームメンバーを対象としています。内容は次のとおりです。
  • Python と TypeScript での基本的な Dataset の操作と、使い始める方法。
  • Weave の Call などのオブジェクトから、Python と TypeScript で Dataset を作成する方法。
  • UI で Dataset に対して使用できる操作。

Dataset クイックスタート

以下のコードサンプルでは、Python と TypeScript を使用して基本的な Dataset 操作を実行する方法を示します。SDK を使用すると、次のことができます。
  • Dataset を作成する
  • Dataset を公開する
  • Dataset を取得する
  • Dataset 内の特定の例にアクセスする
タブを選択すると、Python と TypeScript 向けのコードを確認できます。
import weave
from weave import Dataset
# Weave を初期化
weave.init('intro-example')

# データセットを作成
dataset = Dataset(
    name='grammar',
    rows=[
        {'id': '0', 'sentence': "He no likes ice cream.", 'correction': "He doesn't like ice cream."},
        {'id': '1', 'sentence': "She goed to the store.", 'correction': "She went to the store."},
        {'id': '2', 'sentence': "They plays video games all day.", 'correction': "They play video games all day."}
    ]
)

# データセットを公開
weave.publish(dataset)

# データセットを取得
dataset_ref = weave.ref('grammar').get()

# 特定の例にアクセス
example_label = dataset_ref.rows[2]['sentence']

他のオブジェクトからデータセットを作成する

このセクションでは、記録済みの Weave Call や既存の表形式データなど、すでに手元にあるデータから Dataset を作成する方法を示します。これにより、例を手動で再入力する必要がなくなります。
Python では、DatasetCall のような一般的な Weave オブジェクトや、pandas.DataFrame のような Python オブジェクトから作成することもできます。この機能は、特定の例から例示用の Dataset を作成したい場合に便利です。

Weave Call

1 つ以上の Weave Call から Dataset を作成するには、Call オブジェクトを取得し、from_calls method に list として渡します。
@weave.op
def model(task: str) -> str:
    return f"Now working on {task}"

res1, call1 = model.call(task="fetch")
res2, call2 = model.call(task="parse")

dataset = Dataset.from_calls([call1, call2])
# これで、モデルの評価などに dataset を使用できます。

Pandas DataFrame

Pandas の DataFrame object から Dataset を作成するには、from_pandas method を使用します。Dataset を Pandas に戻すには、to_pandas を使用します。
import pandas as pd

df = pd.DataFrame([
    {'id': '0', 'sentence': "He no likes ice cream.", 'correction': "He doesn't like ice cream."},
    {'id': '1', 'sentence': "She goed to the store.", 'correction': "She went to the store."},
    {'id': '2', 'sentence': "They plays video games all day.", 'correction': "They play video games all day."}
])
dataset = Dataset.from_pandas(df)
df2 = dataset.to_pandas()

assert df.equals(df2)

Hugging Face Datasets

Hugging Face の datasets.Dataset または datasets.DatasetDict object から Dataset を作成するには、まず必要な dependencies がインストールされていることを確認します。
pip install weave[huggingface]
次に、from_hf method を使用します。複数の split (‘train’、‘test’、‘validation’ など) を持つ DatasetDict を指定すると、Weave は自動的に ‘train’ split を使用し、警告を表示します。‘train’ split が存在しない場合はエラーになります。特定の split を直接指定することもできます (例: hf_dataset_dict['test']) 。weave.Dataset を Hugging Face の Dataset に戻すには、to_hf method を使用します。
# datasets がインストールされていることを確認します: pip install datasets
from datasets import Dataset as HFDataset, DatasetDict

# HF Dataset の例
hf_rows = [
    {'id': '0', 'sentence': "He no likes ice cream.", 'correction': "He doesn't like ice cream."},
    {'id': '1', 'sentence': "She goed to the store.", 'correction': "She went to the store."},
]
hf_ds = HFDataset.from_list(hf_rows)
weave_ds_from_hf = Dataset.from_hf(hf_ds)

# HF Dataset に戻す
converted_hf_ds = weave_ds_from_hf.to_hf()

# HF DatasetDict の例(デフォルトで 'train' split を使用)
hf_dict = DatasetDict({
    'train': HFDataset.from_list(hf_rows),
    'test': HFDataset.from_list([{'id': '2', 'sentence': "Test sentence", 'correction': "Test correction"}])
})
# これにより警告が表示され、'train' split が使用されます
weave_ds_from_dict = Dataset.from_hf(hf_dict)

# 特定の split を指定する
weave_ds_from_test_split = Dataset.from_hf(hf_dict['test'])

UI でデータセットを作成、編集、削除する

Dataset は UI で作成、編集、削除できます。Weave UI でデータセットを作成すると、コードを編集しなくても、あなたやチームの非エンジニアのメンバーが、例や質問、そのほかのエージェント テスト用データを含む共有可能なデータセットを作成し、キュレーションできます。 以下の手順では、UI でこれらの各タスクを実行する方法を順に説明します。ノートブックやスクリプトではなく、元になったトレースとあわせて評価データを管理したい場合に使用してください。

新しいデータセットを作成する

次の手順では、Weave プロジェクト内の既存の1つ以上の call から新しい Dataset を作成します。完了すると、評価で参照したりチームと共有したりできる公開済みの Dataset が作成されます。
  1. 編集する Weave プロジェクトにアクセスします。
  2. サイドバーで Traces を選択します。
  3. 新しい Dataset を作成する対象の call を1つ以上選択します。
  4. 右上のメニューで、Add selected rows to a dataset アイコン (ごみ箱アイコンの横にあります) をクリックします。
  5. Choose a dataset ドロップダウンで、Create new を選択します。Dataset name フィールドが表示されます。
  6. Dataset name フィールドにデータセット名を入力します。Configure dataset fields のオプションが表示されます。
    Dataset 名は英字または数字で始める必要があり、使用できるのは英字、数字、ハイフン、アンダースコアのみです。
  7. 任意: Configure dataset fields で、データセットに含める call のフィールドを選択します。
    • 選択した各フィールドの列名はカスタマイズできます。
    • 新しい Dataset に含めるフィールドを一部だけ選択することも、すべてのフィールドの選択を解除することもできます。
  8. データセットフィールドの設定が完了したら、Next をクリックします。新しい Dataset のプレビューが表示されます。
  9. 任意: Dataset 内の編集可能なフィールドをクリックして、エントリを編集します。
  10. Create dataset をクリックします。Weave により新しいデータセットが作成されます。
  11. 確認ポップアップで、View the dataset をクリックして新しい Dataset を表示します。別の方法として、Datasets タブに移動することもできます。

データセットを編集する

既存の Dataset に新しい行を追加し、新しいバージョンを公開するには、次の手順を実行します。UI での編集は、コードを変更せずに評価データを拡張または修正したい場合に役立ちます。
  1. 編集する Dataset が含まれている Weave プロジェクトにアクセスします。
  2. サイドバーで Datasets を選択します。利用可能な Dataset が表示されます。 Dataset UI
  3. Object 列で、編集する Dataset の名前とバージョンをクリックします。名前、バージョン、作成者、Dataset の行などの情報が表示されたポップアウト モーダルが開きます。 Dataset 情報を表示
  4. モーダルの右上にある Edit dataset ボタン (鉛筆アイコン) をクリックします。モーダルの下部に + Add row ボタンが表示されます。 Dataset UI- Add row icon
  5. + Add row をクリックします。既存の Dataset の行の上に新しい行が表示され、Dataset に新しい行を追加できることを示します。 Dataset UI
  6. 新しい行にデータを追加するには、その行の追加先の列をクリックします。Dataset の行にあるデフォルトの id 列は、Weave によって作成時に自動的に割り当てられるため、編集できません。編集モーダルが表示され、書式設定用の TextCodeDiff オプションを選択できます。 Dataset UI - 列にデータを追加して書式設定する。
  7. 新しい行でデータを追加する各列について、step 6 を繰り返します。 Dataset UI - すべての列にデータを追加。
  8. Dataset に追加する各行について、step 5 を繰り返します。
  9. 編集が完了したら、モーダルの右上にある Publish をクリックして Dataset を公開します。変更を公開しない場合は、Cancel をクリックします。 Dataset UI - 公開またはキャンセル。 公開後、更新された行を含む新しいバージョンの Dataset を UI で利用できます。 Dataset UI - 公開済みメタデータ。 Dataset UI - 公開済みの行。

データセットを削除する

不要になった Dataset を Weave プロジェクトから削除する場合は、以下の手順を使用します。
  1. 削除したい Dataset が含まれる Weave プロジェクトにアクセスします。
  2. サイドバーから Datasets を選択します。利用可能な Dataset が表示されます。
  3. Object 列で、削除する Dataset の名前とバージョンをクリックします。名前、バージョン、作成者、Dataset の行などの情報を表示するポップアウト モーダルが開きます。
  4. モーダルの右上にあるゴミ箱アイコンをクリックします。 Dataset の削除確認を求めるポップアップモーダルが表示されます。 Dataset UI - 削除確認モーダル。
  5. ポップアップモーダルで、Dataset を削除するには Delete をクリックします。削除したくない場合は、Cancel をクリックします。 Dataset は削除され、Weave ダッシュボードの Datasets タブには表示されなくなります。

新しいエージェントのトレースを Dataset に追加する

セッション、ターン、ツールコールなどのエージェントのトレースを Dataset に追加するには、次の手順に従います。
  1. wandb.ai にアクセスし、project を選択します。
  2. Weave のプロジェクトのサイドバーで、Agents をクリックします。
  3. 上部のタブバーで、Conversations をクリックします。
  4. Conversations の表で会話の行を選択し、会話の詳細サイドパネルを表示します。会話の詳細サイドパネルのヘッダーには、エージェント名と UUID が表示されます。
  5. 会話の詳細サイドパネルのヘッダーで、右側にある表アイコンをクリックして Add example to dataset drawer を開きます。 データセットに項目を追加するための表アイコンが表示された Agent conversation details panel header。
  6. Choose a dataset で、ドロップダウンを使用して、トレースの追加先となるデータセットを選択します。
  7. Select context で、データセットに追加するメッセージを選択します。Next をクリックします。
  8. 選択内容を確認し、Add to dataset をクリックします。

データセットに新しいトレースを追加する

ops と calls から生成されたトレースを Dataset に追加するには:
  1. 編集したい Weave プロジェクトにアクセスします。
  2. サイドバーで Traces を選択します。
  3. 新しい例を作成したい Datasets を含む Call を 1 つ以上選択します。
  4. 右上のメニューで、Add selected rows to a dataset アイコン (ごみ箱アイコンの横) をクリックします。必要に応じて Show latest versions をオフにすると、利用可能なすべてのデータセットの全バージョンが表示されます。
  5. Choose a dataset ドロップダウンから、例を追加する Dataset を選択します。Configure field mapping オプションが表示されます。
  6. 任意: Configure field mapping では、Call のフィールドを対応するデータセット列にどうマッピングするかを調整できます。
  7. フィールドマッピングの設定が完了したら、Next をクリックします。新しい Dataset のプレビューが表示されます。
  8. 空の行 (緑色) に、新しい例の値を追加します。id フィールドは編集できず、Weave が自動的に作成します。
  9. Add to dataset をクリックします。Configure field mapping 画面に戻るには、Back をクリックします。
  10. 確認ポップアップで、変更を確認するには View the dataset をクリックします。あるいは、Datasets タブにアクセスして Dataset の更新を確認します。

その他のデータセット操作

このセクションでは、作業対象の Dataset がすでにある場合に役立つ、追加の SDK 操作について説明します。

行の選択

select method を使用すると、インデックスを指定して Dataset から特定の行を選択できます。これは、データのサブセットを作成する際に便利です。たとえば、少数の examples の一部に対して Evaluate したい場合に役立ちます。
import weave
from weave import Dataset

# サンプルデータセットを作成
dataset = Dataset(rows=[
    {'col_a': 1, 'col_b': 'x'},
    {'col_a': 2, 'col_b': 'y'},
    {'col_a': 3, 'col_b': 'z'},
    {'col_a': 4, 'col_b': 'w'},
])

# インデックス 0 と 2 の行を選択
subset_dataset = dataset.select([0, 2])

# これで subset_dataset には 1 行目と 3 行目だけが含まれます
# print(list(subset_dataset))
# 出力: [{'col_a': 1, 'col_b': 'x'}, {'col_a': 3, 'col_b': 'z'}]