/traces 是 Agent Observability blocklet(ARC 仓库里的 blocklets/observability-explorer)回答 dashboard 回答不了的那个问题的地方:这一次 run 内部到底发生了什么?
下面每一条都在活环境 https://observability-explorer.afsd.dev 上核验过:build 35de3a0b,以已注册测试用户的登录态,重走时间 2026-08-20。所有截图都出自那一次会话。
姊妹区是 dashboard——最近跑了什么——和 AI 消耗——消耗了多少容量。trace 与 usage 由不同的写入路径产生,两者不对账。
你能看到哪些 run
一条 trace 里有任务原文、system prompt 和每一次工具结果,所以先读闸,再读列表。只有两条轴放行:
- 你自己的 run,恒可见——那段数据就是你自己 DID Space 的一部分。
- 你管理的应用的全部 run——同实例
admin/owner,逐应用判定。
在一个应用上是 owner,在另一个应用上什么也不给。这条从 2026-08-18 才成立:在 ARC
#4170 /
PR #4269 之前,这里把任意 owner/admin 角色
读成部署级权限,一个应用的 owner 能枚举到所有应用的 run——而同一个调用者在 usage 管理面上
会被逐实例拒绝。如果你跑在更早的 build 上,本节写的不是你实际拥有的边界。
你无权查看的应用与不存在的应用无法区分:列表是空的,不是报错。想从单个账号同时看到这两条轴 在起作用,见 dashboard 页的对照表。
列表

最新在前,一条 run 一行,三种收窄方式:
| 控件 | 作用 |
|---|---|
| 搜索 | 对任务与状态做全文匹配 |
| BLOCKLET | All blocklets,或指定某个应用 |
| TIME | All · Today · 7d · 30d |
列是 USER INPUT · BLOCKLET · STATUS · MODEL · IN · OUT · CACHE · TIME · STARTED。扫列表之前有两件事要先知道:
USER INPUT是原始 prompt,包含会话历史。 来自聊天界面的行以<conversation_history> …开头,所以单元格第一行往往是上一轮对话,而不是发起这次 run 的那句话。完整文本在 trace 里。STATUS只有ok和interrupted。 没走到模型的 run 显示interrupted,输入输出都是0,时长为空——正是 dashboard 记作「failed」的那批。
一条 run
点任意一行,进入它自己的可寻址 URL:
/traces/<blocklet>/<date>/<runId>
例如 /traces/todo/2026-08-16/195318-dd5abfb7
头部。 3 rounds · 3 tool calls · 16851→164 tokens · 8153 cached · 50.8s · gemini-2-5-pro,外加 Copy link——run 的 URL 可分享、可硬加载。
时间线(左)。一步一行,每行带 IN / OUT / CACHE / TIME:
| 行 | 是什么 |
|---|---|
⚙️ INPUT | 发起这次 run 的调用:action 路径、工具数、有没有带 system prompt |
👤 USER | prompt 正文 |
🔄 ROUND n | 一轮模型调用,标着这一轮发起的工具调用 |
🤖 FINAL OUTPUT | 最终回答,以及产出它花掉的 token |
注意这里的算术:头部写 3 rounds 的 run,时间线上是 ROUND 1、ROUND 2 然后 FINAL OUTPUT——最终回答就是第三轮,不是第四步。
Inspector(右)。选中哪一行就展开哪一行:type、time,开场事件还会给出完整的 SYSTEM PROMPT、TOOLS 授权和 INPUT PARAMETERS(含这次 run 的预算:max_rounds、actions_per_round、total_tokens)。
展开一轮
带折叠箭头的轮次可以展开成它内部的步骤:

🛠 TOOL USE 是模型要求做什么;每条 🔧 TOOL RESULT 是一次调用的结果和耗时——截图里是 afs_write … · ok。「agent 做错了事」是在这一层才看得见的。
一条根本没开始的 run

interrupted 的 run 保留 INPUT 和 USER 两行,后面什么都没有。inspector 仍然会给出它被授予的工具和拿到的参数,通常足以判断是配置错了,还是根本没连上模型。
Trace assistant
时间线下面挂着一个 assistant,以这条 trace 作为上下文加载。它只在 run 里出现——列表、dashboard、usage 页面都不显示它。

四个预设问题覆盖常见场景(这条 run 哪里有问题? · token 大头在哪?为什么? · 哪几轮可以省? · 总体分析一下),下面的输入框问什么都行。它的回答自带成本 footer——截图里是 7877 tokens | 7393 in | 484 out | gemini-2-5-pro。
问 assistant 本身就是一次 AI 调用,算在你头上,事后会出现在 usage 面的 observability-explorer 这个应用名下。本次走查实测:问了两次,那一行从 5 次调用变成 8 次。
会碰到的失败态
| 现象 | 它实际上是什么 |
|---|---|
Sign in to view this content. | 不是错误——traces 没有匿名投影 |
inspector 停在 Select a row to inspect | 点时间线里任意一行就会填上——见下面那条说明 |
| 某行第一句是别人的问题 | USER INPUT 含会话历史;进 run 看真正的 prompt |
interrupted 且 token 为 0 | 这条 run 没走到模型 |
轮次数比 ROUND n 的行数多一 | 最终回答就是最后一轮 |
空 inspector:现在复现不出来了
在 build 400ce96 上,走完多跳路径——钻进一条 run,去 /dashboard、/usage,再回 /traces
钻一次——inspector 会一直停在 Select a row to inspect(当时 3/3 必现)。在 build
35de3a0b 上复现不出来:同一条跳转序列(含中间那次后退)跑了三遍,inspector 每次都填上了
这条 run 的开场事件。
blocklet 自己的 man 页仍把它记成 OPEN bug,而且引的 issue 号指向一份已关闭的 QA 报告——这条 已回流给 ARC,免得注释活得比缺陷还久。真碰到空 inspector 时,点时间线里任意一行就会填上;出问题 的从来不是 run 本身。