<!--
  使用说明（本段在正式成文时删除）
  - 每个「场景」或「最佳实践案例」对应 **一份** 独立 Markdown；从本模板复制后重命名，例如：
    - docs/cases/reports/2026-05-12-manage-scenario.md
    - docs/cases/reports/2026-05-12-case-create-agent.md
  - 「交互」= 用户发起一次 POST .../runs/stream 并得到该轮流结束（含其间多段 tool/AI 增量）。
  - 模型输出须可审计：优先贴全文；过长时写「见同目录附件」并提交脱敏后的 .md / .txt。
  - 「测试意见」只允许出现在 **文档最后一节**；前面各轮仅允许写「本轮结论（符合/不符合子目标）」。
-->

# 《{场景或案例名称}》流式验收报告

| 元数据项 | 填写 |
|----------|------|
| **报告 ID** | `{YYYY-MM-DD}-{短标识}-v1}` |
| **关联案例 / 场景** | `{如：最佳实践「创建智能体」/ e2e 场景 manage}` |
| **关联仓库文档** | `{链到 docs/cases/xxx.md 或脚本场景名}` |
| **执行人** |  |
| **执行时间（本地）** | `{ISO 或本地时间}` |
| **代码版本** | `{git commit / tag}` |
| **Gateway 基址** | `{如 http://127.0.0.1:8070}` |
| **LangGraph 端口（若已知）** | `{如 2070}` |
| **session_key** | `{脱敏规则：可截断或哈希}` |
| **默认 assistant_id** | `{如 lead_agent}` |

---

## 1. 测试范围与通过准则

**本报告覆盖：**（一句话）

**功能通过准则：**（引用案例步骤或团队 checklist 编号）

**性能与可观测性准则：**（可选：TTFT、单工具耗时上限、整轮 wall 等基线引用）

---

## 2. 环境与前置条件

| 检查项 | 状态（是/否/不适用） | 说明 |
|--------|----------------------|------|
| 模型与 API Key |  |  |
| 技能 / MCP / 渠道 |  |  |
| 沙箱与写盘范围 |  |  |
| 与本场景相关的配置项 |  |  |

**原始机器产物（可选）：** `{如 backend/scripts/_e2e_output/run-xxx.json}`

---

## 3. 交互总览

| 指标 | 值 |
|------|-----|
| **用户发起流式交互总次数** | `{N}` |
| **涉及 thread_id 数量** | `{同线程多轮填 1；多线程填实际数}` |
| **是否出现 SSE error / HTTP 非 2xx** |  |
| **工具调用总次数（含重复 tool_call_id 刷新）** | `{可从 JSON 或脚本统计}` |

**thread 与时间线（可选一览表）：**

| 序号 | thread_id | 用途说明 |
|------|-----------|----------|
| 1 |  |  |

---

## 4. 分轮交互记录

> 每一轮对应一次完整的 `POST .../runs/stream` 会话回合。轮内可有多段模型增量与多工具；**模型输出**指该轮结束后用户可见的助手最终答复（若流内多版本，以最后一版为准并说明）。

### 4.1 轮次 1

#### 4.1.1 请求与用户输入

| 字段 | 内容 |
|------|------|
| **thread_id** |  |
| **本轮在用户界面的序号** | `1 / N` |
| **activated_scenarios** | `{JSON 或逗号分隔}` |
| **collab_phase** |  |
| **is_plan_mode / subagent_enabled / thinking_enabled** |  |
| **recursion_limit** |  |
| **用户输入（原文，完整）** |  |

#### 4.1.2 流式与模型侧时序（本轮）

> 与 `stream_timing_trace` 字段对齐；若使用其它埋点，在本表下增加脚注说明口径。

| 指标 | 值（ms） | 说明 |
|------|----------|------|
| **request_total_ms** |  | 自 POST 起至流读完 |
| **first_sse_payload_ms** |  | 至首条有效 `data:` |
| **first_ai_visible_ms（TTFT）** |  | 至首段可见助手正文 |
| **assistant_visible_stream_ms** |  | 首末次可见正文时间差（见 trace 定义） |
| **本轮是否出现 error 事件** | 是/否 | 若有，贴 `error` 与 `message` 原文 |

#### 4.1.3 工具调用明细（本轮，按发生顺序）

| # | tool 名称 | tool_call_id | duration_ms | 结果摘要（成功/失败/超时/截断） | 备注 |
|---|-----------|----------------|---------------|----------------------------------|------|
| 1 |  |  |  |  |  |
| 2 |  |  |  |  |  |

> `duration_ms` 为 trace 中「自该 id 首次出现在 tool_calls 至对应 tool 结果首帧」的墙钟；`null` 或 `pending_stream_end_ms` 表示流结束仍未闭合。

#### 4.1.4 模型输出（本轮）

**输出形式（二选一勾选）：**

- [ ] **正文粘贴**（完整，可代码块）

```text
（此处粘贴助手对用户可见的最终答复全文）
```

- [ ] **附件引用**（正文过长或含敏感信息）

  - 附件路径：`{相对仓库路径或仅登记机外路径+哈希}`  
  - 文件摘要：`{行数 / 字数 / SHA256 可选}`

#### 4.1.5 本轮结论（非总评）

| 项 | 内容 |
|----|------|
| **对照准则条目** | `{如：案例二 §步骤 7}` |
| **子目标是否达成** | 符合 / 不符合 |
| **证据** | `{一句，指向本节表格或输出}` |

---

### 4.2 轮次 2

（复制 **4.1** 结构；轮次编号递增。）

#### 4.2.1 请求与用户输入

（同结构。）

#### 4.2.2 流式与模型侧时序（本轮）

（同结构。）

#### 4.2.3 工具调用明细（本轮）

（同结构。）

#### 4.2.4 模型输出（本轮）

（同结构。）

#### 4.2.5 本轮结论（非总评）

（同结构。）

---

### 4.N 轮次 N

（直至覆盖「交互总览」中的 N。）

---

## 5. 测试意见（文档末尾总评）

> **本节为全文唯一允许写「总体测试意见 / 发布建议 / 风险结论」的位置。**

### 5.1 结论摘要

- **总体结果：**通过 / 不通过 / 带条件通过  
- **阻塞项：**（无则写「无」）  
- **非阻塞问题：**  

### 5.2 风险与影响

（对生产、数据、安全、性能的简述。）

### 5.3 后续建议

（修复优先级、是否需补脚本、是否需补文档、是否需二次回归范围。）

### 5.4 签字与复核（可选）

| 角色 | 姓名 | 日期 |
|------|------|------|
| 执行 |  |  |
| 复核 |  |  |

---

## 附录 A：字段与 JSON 映射（供自动填表）

| 报告字段 | 典型 JSON 路径（`e2e_scenarios_api_test.py --output-json`） |
|----------|--------------------------------------------------------------|
| 每场景 thread_id | `results[i].thread_id` |
| 每轮 timing | `results[i].stream.timing` |
| 工具耗时列表 | `results[i].stream.timing.tool_runs` |
| 错误 | `results[i].stream.error_events` |
| 套件总耗时 | `suite_wall_ms` |

## 附录 B：修订历史

| 版本 | 日期 | 修订说明 |
|------|------|----------|
| v1 |  | 初稿自模板生成 |
