This product is not supported for your selected
Datadog site. (
).
Agent Observability Experiments において、データセット_とは、エージェントのテストに使用するシナリオを表す_入力、期待される出力、および_メタデータ_の集合のことを言います。各データセットは_プロジェクト_に関連付けられています。
データセット内の各レコードには以下が含まれます。
- 入力 (必須): エージェントがタスク内でアクセスできるすべての情報を表します。
- 期待される出力 (任意): _グラウンドトゥルース_とも呼ばれ、エージェントが出力すべき理想的な回答を表します。_期待される出力_を使用して、アプリの実際の出力や、評価する中間結果を保存できます。
- メタデータ (任意): レコードを分類し、詳細分析に使用するための有用な情報が含まれます。例: トピック、タグ、説明、メモ。
- ID (任意): ユーザー定義のレコードの識別子。128 文字以下である必要があり、文字、数字、
_、-、または . のみを含めることができます。指定されない場合は、SDK によって自動的に生成されます。
データセットを使用することで、実験全体で一貫した評価シナリオが提供され、体系的なテストと回帰検出が可能になります。
データセットを作成する
データセットは、本番データや CSV ファイルから作成することも、プログラムによって手動で作成することもできます。
CSV ファイルからデータセットを作成する場合は、LLMObs.create_dataset_from_csv() を使用します。
# Create dataset from CSV
dataset = LLMObs.create_dataset_from_csv(
csv_path="questions.csv",
dataset_name="capitals-of-the-world",
project_name="capitals-project", # Optional: defaults to the project name from LLMObs.enable
description="Geography quiz dataset", # Optional: Dataset description
input_data_columns=["question", "category"], # Columns to use as input
expected_output_columns=["answer"], # Optional: Columns to use as expected output
metadata_columns=["difficulty"], # Optional: Additional columns as metadata
id_column="record_id", # Optional: Column to use as record IDs
csv_delimiter="," # Optional: Defaults to comma
)
# Example "questions.csv":
# record_id,question,category,answer,difficulty
# japan-capital,What is the capital of Japan?,geography,Tokyo,medium
# brazil-capital,What is the capital of Brazil?,geography,Brasília,medium
注:
- CSV ファイルにはヘッダー行が含まれている必要があります。
- 最大フィールドサイズは 10MB です。
input_data_columns、expected_output_columns、または id_column で指定されていないすべての列は、自動的にメタデータとして扱われます。- データセットは、作成後に自動的に Datadog にプッシュされます。
データセットを手動で作成する場合は、LLMObs.create_dataset() を使用します。
from ddtrace.llmobs import LLMObs
dataset = LLMObs.create_dataset(
dataset_name="capitals-of-the-world",
project_name="capitals-project", # optional, defaults to project_name used in LLMObs.enable
description="Questions about world capitals",
records=[
{
"id": "china-capital", # optional, user-defined record ID
"input_data": {"question": "What is the capital of China?"}, # required, JSON or string
"expected_output": "Beijing", # optional, JSON or string
"metadata": {"difficulty": "easy"} # optional, JSON
},
{
"input_data": {"question": "Which city serves as the capital of South Africa?"},
"expected_output": "Pretoria",
"metadata": {"difficulty": "medium"}
}
]
)
# View dataset in Datadog UI
print(f"View dataset: {dataset.url}")
UI を使用して手動で、または自動化を使用して自動的に、本番トレースをデータセットに追加します。
手動選択 (UI):
- [AI Observability] > [Traces]]2 に移動します。[Settings] > [Automations] から新しい自動化を追加することもできます。
- データセットに含めるトレースを見つけます。
- Add to Dataset をクリックします。
- 既存のデータセットを選択するか、データセットを作成します。
- トレースの入力、出力、およびメタデータが自動的に抽出されます。
自動ルーティング (自動化):
自動化は、新しいトレースに適用されます。ルールに一致する新しいトレースは、受信時にデータセットにルーティングされます。フィルターに一致する既存のトレースが遡及的に追加されることはありません。
自動化を使用すると、構成可能なルールに基づいて本番トレースをデータセットに継続的にルーティングできるため、手動の介入なしで、本番環境の動作に合わせてデータセットを最新の状態に保つことができます。
データセットの自動更新を設定するには:
- [AI Observability] > [Traces] に移動します。
- フィルターを適用して、ルーティングするトレースを特定します (評価で不合格になった、レイテンシーのしきい値、特定のアプリケーションなど)。使用できるフィルターについては、「自動化ルール」>「サポートされているフィルターフィールド」を参照してください。
- Automate Query をクリックします。
- サンプリングレートを設定します (例: 一致するトレースの 10%)。
- アクションとして Add to Dataset を選択します。
- 既存のデータセットを選択するか、データセットを作成します。
自動化を作成したら、[AI Observability] > [Settings] > [Automations] から自動化を管理します。
- Enable/disable: 新しいトレースをデータセットに追加するかどうかを制御します。
- Edit: ニーズの変化に応じて、フィルター、サンプリングレート、またはターゲットデータセットを変更します。
- Delete: 不要になった自動化を削除します。
データセットの制限:
- 自動化によって作成されるデータセット数の上限は 20,000 レコードです。
- これらのデータセットは、自動化されたデータの誤変更を防ぐために、読み取り専用になっています。
- レコードを変更する場合は、まずデータセットを複製します。
自動化のユースケースの例:
- 評価で不合格になったトレースの 10% をサンプリングして、不合格データセットを作成します。
- レイテンシーがしきい値を超えるエッジケースを収集します。
- ユーザーセグメント全体で層別サンプリングを行い、多様なデータセットを維持します。
- 本番環境で新しい障害パターンが発生した際に、自動的にキャプチャします。
データセットを取得する
Datadog からプロジェクトの既存のデータセットを取得するには:
dataset = LLMObs.pull_dataset(
dataset_name="capitals-of-the-world",
project_name="capitals-project", # optional, defaults to the project name from LLMObs.enable
version=1 # optional, defaults to the latest version
)
# Get dataset length
print(len(dataset))
データセットを pandas にエクスポートする
Dataset クラスには as_dataframe() メソッドも用意されており、これを使用してデータセットを pandas DataFrame に変換できます。
この操作には、
Pandas が必要です。pandas をインストールするには、
pip install pandasを実行します。
# Convert dataset to pandas DataFrame
df = dataset.as_dataframe()
print(df.head())
# DataFrame output with MultiIndex columns:
# input_data expected_output metadata
# question category answer difficulty
# 0 What is the capital of Japan? geography Tokyo medium
# 1 What is the capital of Brazil? geography Brasília medium
DataFrame は、次の列を持つ複数インデックス構造になっています。
input_data: input_data_columns からのすべての入力フィールドが含まれます。expected_output: expected_output_columns からのすべての出力フィールドが含まれます。metadata: metadata_columns からのすべての追加フィールドが含まれます。
データセットのバージョニング
データセットは、時間の経過に伴う変更を追跡するために自動的にバージョニングされます。バージョニング情報により再現性が確保され、実験で特定のデータセットバージョンを参照できるようになります。
Dataset オブジェクトには、最新バージョンに対応する current_version フィールドがあります。以前のバージョンには、90 日間の保持期間が適用されます。
データセットのバージョンは 0 から始まり、新しいバージョンが作成されるたびに 1 ずつ増加します。
新しいデータセットバージョンが作成される状況
新しいデータセットバージョンは、次の場合に作成されます。
- レコードの追加
- レコードの更新 (
input、expected_output、または metadata フィールドの変更) - レコードの削除
データセット名または説明を更新しても、データセットのバージョンは作成されません。
バージョンの保持
- データセットのアクティブなバージョンは 3 年間保持されます。
- 以前のバージョン (
current_version に含まれないもの) は 90 日間保持されます。 - 90 日間の保持期間は、以前のバージョンが使用される (実験でバージョンが読み取られた場合など) とリセットされます。
- 90 日間連続して使用されなかった場合、以前のバージョンは完全削除の対象となり、アクセスできなくなる可能性があります。
バージョン保持動作の例
12 が公開されると、11 は 90 日間の保持期間が設定された以前のバージョンになります。25 日後にバージョン 11 を使用して実験を実行すると、90 日間の保持期間が再度開始されます。その後 90 日間、バージョン 11 を使用しなかった場合は、バージョン 11 は削除されます。
データセットレコードにアクセスして管理する
標準の Python インデックスを使用してデータセットレコードにアクセスできます。
# Get a single record
record = dataset[0]
# Get multiple records
records = dataset[1:3]
# Iterate through records
for record in dataset:
print(record["input_data"])
Dataset クラスには、レコードを管理するためのメソッド append()、update()、delete() が用意されています。Datadog に変更を保存するには、変更を push() する必要があります。
# Add a new record
dataset.append({
"id": "switzerland-capital",
"input_data": {"question": "What is the capital of Switzerland?"},
"expected_output": "Bern",
"metadata": {"difficulty": "easy"}
})
# Update an existing record
dataset.update(0, {
"input_data": {"question": "What is the capital of China?"},
"expected_output": "Beijing",
"metadata": {"difficulty": "medium"}
})
# Delete a record
dataset.delete(1) # Deletes the second record
# Save changes to Datadog
dataset.push()
データセットテーブルをカスタマイズする
データセットのレコードを表示する際、テーブルをカスタマイズすることで、各レコードを個別に展開することなく、すばやくスキャンして比較できます。
列ピッカー
列ピッカーを使用すると、列の表示/非表示を切り替えたり、ドラッグして並べ替えたりすることができます。
カスタム列
データセットレコードから特定のフィールドを抽出し、専用のテーブル列として表示します。カスタム列を追加するには、テーブル上部にある Add Column 入力欄にフィールドパスを入力します。複数のカスタム列を追加し、ドラッグアンドドロップで並べ替えることができます。列の設定は、プロジェクトごとにブラウザのローカルストレージに保存されます。