一个编码会话、以及一次请求,包含多少工作量?
计算 tab:session_internal_counts(src/04_SessionContext.tex)背后的计数分布:每个
会话的请求数、用户触发 / 工具触发的步骤数以及工具调用数;每个请求的
工具触发步骤数和工具调用数;以及每个步骤的工具调用数——每一项都给出
avg / p25 / p50 / p90 / p99。
一个编码会话、以及一次请求,包含多少工作量?
计算 tab:session_internal_counts(src/04_SessionContext.tex)背后的计数分布:每个
会话的请求数、用户触发 / 工具触发的步骤数以及工具调用数;每个请求的
工具触发步骤数和工具调用数;以及每个步骤的工具调用数——每一项都给出
avg / p25 / p50 / p90 / p99。
Per session
| Metric | Avg | P25 | P50 | P90 | P99 |
|---|---|---|---|---|---|
| Requests | 9.2 | 1 | 1 | 18 | 137 |
| User-initiated steps† | 8.9 | 1 | 1 | 17 | 129 |
| Tool-initiated steps | 73.6 | 4 | 15 | 135 | 1,107 |
| Tool calls | 101.4 | 8 | 25 | 176 | 1,438 |
Per request
| Metric | Avg | P25 | P50 | P90 | P99 |
|---|---|---|---|---|---|
| User-initiated steps | 0.9 | 1 | 1 | 1 | 1 |
| Tool-initiated steps | 7.8 | 0 | 1 | 20 | 86 |
| Tool calls | 10.8 | 0 | 2 | 30 | 113 |
Per step
| Metric | Avg | P25 | P50 | P90 | P99 |
|---|---|---|---|---|---|
| Tool calls | 1.2 | 1 | 1 | 2 | 4 |
编码会话是持久的,且压倒性地自主(论文的
tab:session_internal_counts)。一个会话平均有 9.2 个请求,但带有一条长尾(p99 = 137),所以人类会一次又一次地回到同一个会话。每个会话中工具触发步骤(avg 73.6)远多于用户触发步骤(avg 8.9),所以一旦一个请求落地,循环就自行运转起来:解决一个请求平均需要约 8 个工具触发步骤和约 11 次工具调用。在步骤这一层级,每一轮只发出略多于一次的工具调用(avg 1.2,p50 1,p90 2),所以并行工具调用确实会发生,但属于例外而非常态。
# default merged trace (materialized to a temp DuckDB cache on first use)
uv run python artifacts/session/session_internal_counts/analyze.py
# the pinned public trace
uv run python artifacts/session/session_internal_counts/analyze.py -i trace/syfi_coding_trace.jsonl
# a prebuilt DB, into a chosen dir
uv run python artifacts/session/session_internal_counts/analyze.py --db /tmp/trace.duckdb -o /tmp/out
session_internal_counts.tex —— 合并后的三行(booktabs)表格,可直接 \input 或
粘贴进 src/04_SessionContext.tex。session_internal_counts.md —— 该表格的 GFM Markdown 镜像,渲染在网页详情页上。headline.json —— 用于 Overview gallery 卡片的几个 headline 数字。无图。