> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashduty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 控制台

> AI SRE 会话承载您与 Agent 的一次完整对话，包含消息、流式响应、工具调用与产物；本文介绍会话的新建与管理、消息发送、产物预览、会话 Fork、上下文压缩、团队绑定与会话数据导出。

<Info>
  **内测功能**：AI SRE 目前处于内测阶段，专业版及以上用户可申请免费试用。请通过 [AI SRE 内测申请表](https://c9xudyniiq.feishu.cn/share/base/form/shrcn0ngCfdoygiaHnAT80BfZiH) 提交申请，审核通过后将开通白名单；内测期间功能与界面可能调整。
</Info>

## 概述

***

会话（Session）是您与 AI SRE 的一次完整对话。它承载您发送的每一条消息、Agent 的流式回复、过程中的工具调用，以及 Agent 产出的产物（Artifacts，例如代码、报告、图表或 Skill 压缩包）。

每个会话相互独立，拥有自己的上下文、绑定的团队与运行环境。您在左侧边栏切换会话，在中间的对话区收发消息、查看回复与产物。

<Note>
  会话之间彼此隔离：上下文、绑定团队、运行环境互不影响。切换会话不会中断正在运行的回合——AI SRE 会持续把进展写入会话，您返回时可继续看到流式输出。
</Note>

## 新建与管理会话

***

左侧边栏是会话的统一入口。点击 **新对话** 即可开启一个全新会话；列表按最近活动倒序排列，初始显示最近的若干条，更多历史通过 **显示更多** 逐步展开。

### 搜索与筛选

<Steps>
  <Step title="搜索对话">
    顶部搜索框按会话名称过滤；无结果时显示 **未找到匹配对话**。
  </Step>

  <Step title="按范围 / 状态 / 活动筛选">
    点击列表右上角的 **筛选** 图标打开筛选面板，按下列维度组合过滤；当存在非默认筛选时，筛选按钮上会出现一个小圆点提示。
  </Step>
</Steps>

筛选面板支持的维度：

| 维度   | 可选值                     | 说明                                |
| ---- | ----------------------- | --------------------------------- |
| 范围   | 全部 / 个人 / 团队            | 选择 **团队** 后可在内联列表中搜索并多选具体团队       |
| 状态   | 活跃 / 归档 / 全部            | 默认仅显示 **活跃** 会话；切到 **归档** 查看已归档会话 |
| 最近活动 | 全部 / 24 小时 / 7 天 / 30 天 | 按会话最近一次活动时间收窄结果                   |

面板底部提供 **重置**（恢复默认筛选）与 **完成**（关闭面板）。

### 单条会话操作

将鼠标悬停在会话行上，会显示置顶与归档操作；置顶的会话在名称左侧常驻一个图钉标记。

| 操作          | 入口          | 说明                             |
| ----------- | ----------- | ------------------------------ |
| 置顶对话 / 取消置顶 | 行内悬停的图钉按钮   | 置顶会话排在列表前列                     |
| 归档对话 / 取消归档 | 行内悬停的归档按钮   | 归档后默认从活跃列表隐藏，可在筛选中切到 **归档** 找回 |
| 重命名         | 对话标题处点击直接编辑 | 回车或失焦提交，Esc 取消；名称最长 60 字       |

新会话无需手动命名：第一回合结束后，系统会根据会话内容自动生成标题（`POST /safari/session/generate-name`）；在生成完成前，会先用你的第一条消息派生一个临时标题占位，避免侧边栏长时间停在「未命名」。你随时可以**重命名**来覆盖自动生成的标题（标题最长 60 字）。

<Tip>
  在会话行上停留片刻，会弹出工具提示，显示完整会话名、所属团队与精确时间——便于在名称被截断时确认这是不是您要找的会话。
</Tip>

### 列表状态指示

每行右侧用一个互斥标记表达当前状态：

| 标记        | 含义                                   |
| --------- | ------------------------------------ |
| 旋转的圆圈     | 该会话的 Agent 正在运行（有回合在进行中）             |
| 蓝色小圆点（未读） | Agent 产出了您尚未查看的新内容                   |
| 相对时间      | 以上都没有时，显示最近活动的相对时间（如 `5m`、`3h`、`3d`） |

打开会话即会清除该会话的未读小圆点。

## 发送消息与流式响应

***

在底部输入框输入消息后回车发送。输入框支持 Markdown，并支持以斜杠命令（输入 `/` 调出命令菜单）触发内置 Skill 与命令。

### 附件与上下文引用

<AccordionGroup>
  <Accordion title="上传附件" icon="paperclip">
    点击回形针按钮，或直接拖拽 / 粘贴文件。支持图片、PDF 与 Office 文档（Word / Excel / PowerPoint），单个文件最大 **20MB**。单条消息最多上传 **9 个文件**，超出时会提示「最多上传 N 个文件」。截图可直接在对话中粘贴。
  </Accordion>

  <Accordion title="上下文引用" icon="link">
    从故障、告警、监控规则或主机等页面进入 AI SRE 时，相关对象会作为**引用胶囊**自动嵌入输入框——它是一枚内联的小标签，标明所引用对象的类型——故障、告警事件、告警、监控规则或主机——并随消息一起发送给 Agent，让它直接基于该对象开始分析。点击胶囊可在新标签页打开对应对象；点击胶囊上的关闭按钮即可在发送前移除引用。一条消息可携带多个引用。
  </Accordion>

  <Accordion title="知识库与 Skill" icon="book">
    会话启动时会按绑定团队自动加载对应的知识库与 Skill；详见下文 <a href="/zh/ai-sre/knowledge">知识库</a> 与 <a href="/zh/ai-sre/skills">Skill</a>。
  </Accordion>
</AccordionGroup>

### 实时流式输出

发送后，Agent 的回复实时流式返回——文本逐字显示，工具调用与思考过程也会即时呈现。

发送瞬间，前端会乐观地把回合标记为「运行中」；约 300ms 后由后端的运行状态确认接管，因此即便您切换页面再回来，运行状态也不会丢失。

<Note>
  回合运行期间，**发送按钮会变为停止按钮**。点击停止会立即中断当前回合：界面随即反馈，被中断的回合会带上「已中断」标记，刷新后依然可见。
</Note>

### 运行中继续输入（排队）

回合运行期间输入框依然可用：您可以继续输入并发送，消息会进入队列，在当前回合结束后依次执行。队列中的消息可在发送前编辑或移除。

### 运行环境初始化

会话首次运行时，对话流中会出现一张 **运行环境初始化** 卡片，分步展示运行环境（沙箱）的就绪过程：**建立云端容器 → 启动运行时**。两个阶段串行推进，每次只显示当前正在进行的一步；全部完成后卡片折叠为一行结果，按本次是新建、恢复还是重建分别显示：

| 模式 | 折叠后的提示 | 含义                |
| -- | ------ | ----------------- |
| 新建 | 已初始化会话 | 首次为会话创建全新的云端容器    |
| 恢复 | 已恢复会话  | 复用此前的沙箱，文件保持不变    |
| 重建 | 已重建会话  | 原沙箱已被回收，已创建一个新的容器 |

<Warning>
  当上一个沙箱因空闲被回收时，卡片会给出警示：**原沙箱因闲置 N 分钟被回收 — 已保存的文件被重置**。这意味着此前写入沙箱文件系统的内容已不复存在。请将需要长期留存的产出**保存为 Artifact 或沉淀到知识库**，而不要依赖沙箱内的临时文件。
</Warning>

## 工具调用与产物

***

Agent 在回合中调用的工具（读写文件、查询监控、执行命令、调用 MCP 工具等）以内联可折叠的形式呈现在对话流中，点击即可展开查看输入与输出，默认折叠以保持对话整洁。

### Artifacts 预览

Agent 产出的文件会以产物形式提供预览。点击产物即在右侧打开预览面板，按类型渲染：

| 类型                  | 预览方式                                     |
| ------------------- | ---------------------------------------- |
| 代码（多语言）             | 语法高亮 + 行号                                |
| Markdown            | 默认渲染视图，可切换 **源码**                        |
| HTML                | 默认渲染视图（iframe 沙箱），可切换 **源码**             |
| 图片                  | 直接显示；加载失败时给出可重试提示                        |
| PDF                 | 浏览器内置查看器渲染                               |
| Skill 压缩包（`.skill`） | 左侧文件树 + 右侧内容，可整包下载，并可一键 **保存 Skill** 到账户 |

预览面板提供 **复制**、**下载** 与 **关闭** 操作。

<Tip>
  报告类产物（如运营洞察报告）可生成包含 Mermaid 图、图表的 HTML，并在渲染视图中直接查看。运营洞察相关能力见 <a href="/zh/ai-sre/insight">运营洞察报告</a>。
</Tip>

### 消息操作

将鼠标悬停在消息上会显示操作按钮：

| 操作   | 适用              | 说明                              |
| ---- | --------------- | ------------------------------- |
| 复制   | 用户消息 / 产物       | 复制消息或文件内容到剪贴板                   |
| 重试   | 用户消息            | 以该消息重新发起回合                      |
| 编辑   | 用户消息            | 将该消息内容回填到输入框重新编辑后发送             |
| Fork | 已完成回合的 Agent 回复 | 从这条回复所在的完成回合派生一个新会话，继续尝试另一条排查路径 |

### Fork 会话

当一个回合已经完整结束后，Agent 回复右侧会出现 **Fork** 按钮。点击后，AI SRE 会从该回复所在的回合派生一个新会话，并自动打开新会话。

Fork 适合在同一段排查上下文上尝试另一条路线：保留截至所选回合为止的对话、工具调用记录、团队绑定与运行环境绑定，但不把后续回合带入新会话。新会话会写入一条「由 Chat 派生」分隔线，点击分隔线可回到原会话的来源位置。

<Note>
  只能从**已经完成**的主会话回合 Fork。源会话仍在运行、所选回合尚未完成，或目标是 Subagent 子会话时，系统会拒绝 Fork。
</Note>

Fork 会话会清理只属于运行中的临时状态，例如当前回合缓存、待挂载状态、未持久化的前端状态与本轮计数；已经持久化在历史中的消息、工具调用、可复用的压缩状态、团队与环境绑定会按可用状态保留。Fork 后的新会话拥有独立的上下文，之后的消息、压缩与运行结果都不会写回原会话。

### 会话反馈

聊天页头部提供一对会话级反馈按钮 **有帮助** / **没帮助**（拇指向上 / 向下），用于对整个会话的质量打分。

点击 **没帮助** 会弹出一张反馈卡片，可勾选预置原因并补充说明：

| 预置原因    | 说明            |
| ------- | ------------- |
| 诊断/根因错误 | 诊断结论或定位的根因不正确 |
| 没定位到问题  | 没有找到真正的根因     |
| 处置建议不可用 | 给出的处置建议无法落地   |
| 答非所问    | 回复偏离了你的问题     |

卡片底部还有一个自由文本框，可补充具体问题（可选）。提交后反馈通过 `POST /safari/feedback/create` 持久化；重新打开该会话时，之前的评分会自动回填到头部按钮上。

## 上下文压缩

***

随着对话变长，会话上下文会逼近模型的上下文窗口上限。AI SRE 会自动压缩较早的对话历史——把它总结为一段摘要并保留最近内容，从而在不丢失关键信息的前提下腾出上下文空间。

压缩有三种触发方式：

| 方式        | 触发时机                    |
| --------- | ----------------------- |
| 自动（回合开始前） | 回合开始前，上下文占用超过阈值时自动压缩    |
| 自动（回合进行中） | 回合进行中上下文继续增长并越过阈值时再次压缩  |
| 手动        | 您主动通过 `/compact` 命令触发压缩 |

### 您会看到什么

* **压缩进行中**：对话流中出现一行「正在压缩对话上下文…」的状态提示，并显示已用时长与进度，压缩完成后自动消失。
* **压缩完成**：对话保持连贯，无需您介入；最直接的指示是聊天页头部的 **Context** 占用百分比随之下降——它反映当前上下文窗口的利用率，将鼠标悬停可查看具体的 token 用量。
* **无需压缩**：当上下文无需压缩（如对话历史太短、已是压缩态）时，手动触发会给出相应提示，例如「上下文无需压缩」「对话历史太短，无需压缩」。

<Note>
  压缩对您是透明的：您感知到的是一段连续的对话。Agent 在后台保留了被压缩内容的摘要，因此后续回合仍能基于此前的关键结论继续工作。
</Note>

## 绑定团队

***

新建会话时可以为会话 **绑定团队**。绑定后，会话在启动时会自动加载该团队的知识库、Skill 与 MCP，让 Agent 一开始就具备这个团队的领域上下文与能力。未绑定团队时，会话以账户范围运行。

<Steps>
  <Step title="选择团队">
    在新建会话的输入区通过团队选择器挑选要绑定的团队；您上次的选择会被记住，省去每次重复选择。
  </Step>

  <Step title="自动加载团队上下文">
    会话启动即加载「账户范围 + 绑定团队」的知识库 / Skill / MCP 元数据，Agent 随即可用。
  </Step>

  <Step title="跨团队知识按需挂载">
    当 Agent 需要其它团队的知识时，会按需读取对应团队的知识目录，将该团队的知识与能力作为持久上下文挂载进当前会话——一次挂载在本会话内持续有效。
  </Step>
</Steps>

绑定的团队会随会话保留：重新打开同一会话时，仍是原先绑定的团队；该会话所属团队也会在侧边栏的会话提示中标注。

<Warning>
  故障 / 作战室与团队的自动联动仍在演进中。当前您可以为会话显式 **绑定团队**；后续故障场景下的自动绑定能力会持续完善。
</Warning>

资源的团队作用域（账户范围与团队范围、可见性与编辑权限）规则，详见各资源页面的「作用域」一节。

## 会话入口类型（entry\_kind）

***

每个会话在创建时都带有一个 **入口类型（entry\_kind）**，用于标识本次会话由哪个接入面产生。该字段持久化到数据库，并在创建响应中返回。

| 值            | 来源                            | 说明                               |
| ------------ | ----------------------------- | -------------------------------- |
| `web`        | 控制台                           | 默认值；未传入或传入未知值时自动归一为 `web`        |
| `im`         | IM 平台（飞书 / 钉钉 / 企业微信 / Slack） | 由 IM 渠道自动设置；启用会话的**就地切换**能力（见下方） |
| `api`        | 外部 API 调用                     | 用于程序化集成场景                        |
| `automation` | 自动化流程                         | 由自动化任务触发的会话                      |

通过 `POST /safari/session/create` 创建会话时，可在请求体中传入 `entry_kind`（可选，省略即为 `web`）。`entry_kind` 一经创建不可修改。

<Note>
  `entry_kind=im` 的会话支持**就地切换运行环境与团队范围**——即通过 IM 中的 `/env` 与 `/scope` 命令，在不中断对话的情况下重新绑定 BYOC Runner 或团队。控制台会话（`web`）的环境与团队在创建时固定，不支持就地切换。
</Note>

## 会话数据导出

***

通过 `POST /safari/session/export` 可以将一个会话的全部事件以 **NDJSON**（`application/x-ndjson`）格式流式导出，每行一个 JSON 对象。这一能力适用于审计、归档、离线分析或将会话数据接入外部系统等场景。

### 请求参数

| 字段                  | 类型     | 必填 | 说明                                        |
| ------------------- | ------ | -- | ----------------------------------------- |
| `session_id`        | string | 是  | 要导出的会话 ID                                 |
| `include_subagents` | bool   | 否  | 为 `true` 时递归包含所有子 Agent 会话的事件流；默认 `false` |

### 响应格式

响应的 `Content-Type` 为 `application/x-ndjson`，**第一行始终**是 `session_meta` 类型的会话元数据信封，后续各行为会话事件。启用 `include_subagents=true` 时，每遇到一条 `subagent_dispatch` 类型的行，其后紧跟该子会话的完整事件流，子会话同样以自己的 `session_meta` 行作为起始。

```
{"type":"session_meta","session_id":"...","app_name":"..."}   // 第一行：会话元数据
{"type":"message","..."}                                       // 后续：事件行（类型依内容而异）
{"type":"subagent_dispatch","child_session_id":"..."}          // 子 Agent 派发标记
{"type":"session_meta","session_id":"<child>","..."}           // 子会话元数据
{"type":"message","..."}                                       // 子会话事件
```

<Warning>
  若流式传输已开始后发生错误，服务器**无法**切换回标准 JSON 错误包。此时会在流末尾追加一行 JSON 编码的错误对象，消费方需检测该行以判断流是否完整。
</Warning>

**权限**：导出端点使用与发送消息相同的权限门控（`CanChatSession`），即要求调用方具备该会话的消息收发权限，单纯的只读访问权限不够。

## 相关页面

***

<CardGroup cols={2}>
  <Card title="概述" icon="robot" href="/zh/ai-sre/overview">
    了解 AI SRE 的定位、能力与适用场景。
  </Card>

  <Card title="使用洞察" icon="gauge-high" href="/zh/ai-sre/insight">
    基于会话数据生成团队的故障处理与运营洞察。
  </Card>

  <Card title="管理知识" icon="book" href="/zh/ai-sre/knowledge">
    为会话提供领域知识，按团队加载与跨团队按需挂载。
  </Card>

  <Card title="Skill" icon="wrench" href="/zh/ai-sre/skills">
    用斜杠命令调用的可复用 Skill。
  </Card>

  <Card title="MCP（外部工具）" icon="plug" href="/zh/ai-sre/mcp">
    通过 MCP 连接外部系统，扩展 Agent 的工具能力。
  </Card>

  <Card title="IM 平台" icon="comment-dots" href="/zh/ai-sre/im">
    在 Slack / 飞书 / 钉钉 / 企业微信里 @ Agent 排障，作战室自动诊断。
  </Card>
</CardGroup>
