用途
LangSmith Dataset 技能用于从导出的 trace 文件创建评估数据集,或将数据集上传到 LangSmith,以及查询数据集。它面向需要对 LangChain 应用进行评测的场景,帮助用户把运行记录转化为可复用的评估数据集。
主要能力
该技能支持四种数据集类型,通过 --type 参数指定:
- final_response:完整对话与预期输出,用于测试完整的智能体行为。
- single_step:单个节点的输入/输出,用于测试特定节点行为,可用
--run-name指定目标节点。 - trajectory:工具调用序列,用于测试执行路径,可用
--depth控制深度。 - rag:问题/分块/答案/引用,用于测试检索质量,仅匹配
run_type="retriever"的运行。
脚本分为 Python 与 TypeScript/JavaScript 两套:
- Python:
generate_datasets.py(从导出的 trace 文件创建评估数据集)、query_datasets.py(查看和检查数据集)。 - TypeScript/JavaScript:
generate_datasets.ts、query_datasets.ts,功能对应。
使用方式
环境配置
需要设置环境变量:
LANGSMITH_API_KEY=lsv2_pt_your_api_key_here # Required
LANGSMITH_WORKSPACE_ID=your-workspace-id # Optional: for org-scoped keys
依赖安装
Python:
pip install langsmith click rich python-dotenv
TypeScript/JavaScript:
npm install langsmith commander chalk cli-table3 dotenv
输入格式
脚本要求 trace 以 JSONL 格式导出(每行一个 run)。每行必须是包含以下字段的 JSON 对象:
{"run_id": "...", "trace_id": "...", "name": "...", "run_type": "...", "parent_run_id": "...", "inputs": {...}, "outputs": {...}}
字段说明:
run_id:该 run 的唯一标识符。trace_id:将 run 分组为 trace(用于重建层级结构)。name:run 名称(例如 "model"、"classify_email")。run_type:取值为 chain、llm、tool、retriever 之一。parent_run_id:父 run ID(根节点为 null)。inputs:run 输入(生成数据集所必需)。outputs:run 输出(生成数据集所必需)。
重要:必须同时具备 inputs 和 outputs 才能正确生成数据集。生成数据集前,请确认输出目录中存在 JSONL 文件、trace 的 inputs 与 outputs 均已填充,并检查 trace 层级结构以理解其组织方式。
常用参数
所有数据集生成命令均支持:
--input <path>:输入 trace,可为 .jsonl 文件目录或单个 .jsonl 文件(必填)。--type <type>:数据集类型,final_response、single_step、trajectory、rag(必填)。--output <path>:输出文件(.json 或 .csv)(必填)。--input-fields:要提取的输入键,逗号分隔(例如 "query,question")。--output-fields:要提取的输出键,逗号分隔(例如 "answer,response")。--messages-only:仅从 messages 数组提取,跳过其他字段。--upload <name>:以该数据集名称上传到 LangSmith。--replace:覆盖已有文件/数据集(会提示确认)。--yes:跳过确认提示(谨慎使用)。
安全提示:脚本在使用 --replace 删除已有数据集前会提示确认。若以交互方式运行,应始终等待用户输入,除非用户明确要求,否则不要使用 --yes。若非交互式运行,应同时使用 --replace --yes 以确保正确替换。
Python 脚本用法
提取指定字段:
python generate_datasets.py --input ./traces --type final_response
--input-fields "email_content"
--output-fields "response"
--output /tmp/final.json
生成 trajectory 数据集:
python generate_datasets.py --input ./traces --type trajectory --output /tmp/trajectory.json
生成并上传:
python generate_datasets.py --input ./traces --type trajectory
--output /tmp/trajectory.json
--upload "Skills: Trajectory"
查询数据集:
python query_datasets.py list-datasets
python query_datasets.py show "Skills: Trajectory" --limit 5
python query_datasets.py view-file /tmp/trajectory_ds.json --limit 3
TypeScript/JavaScript 脚本用法
# Basic usage (raw inputs, extracted output)
npx tsx generate_datasets.ts --input ./traces --type final_response --output /tmp/final_response.json
# Extract specific fields
npx tsx generate_datasets.ts --input ./traces --type final_response \
--input-fields "email_content" \
--output-fields "response" \
--output /tmp/final.json
# Generate trajectory dataset
npx tsx generate_datasets.ts --input ./traces --type trajectory --output /tmp/trajectory.json
# Generate and upload
npx tsx generate_datasets.ts --input ./traces --type trajectory \
--output /tmp/trajectory.json \
--upload "Skills: Trajectory"
# Query datasets
npx tsx query_datasets.ts list-datasets
npx tsx query_datasets.ts show "Skills: Trajectory" --limit 5
npx tsx query_datasets.ts view-file /tmp/trajectory_ds.json --limit 3
示例工作流
从导出的 trace 到 LangSmith 数据集的完整流程:
python generate_datasets.py --input ./traces --type single_step
--run-name model
--sample-per-trace 2
--output /tmp/model.json
--upload "Skills: Single Step (model)" --replace
python generate_datasets.py --input ./traces --type trajectory
--output /tmp/traj.json
--upload "Skills: Trajectory (all depths)" --replace
# Query locally if needed
python query_datasets.py show "Skills: Final Response" --limit 3
TypeScript 版本:
# Generate all dataset types from exported traces
npx tsx generate_datasets.ts --input ./traces --type final_response \
--output /tmp/final.json \
--upload "Skills: Final Response" --replace
npx tsx generate_datasets.ts --input ./traces --type single_step \
--run-name model \
--sample-per-trace 2 \
--output /tmp/model.json \
--upload "Skills: Single Step (model)" --replace
npx tsx generate_datasets.ts --input ./traces --type trajectory \
--output /tmp/traj.json \
--upload "Skills: Trajectory (all depths)" --replace
# Query locally if needed
npx tsx query_datasets.ts show "Skills: Final Response" --limit 3
适用场景
- 从已导出的 trace 构建评估数据集,用于 LangChain 应用的回归测试与质量评估。
- 针对特定节点(如 model)生成 single_step 数据集,测试节点级行为。
- 生成 trajectory 数据集以评估工具调用路径。
- 生成 rag 数据集以评估检索质量。
- 将本地生成的数据集上传到 LangSmith 进行集中管理与查询。
限制与常见问题
- 输入必须为 JSONL 格式,且每行需包含 inputs 与 outputs,否则无法正确生成数据集。
- rag 类型仅匹配
run_type="retriever";对于自定义 retriever 名称,应改用single_step --run-name <retriever>。 - final_response 输出为空时:检查根 run 是否有 outputs,使用
--output-fields指定字段,或使用--messages-only(若输出为 messages 格式)。 - 无 trajectory 示例时:工具可能位于不同深度,可尝试移除
--depth或使用--depth 2,并确认导出的 JSONL 文件中存在工具调用。 - single_step 示例过多时:使用
--sample-per-trace 2限制每个 trace 的示例数量,在保持多样性的同时减小数据集规模。 - 数据集上传失败时:检查数据集是否已存在或使用
--replace,并确认已设置 LANGSMITH_API_KEY。 - 关于收费、价格、平台支持范围等具体信息,资料中暂未提供。