# 对话

Agora 的对话系统围绕**非线形分支**构建——与大多数聊天应用不同，你可以编辑任意历史消息并探索替代回复路径，而不会丢失原始对话。

## 创建对话

在对话抽屉中点按**新对话**，或直接在聊天界面开始输入。你的第一条消息会自动创建新对话。

如果启用了[标题生成](system-prompts.md#auto-title-generation)，对话会在首次回复后自动命名；你也可以手动重命名。

## 管理对话

### 切换对话

打开**对话抽屉**（汉堡菜单 :material-menu: 或右滑）并点按任意对话打开。

### 重命名

1. 在抽屉中长按对话
2. 点按**重命名**
3. 输入新标题并保存

### 删除

1. 在抽屉中长按对话
2. 点按**删除**
3. 确认删除——此操作不可撤销

---

## 非线形分支

这是 Agora 的标志性功能。每条消息都可以成为分支点。

### 编辑历史消息

1. 长按任意消息气泡（用户或模型）
2. 点按**编辑**
3. 修改消息内容
4. 发送——Agora 从此处创建**新分支**

原始分支被保留。你可以随时在分支之间切换。

### 分支如何工作

每条消息存在于**树结构**中：

```text
消息 1 (用户)
├── 消息 2 (模型) ← 原始回复
└── 消息 3 (模型) ← 编辑消息 1 后创建的分支
    ├── 消息 4 (用户)
    └── ...
```

当你编辑消息并重新生成时，新回复成为原始回复的兄弟节点——两者存在于同一父消息下。

### 切换分支

当某条消息有多个子节点（分支）时，UI 显示导航控件来切换。你可以探索替代路径而不丢失上下文。

### 为什么需要分支？

- **探索替代方案** — 用不同措辞问同一个问题
- **A/B 测试提示词** — 比较不同系统提示词或模型的响应
- **修正错误** — 修正问题中的笔误而不丢失原始对话
- **迭代** — 通过多个版本精炼提示词，保留所有尝试

---

## 消息操作

长按任意消息可访问以下操作：

| 操作 | 描述 |
|--------|-------------|
| **复制** | 将消息文本复制到剪贴板 |
| **编辑** | 编辑消息并创建分支 |
| **信息** | 查看元数据：时间戳、使用的模型、token 消耗 |
| **删除** | 删除此消息及其所有后续回复 |

!!! warning "删除消息"
    删除消息也会移除其后的所有回复。此操作不可撤销。

---

## 底部栏

聊天输入区域提供关键控制的快速访问：

### 模型选择器

点按底部栏左侧的模型名称打开**模型选择器**。你可以随时切换模型——甚至在对话中途。同一对话中的不同消息可以使用不同模型。

### 附件

点按 **+** (:material-plus:) 添加附件：

- **照片** — 来自相册的图片
- **视频** — 视频文件（支持帧提取）
- **文件** — 任意文件类型，包括 PDF

支持的图片格式直接发送给支持视觉的模型。PDF 文件会打开页面选择对话框。

### 发送

输入消息并点按**发送** (:material-send:)。模型逐个 token 流式输出响应。

---

## 流式输出与显示

### 实时流式

响应逐词出现。Agora 自动滚动以保持最新内容可见。点按**滚动到底部**按钮（向上滚动时出现）跳回实时响应。

### Markdown 渲染

模型响应以完整 Markdown 支持渲染：

- **标题**、**粗体**、*斜体*、`行内代码`
- **代码块** 带语法高亮（使用 ````` ``` `````）
- **表格**、引用、列表
- **LaTeX 数学公式** — 行内 `$E=mc^2$` 和块级 `$$\int_a^b f(x)dx$$`

### 思考过程展示

对于支持推理的模型（OpenAI o 系列、Anthropic 扩展思考、Gemini 思考、DeepSeek-R1），模型的思考过程显示在**可折叠面板**中，位于最终回复之前：

- 面板在推理阶段显示"思考中..."
- 完成后，显示思考时长（如 "思考了 12s"）
- 点按展开/折叠思考内容
- 思考期间的工具调用会被计数（如 "思考了 8s，调用了 2 个工具"）

---

## 单对话设置

每个对话可以覆盖全局默认值：

- **模型** — 为此对话选择不同模型
- **系统提示词** — 使用不同的系统指令
- **生成参数** — 温度、最大 token 数、思考级别

这些覆盖设置从对话顶部栏的更多菜单中设置。

---

## 上下文窗口

Agora 实时追踪 token 使用。当对话超出模型的上下文窗口时，较早的消息会视觉**灰显**，表示它们在活跃上下文之外。模型不再"看到"灰显的消息，但它们仍在你的 UI 中可见。

在 **设置 → 生成 → 上下文窗口** 中调整上下文窗口大小。
