Run (span) 数据格式
推荐阅读
在深入阅读本文档之前,阅读以下内容可能会有所帮助
LangSmith 以简单的格式存储和处理 trace 数据,这种格式易于导出和导入。
这些字段中有许多是可选的或不重要的,但为了完整性而包含在内。加粗字段是最重要的,需要了解。
字段名称 | 类型 | 描述 |
---|---|---|
id | UUID | span 的唯一标识符。 |
name | string | 与 run 关联的名称。 |
inputs | object | 提供给 run 的输入映射或集合。 |
run_type | string | Run 的类型,例如 “llm”、“chain”、“tool”。 |
start_time | datetime | Run 的开始时间。 |
end_time | datetime | Run 的结束时间。 |
extra | object | 任何额外的 run 信息。 |
error | string | 如果 run 遇到错误,则显示错误消息。 |
outputs | object | run 生成的输出映射或集合。 |
events | 对象数组 | 与 run 关联的事件对象列表。这与使用流式处理执行的 run 相关。 |
tags | 字符串数组 | 与 run 关联的标签或标签。 |
trace_id | UUID | Run 所属 trace 的唯一标识符。 这也是 trace 的根 run 的 id 字段 |
dotted_order | string | 排序字符串,分层结构。格式:run_start_time Zrun_uuid .child_run_start_time Zchild_run_uuid ... |
status | string | Run 执行的当前状态,例如 “error”、“pending”、“success” |
child_run_ids | UUID 数组 | 所有子 run 的 ID 列表。 |
direct_child_run_ids | UUID 数组 | 此 run 的直接子 run 的 ID 列表。 |
parent_run_ids | UUID 数组 | 所有父 run 的 ID 列表。 |
feedback_stats | object | 此 run 的反馈统计信息的聚合 |
reference_example_id | UUID | 与 run 关联的参考示例的 ID。 这通常仅在评估 run 中存在。 |
total_tokens | integer | run 处理的总 token 数。 |
prompt_tokens | integer | run 的 prompt 中的 token 数。 |
completion_tokens | integer | run 的 completion 中的 token 数。 |
total_cost | string | 与处理 run 相关的总成本。 |
prompt_cost | string | 与 run 的 prompt 部分相关的成本。 |
completion_cost | string | 与 run 的 completion 相关的成本。 |
first_token_time | datetime | 生成第一个 token 的时间。 |
session_id | string | run 的会话标识符。 |
in_dataset | boolean | 指示 run 是否包含在数据集中。 |
parent_run_id | UUID | 父 run 的唯一标识符。 |
execution_order (已弃用) | integer | 此 run 在 trace 中执行的顺序。 |
serialized | object | 如果适用,执行 run 的对象的序列化状态。 |
manifest_id (已弃用) | UUID | 与 span 关联的 manifest 的标识符。 |
manifest_s3_id | UUID | manifest 的 S3 标识符。 |
inputs_s3_urls | object | 输入的 S3 URL。 |
outputs_s3_urls | object | 输出的 S3 URL。 |
price_model_id | UUID | 应用于 run 的定价模型的标识符。 |
app_path | string | 此 run 的应用程序 (UI) 路径。 |
last_queued_at | datetime | span 最后一次排队的时间。 |
share_token | string | 用于共享对 run 数据的访问的 Token。 |
这是一个以上述格式表示的 run 的 JSON 示例
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"inputs": {},
"run_type": "llm",
"start_time": "2024-04-29T00:49:12.090000",
"end_time": "2024-04-29T00:49:12.459000",
"extra": {},
"error": "string",
"execution_order": 1,
"serialized": {},
"outputs": {},
"parent_run_id": "f8faf8c1-9778-49a4-9004-628cdb0047e5",
"manifest_id": "82825e8e-31fc-47d5-83ce-cd926068341e",
"manifest_s3_id": "0454f93b-7eb6-4b9d-a203-f1261e686840",
"events": [{}],
"tags": ["foo"],
"inputs_s3_urls": {},
"outputs_s3_urls": {},
"trace_id": "df570c03-5a03-4cea-8df0-c162d05127ac",
"dotted_order": "20240429T004912090000Z497f6eca-6276-4993-bfeb-53cbbbba6f08",
"status": "string",
"child_run_ids": ["497f6eca-6276-4993-bfeb-53cbbbba6f08"],
"direct_child_run_ids": ["497f6eca-6276-4993-bfeb-53cbbbba6f08"],
"parent_run_ids": ["f8faf8c1-9778-49a4-9004-628cdb0047e5"],
"feedback_stats": {
"correctness": {
"n": 1,
"avg": 1.0
}
},
"reference_example_id": "9fb06aaa-105f-4c87-845f-47d62ffd7ee6",
"total_tokens": 0,
"prompt_tokens": 0,
"completion_tokens": 0,
"total_cost": "string",
"prompt_cost": "string",
"completion_cost": "string",
"price_model_id": "0b5d9575-bec3-4256-b43a-05893b8b8440",
"first_token_time": null,
"session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",
"app_path": "string",
"last_queued_at": null,
"in_dataset": true,
"share_token": "d0430ac3-04a1-4e32-a7ea-57776ad22c1c"
}
什么是 dotted_order
?
Run 的 dotted order 是一个可排序的键,它完全指定了其在 tracing 层次结构中的位置。
以下面的示例为例
import langsmith as ls
@ls.traceable
def grandchild():
p("grandchild")
@ls.traceable
def child():
grandchild()
@ls.traceable
def parent():
child()
如果在每个阶段打印出 ID,您可能会得到以下结果
parent
run_id=0e01bf50-474d-4536-810f-67d3ee7ea3e7
trace_id=0e01bf50-474d-4536-810f-67d3ee7ea3e7
parent_run_id=null
dotted_order=20240919T171648521691Z0e01bf50-474d-4536-810f-67d3ee7ea3e7
child
run_id=a8024e23-5b82-47fd-970e-f6a5ba3f5097
trace_id=0e01bf50-474d-4536-810f-67d3ee7ea3e7
parent_run_id=0e01bf50-474d-4536-810f-67d3ee7ea3e7
dotted_order=20240919T171648521691Z0e01bf50-474d-4536-810f-67d3ee7ea3e7.20240919T171648523407Za8024e23-5b82-47fd-970e-f6a5ba3f5097
grandchild
run_id=0ec6b845-18b9-4aa1-8f1b-6ba3f9fdefd6
trace_id=0e01bf50-474d-4536-810f-67d3ee7ea3e7
parent_run_id=a8024e23-5b82-47fd-970e-f6a5ba3f5097
dotted_order=20240919T171648521691Z0e01bf50-474d-4536-810f-67d3ee7ea3e7.20240919T171648523407Za8024e23-5b82-47fd-970e-f6a5ba3f5097.20240919T171648523563Z0ec6b845-18b9-4aa1-8f1b-6ba3f9fdefd6
注意以下几个不变性
- “id” 等于 dotted order 的最后 36 个字符(最后一个 “Z” 之后的后缀)。例如,请参阅孙子 run 中的
0ec6b845-18b9-4aa1-8f1b-6ba3f9fdefd6
。 - “trace_id” 等于 dotted order 中的第一个 UUID(即,
dotted_order.split('.')[0].split('Z')[1]
) - 如果 “parent_run_id” 存在,则它是 dotted order 中的倒数第二个 UUID。 例如,请参阅孙子 run 中的
a8024e23-5b82-47fd-970e-f6a5ba3f5097
。 - 如果按点分割 dotted_order,则每个段的格式为 (
<run_start_time>Z<run_id>
)