跟踪
Trackio 追踪记录会捕获用户请求、助手的响应以及生成该响应所涉及的操作。在仪表板中打开 Traces 页面,即可搜索请求、检查模型和工具操作,并查看延迟、令牌、成本和状态的汇总信息。
记录对话
将 Trace 与 OpenAI 风格的消息一起传递给 trackio.log():
import trackio
trackio.init(project="research-agent")
trackio.log(
{
"trace": trackio.Trace(
messages=[
{"role": "user", "content": "Find agent training datasets."},
{"role": "assistant", "content": "Here are three datasets..."},
],
metadata={"session_id": "session-123", "environment": "production"},
)
}
)
trackio.finish()消息可以包含 tool_calls 和 tool 结果。当跟踪中没有显式的 span 时,仪表板会将这些调用和结果配对为工具操作,以便于检查。
添加执行跨度
在需要获取计时、层级结构、模型使用情况、成本或操作状态时,请使用 spans。每个 span 都是一个字典。最小字段为 id、name 和 kind:
trackio.Trace(
messages=messages,
spans=[
{
"id": "research",
"name": "answer-research-question",
"kind": "span",
"start_time": "2026-08-19T12:00:00Z",
"end_time": "2026-08-19T12:00:03Z",
"status": "success",
},
{
"id": "generation-1",
"parent_id": "research",
"name": "provider-request",
"kind": "generation",
"start_time": "2026-08-19T12:00:00Z",
"end_time": "2026-08-19T12:00:01.2Z",
"model": "my-model",
"input": {"messages": messages},
"output": {"text": "I will search for datasets."},
"usage": {"input_tokens": 8439, "output_tokens": 188},
"cost_usd": 0.0042,
"status": "success",
},
{
"id": "tool-1",
"parent_id": "research",
"name": "hf search",
"kind": "tool",
"start_time": "2026-08-19T12:00:01.3Z",
"end_time": "2026-08-19T12:00:02Z",
"input": {"query": "agent training datasets"},
"output": {"datasets": ["example/dataset"]},
"status": "success",
},
],
)支持的 span 字段:
| 字段 | 描述 |
|---|---|
id | 在跟踪中唯一的标识符 |
parent_id | 可选的父级 span ID;用于创建执行树 |
name | 检查器中显示的操作名称 |
kind | span、generation 或 tool |
start_time, end_time | 用于推导延迟的 ISO-8601 时间戳 |
duration_ms | 时间戳不可用时的可选时长 |
status | 通常为 success 或 error |
error | 结构化或文本形式的错误详情 |
input, output | 任何可 JSON 序列化的操作负载 |
model | 用于生成的模型标识符 |
usage | input_tokens、output_tokens 以及可选的 total_tokens |
cost_usd | 此操作的成本(以美元计) |
metadata | 附加操作元数据 |
Trace 延迟是指从最早的 span 开始到最晚的 span 结束之间的实际经过时间;如果没有任何 span 包含 end_time,则改用单个 duration_ms 的最大值。Token 和成本总计是对各个 span 上的值进行求和,因此 usage 和 cost_usd 应描述本地操作,而不是父级聚合值——如果父级重复了子级的总计,会导致重复计算。Trackio 不维护模型定价目录;插桩代码应提供实际成本。
当 status 为 error 或 failed,或者 span 携带 error 时,该 span 会被报告为失败。对于源自消息的 span,如果消息设置了 is_error、error 或错误 status,则工具结果会将其操作标记为失败;OpenAI 风格的工具结果不包含成功信号,因此这些操作不会假定成功,而是保持无状态。
从 CLI 检查跟踪
仪表盘并不是读取跟踪数据的唯一方式。CLI 可以针对本地数据,或者针对带有 --space 的 Space 进行操作:
trackio list traces --project research-agent
trackio list traces --project research-agent --search "rate limit"
trackio get trace --project research-agent --trace-id <id>
trackio get trace-summary --project research-agenttrackio get trace 会打印执行树,并显示每个 span 的延迟、模型、token 数、成本以及错误信息。trackio get trace-summary 按操作名称对所有 span 进行分组,并报告调用次数、错误数、平均延迟和最差情况延迟、token 用量以及成本——这对于找出哪个操作占用了最多的开销或最常失败非常有用。两者都支持 --json。
对于其他内容,spans 是一个 JSON 列,因此 json_each 可以与 trackio query project 一起使用:
trackio query project --project research-agent --sql "
SELECT json_extract(s.value, '\$.name') AS operation,
SUM(COALESCE(json_extract(s.value, '\$.usage.input_tokens'), 0)) AS input_tokens
FROM traces, json_each(traces.spans) AS s
GROUP BY operation ORDER BY input_tokens DESC"在 Hugging Face Hub 上查看 traces
每条记录的 trace 同时会写入一个 agent session .jsonl 文件,其格式与 Hub 的 agent trace 查看器所渲染的格式一致。当 Trackio 在 Space 上运行时,bucket 会挂载到 /data,因此这些文件会存储在 bucket 的 traces/{project}/{run}/{trace_id}.jsonl 路径下——通过 bucket 的文件浏览器打开其中一个文件,即可逐步查看对话、其工具调用以及相应的结果。
Trackio 会输出 Pi 的会话格式(版本 3),Hub 原生支持该格式。Hub 还记录了 Session Trace Simple Format,但按照该规范写入的文件目前无法在查看器中渲染。
会话文件是渲染产物,绝非权威数据源。traces 表始终具有权威性,本页面上的所有内容——搜索、span 树、trace-summary、直接 SQL——均从中读取。会话文件承载的是线性对话,并从 span 中补充了查看器可显示的详细信息:
| 从跨度 | 在会话中显示为 |
|---|---|
model 在生成过程中 | model_change 条目 |
usage, cost_usd | usage 在其生成的助手回合中 |
工具上的 status、error | 工具结果中的 isError |
工具上的 input、output | 对于没有 messages 的跟踪,toolCall 的参数和结果 |
Token 用量与产生它的助手轮次配对,而非在每一轮中重复,因此查看器不会重复计算。Span 层级、duration_ms、每个 span 的 metadata 以及非工具 span 的 kind 不属于该格式的一部分,仍保留在 SQLite 中。
会话文件位于 trackio/ 前缀旁边,而不是在其内部,因此用于将存储桶同步到本地的 trackio CLI 命令不会拉取每个 trace 的第二份副本。设置 TRACKIO_TRACE_SESSIONS_DIR 可将它们写入其他位置。
跟踪级别元数据
Span 是延迟、成本和状态的首选来源。当 trace 没有 span,或其 span 中省略了这些值时,仪表板会回退到以下 metadata 键:
| 密钥 | 用于 |
|---|---|
status | 除非某个 span 报告了错误,否则跟踪状态 |
duration_ms, latency_ms | 跟踪延迟 |
cost_usd | 未报告成本的 Span 的 Trace 成本 |
搜索
Trace 搜索会匹配消息内容、Trace 元数据,以及每个 Span 的 id、name、kind、model、status、error 和 metadata。Span 的 input 和 output 负载不会被索引:由于每次生成时通常会重复整个对话,因此索引这些负载会成倍增加存储的 Trace 大小,而搜索价值却很小。
消息、元数据、span 输入或 span 输出中嵌套的 Trackio 媒体值会与 trace 一起存储,并且图像会在检查器中内联渲染。
Update on GitHub