SuperAPI AI 工具集

langsmith dataset

测试与质量

查看项目

更新于 10-16 18:21

技能介绍

用途

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。
  • 关于收费、价格、平台支持范围等具体信息,资料中暂未提供。