追踪项目与实验在后端使用相同的数据结构,称为“session(会话)”。在文档中你可能看到这些术语交替使用,但它们都指向相同的数据结构。我们正在统一文档与 API 中的术语。
当你使用 Python 或 TypeScript SDK 的 evaluate 运行实验时,可以通过 read_project / readProject 方法获取实验的性能指标。
实验详情的返回载荷包含如下字段:
{
"start_time": "2024-06-06T01:02:51.299960",
"end_time": "2024-06-06T01:03:04.557530+00:00",
"extra": {
"metadata": {
"git": {
"tags": null,
"dirty": true,
"branch": "ankush/agent-eval",
"commit": "...",
"repo_name": "...",
"remote_url": "...",
"author_name": "Ankush Gola",
"commit_time": "...",
"author_email": "..."
},
"revision_id": null,
"dataset_splits": ["base"],
"dataset_version": "2024-06-05T04:57:01.535578+00:00",
"num_repetitions": 3
}
},
"name": "SQL Database Agent-ae9ad229",
"description": null,
"default_dataset_id": null,
"reference_dataset_id": "...",
"id": "...",
"run_count": 9,
"latency_p50": 7.896,
"latency_p99": 13.09332,
"first_token_p50": null,
"first_token_p99": null,
"total_tokens": 35573,
"prompt_tokens": 32711,
"completion_tokens": 2862,
"total_cost": 0.206485,
"prompt_cost": 0.163555,
"completion_cost": 0.04293,
"tenant_id": "...",
"last_run_start_time": "2024-06-06T01:02:51.366397",
"last_run_start_time_live": null,
"feedback_stats": {
"cot contextual accuracy": {
"n": 9,
"avg": 0.6666666666666666,
"values": {
"CORRECT": 6,
"INCORRECT": 3
}
}
},
"session_feedback_stats": {},
"run_facets": [],
"error_rate": 0,
"streaming_rate": 0,
"test_run_number": 11
}
你可以从中提取以下性能指标:
latency_p50:第 50 百分位延迟(秒)。
latency_p99:第 99 百分位延迟(秒)。
total_tokens:实验总令牌数。
prompt_tokens:提示词令牌数。
completion_tokens:回答令牌数。
total_cost:实验总成本。
prompt_cost:提示词成本。
completion_cost:回答成本。
feedback_stats:实验的反馈统计。
error_rate:实验错误率。
first_token_p50:首个令牌生成的第 50 百分位延迟(使用流式时)。
first_token_p99:首个令牌生成的第 99 百分位延迟(使用流式时)。
下面示例演示如何使用 Python 与 TypeScript SDK 获取实验性能指标。
首先,创建一个简单数据集作为前置步骤。此处仅以 Python 演示,你也可以在 TypeScript 中完成相同步骤。详情可参考评估操作指南。
from langsmith import Client
client = Client()
# Create a dataset
dataset_name = "HelloDataset"
dataset = client.create_dataset(dataset_name=dataset_name)
examples = [
{
"inputs": {"input": "Harrison"},
"outputs": {"expected": "Hello Harrison"},
},
{
"inputs": {"input": "Ankush"},
"outputs": {"expected": "Hello Ankush"},
},
]
client.create_examples(dataset_id=dataset.id, examples=examples)
接下来创建实验,从 evaluate 结果中获取实验名称,然后读取性能指标。
from langsmith.schemas import Example, Run
dataset_name = "HelloDataset"
def foo_label(root_run: Run, example: Example) -> dict:
return {"score": 1, "key": "foo"}
from langsmith import evaluate
results = evaluate(
lambda inputs: "Hello " + inputs["input"],
data=dataset_name,
evaluators=[foo_label],
experiment_prefix="Hello",
)
resp = client.read_project(project_name=results.experiment_name, include_stats=True)
print(resp.json(indent=2))