langsmith-dataset について
LangSmith のトレースから評価データセットを作成するスキルです。Agent の応答、単一ステップ、ツールの実行経路、RAG 検索を評価でき、JSON・CSV 出力と LangSmith へのアップロードに対応します。
主な機能
- 014種類の評価データセットを生成
- 02実行名と時間でトレースを絞り込み
- 03JSON または CSV で出力
- 04LangSmith のデータセットをアップロード・確認
活用シーン
- 01Agent のトレースから評価セットを作成
- 02複数回の呼び出しでノードの動作を検証
- 03ツール呼び出しの経路と深さを評価
- 04検索の質問と引用例を作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jackjin1997/ clawforge --skill langsmith-datasetインストール後、Claude Code で/langsmith-datasetを入力して読み込まれたか確認します。
同梱ファイルscripts/generate_datasets.pyscripts/query_datasets.py
詳細
LangSmith データセット
LangSmith のトレースから評価データセットを自動生成し、テストと検証に使用します。
セットアップ
環境変数
LANGSMITH_API_KEY=lsv2_pt_your_api_key_here # Required
LANGSMITH_PROJECT=your-project-name # Optional: default project
LANGSMITH_WORKSPACE_ID=your-workspace-id # Optional: for org-scoped keys
依存関係
pip install langsmith click rich python-dotenv
使用方法
コマンドを実行するには、skills/langsmith-dataset/scripts/ に移動します。
スクリプト
generate_datasets.py - トレースから評価データセットを作成します
query_datasets.py - データセットを表示して確認します
よく使うフラグ
すべてのデータセット生成コマンドで、以下のフラグを使用できます。
--root-run-name <name>- ルート実行名でトレースをフィルタリングします(例:DeepAgents の場合は「LangGraph」)--limit <n>- 処理するトレース数(デフォルト:30)--last-n-minutes <n>- 最近のトレースのみを対象にします--output <path>- 出力ファイル(.json または .csv)--upload <name>- このデータセット名で LangSmith にアップロードします--replace- 既存のファイル/データセットを上書きします(確認を求めます)--yes- 確認プロンプトを省略します(注意して使用してください)
重要 — 安全確認プロンプト:
--replaceを指定すると、既存のデータセットを削除する前にスクリプトが確認を求めます- 必ずこれらのプロンプトに従ってください — 続行する前にユーザーの入力を待ってください
- ユーザーが明示的に要求しない限り、
--yesフラグは絶対に使用しないでください --yesフラグはすべての安全確認プロンプトを省略します。ユーザーの明示的な許可がある自動化ワークフローでのみ使用してください
トレース階層について
トレースには、親子関係に基づく深度レベルがあります。
Depth 0: Root agent (e.g., "LangGraph")
├── Depth 1: Middleware/chains (model, tools, SummarizationMiddleware)
│ ├── Depth 2: Tool calls (sql_db_query, retriever, etc.)
│ └── Depth 2: LLM calls (ChatOpenAI, ChatAnthropic)
└── Depth 3+: Nested subagent calls
特定のエージェントフレームワークを対象にするには、--root-run-name を使用します。
- DeepAgents:
--root-run-name LangGraph - カスタムエージェント:ルートノード名を使用します
データセットの種類
1. 最終応答
期待される出力を含む会話全体 — エージェントの動作全体をテストします。
# Basic usage
python generate_datasets.py --type final_response \
--project my-project \
--root-run-name LangGraph \
--limit 30 \
--output /tmp/final_response.json
# With custom output fields
python generate_datasets.py --type final_response \
--project my-project \
--output-fields "answer,result" \
--output /tmp/final.json
# Messages only (ignore output dict keys)
python generate_datasets.py --type final_response \
--project my-project \
--messages-only \
--output /tmp/final.json
構造:
{
"trace_id": "...",
"inputs": {"query": "What are the top 3 genres?"},
"outputs": {
"expected_response": "The top 3 genres based on the number of tracks are:\n\n1. Rock with 1,297 tracks\n2. Latin with 579 tracks\n3. Metal with 374 tracks"
}
}
抽出の優先順位:
- ルート実行からのメッセージ(コンテンツを含む AI の応答)
- ユーザー指定の出力フィールド(
--output-fields) - 一般的なキー(answer、output)
- 出力辞書全体
重要: 最終応答では、ツールの中間出力を避けるため、必ず最初にルート実行を確認します。
2. 単一ステップ
単一ノードの入力/出力 — 特定ノードの動作をテストします。トレースごとに複数の出現をサポートし、会話の変化を捉えます。
# Extract all occurrences (default)
python generate_datasets.py --type single_step \
--project my-project \
--root-run-name LangGraph \
--run-name model \
--output /tmp/single_step.json
# Sample 2 occurrences per trace
python generate_datasets.py --type single_step \
--project my-project \
--root-run-name LangGraph \
--run-name model \
--sample-per-trace 2 \
--output /tmp/single_step_sampled.json
# Target specific tool at depth 2
python generate_datasets.py --type single_step \
--project my-project \
--root-run-name LangGraph \
--run-name sql_db_query \
--output /tmp/sql_query.json
構造:
{
"trace_id": "...",
"run_id": "...",
"occurrence": 2,
"inputs": {
"messages": [
{"type": "human", "content": "What are the top 3 genres?"},
{"type": "ai", "content": "", "tool_calls": [...]},
{"type": "tool", "content": "...results..."},
...
]
},
"outputs": {
"expected_output": {
"messages": [
{"type": "ai", "content": "", "tool_calls": [...]}
]
},
"node_name": "model"
}
}
主な機能:
occurrenceフィールドは、何回目の呼び出しか(1回目、2回目、3回目など)を記録します- 後の出現ほど会話履歴が増えるため、コンテキスト処理をテストできます
--sample-per-traceは、トレースごとに N 個の出現をランダムにサンプリングします--run-nameを使用すると、任意の深度にある任意のノードを対象にできます
よくある対象:
model(深度 1)- コンテキストが増えていく LLM 呼び出しtools(深度 1)- ツール実行チェーン- その他のカスタムノード名
3. 軌跡
ツール呼び出しの順序 — 深度を設定して実行経路をテストします。
# Include all tool calls (all depths)
python generate_datasets.py --type trajectory \
--project my-project \
--root-run-name LangGraph \
--limit 30 \
--output /tmp/trajectory_all.json
# Only tool calls up to depth 2
python generate_datasets.py --type trajectory \
--project my-project \
--root-run-name LangGraph \
--depth 2 \
--output /tmp/trajectory_depth2.json
# Only root-level tool calls (depth 0) - usually empty if tools are at depth 2+
python generate_datasets.py --type trajectory \
--project my-project \
--depth 0 \
--output /tmp/trajectory_root.json
構造:
{
"trace_id": "...",
"inputs": {"query": "What are the top 3 genres?"},
"outputs": {
"expected_trajectory": [
"sql_db_list_tables",
"sql_db_schema",
"sql_db_query_checker",
"sql_db_query"
]
}
}
深度の制御:
--depthを省略すると、すべてのレベルが対象になります(サブエージェントのツール呼び出しを含む)--depth 2= ルート + 2 レベル(通常、すべてのメインツールを取得する場合に使用します)--depth 1= 多くの場合、ミドルウェア/チェーンのみで、実際のツール呼び出しは含まれません--depth 0= ルートのみ(ツール呼び出しなし)
注: LangGraph/DeepAgents のアーキテクチャでは、通常、ツール呼び出しは深度 2 にあります。
4. RAG
質問/チャンク/回答/引用 — 検索品質をテストします。
python generate_datasets.py --type rag \
--project my-project \
--limit 30 \
--output /tmp/rag_ds.csv # Supports .json or .csv
構造(CSV 形式):
question,retrieved_chunks,answer,cited_chunks
"How do I...","Chunk 1\n\nChunk 2","The answer is...","[\"Chunk 1\"]"
出力形式
すべての種類のデータセットで、JSON と CSV の両方をサポートしています。
# JSON output (default)
python generate_datasets.py --type trajectory --project my-project --output ds.json
# CSV output (use .csv extension)
python generate_datasets.py --type trajectory --project my-project --output ds.csv
LangSmith へのアップロード
# Generate and upload in one command
python generate_datasets.py --type trajectory \
--project my-project \
--root-run-name LangGraph \
--limit 50 \
--output /tmp/trajectory_ds.json \
--upload "Skills: Trajectory"
# Use --replace to overwrite existing dataset
python generate_datasets.py --type final_response \
--project my-project \
--output /tmp/final.json \
--upload "Skills: Final Response" \
--replace
命名規則: 一貫性を保つため、「Skills: 」形式を使用します。
- 「Skills: Final Response」
- 「Skills: Single Step (model)」
- 「Skills: Single Step (sql_db_query)」
- 「Skills: Trajectory (all depths)」
- 「Skills: Trajectory (depth=2)」
データセットのクエリ
# List all datasets
python query_datasets.py list-datasets
# Filter by name pattern
python query_datasets.py list-datasets | grep "Skills:"
# View dataset examples
python query_datasets.py show "Skills: Trajectory" --limit 5
# View local file
python query_datasets.py view-file /tmp/trajectory_ds.json --limit 3
# Analyze structure
python query_datasets.py structure /tmp/trajectory_ds.json
# Export from LangSmith to local
python query_datasets.py export "Skills: Final Response" /tmp/exported.json --limit 100
データセット生成のヒント
- 常に
--root-run-nameを使用する - 特定のエージェントフレームワーク(例:「LangGraph」)で絞り込みます - 成功したトレースから始める - 最近の成功した実行をベースラインデータセットとして使用します
- 時間範囲を指定する - 過去24時間のデータには
--last-n-minutes 1440を使用します - single_step のサンプルを取得する -
--sample-per-trace 2を使用して、会話の進化を捉えます - 必要に応じて深度を調整する -
--depth 2で通常、主要なツール呼び出しをすべて取得できます - アップロード前に確認する -
query_datasets.py view-fileを使用して、最初に内容を確認します - 反復的に改善する - まず小さなバッチ(10~20件)を生成して検証し、その後に規模を拡大します
--replaceは慎重に使用する - 既存のデータセットを上書きします。反復作業に便利です
ワークフローの例
# 1. Generate fresh traces (if needed)
python tests/test_agent.py --batch # Your test agent
# 2. Generate all dataset types from LangGraph traces
python generate_datasets.py --type final_response \
--project skills --root-run-name LangGraph --limit 10 \
--output /tmp/final.json --upload "Skills: Final Response" --replace
python generate_datasets.py --type single_step \
--project skills --root-run-name LangGraph --run-name model \
--sample-per-trace 2 --limit 10 \
--output /tmp/model.json --upload "Skills: Single Step (model)" --replace
python generate_datasets.py --type trajectory \
--project skills --root-run-name LangGraph --limit 10 \
--output /tmp/traj.json --upload "Skills: Trajectory (all depths)" --replace
python generate_datasets.py --type trajectory \
--project skills --root-run-name LangGraph --depth 2 --limit 10 \
--output /tmp/traj_d2.json --upload "Skills: Trajectory (depth=2)" --replace
# 3. Review in LangSmith UI
# Visit https://smith.langchain.com → Datasets → Filter for "Skills:"
# 4. Query locally if needed
python query_datasets.py show "Skills: Final Response" --limit 3
トラブルシューティング
空の final_response 出力:
--root-run-nameがエージェントのルートノードと一致していることを確認します- ルート実行に AI の応答を含むメッセージがあることを確認します
- 出力辞書が空の場合は
--messages-onlyを使用します
軌跡の例がない:
- ツールが別の深度にある可能性があります。
--depthを削除するか、--depth 2を試してください - ツール呼び出しが存在することを確認します:
python query_traces.py trace <id> --show-hierarchy
single_step の例が多すぎる:
--sample-per-trace 2を使用して、トレースごとの例数を制限します- 多様性を維持しながら、データセットのサイズを小さくできます
データセットのアップロードに失敗する:
- データセットが存在しないことを確認するか、
--replaceを使用します - LANGSMITH_API_KEY が設定されていることを確認します
関連スキル
- トレースのクエリとエクスポートには langsmith-trace スキルを使用します
- 評価器の作成とパフォーマンスの測定には langsmith-evaluator スキルを使用します