# Exchange邮件恢复网络 - Agent 使用指南

> **网络ID**: exchange-recovery  
> **版本**: 1.0.0  
> **标签**: 灾备, Exchange邮件, Exchange邮件服务器或邮件恢复


# 使用说明

## 恢复工作流

```
Accident Request (用户输入事故请求)
    ↓
Think (分析事故 → 决策恢复策略)
    ↓
Risk Evaluate (评估数据覆盖风险)
    ↓
Plan (列出Exchange服务器 → 查找备份时间点 → 浏览备份邮件 → 生成恢复任务)
    ↓
Act (执行恢复任务 → 产生恢复作业 → 验证Exchange可用性)
    ↓
Report (生成恢复报告：状态 + 数据统计 + 时效评估)
```

**核心原则**：每次恢复请求都是独立的恢复操作，不应该查询或依赖历史恢复记录。即使相同邮件之前恢复过，每次新的恢复请求都应该重新执行完整的恢复流程（Think → Risk Evaluate → Plan → Act → Report）。

## 核心概念

### 数据域（DataDomain）

数据域（备份服务器），Agent可以接入多个数据域，每个数据域包含多个Exchange服务器。

### 备份时间点副本（BackupTimepoint）

Exchange服务器的备份时间点副本，包含该时间点的所有邮件数据。每个时间点副本都有独立的元数据。

### 恢复服务器（RecoveryServer）

用于恢复的Exchange服务器，作为恢复操作的目的地，与生产服务器分离。

### 恢复任务（RecoveryTask）

Exchange邮件恢复任务，包含恢复策略的所有信息.

### 恢复作业（RecoveryJob）

执行恢复任务产生的恢复作业，记录恢复操作的详细信息。

### 可用性验证（RecoveryJobVerification）

恢复成功后，对邮件是否可读、邮件服务器是否可正常对外提供业务的验证结果，记录验证的详细信息。

## 关系类型分类

### from关系（依赖关系）

表达对象间的静态依赖关系，要使用目标对象必须先有源对象。

### to关系（流程关系）

表达行动间的执行顺序，源行动完成后才能执行目标行动。

### contains关系（包含关系）

表达对象间的层级包含关系。

### restores关系（恢复关系）

表达恢复任务与资源的恢复关系。

## 恢复策略流程

### 1. Accident Request (事故请求)

用户输入事故描述，LLM洞察意图并输出语言回复，为下一步执行提供依据。

**重要原则**：每次恢复请求都是独立的恢复操作，不应该查询或依赖历史恢复记录。即使相同邮件之前恢复过，每次新的恢复请求都应该重新执行完整的恢复流程。

**事故类型识别**：

- **邮件服务器无法启动**：服务器状态为 Offline
- **邮件服务器数据丢失**：服务器状态为 DataLost
- **邮件被删除**：邮件状态为 Deleted

**LLM输出内容**：

- 事故类型
- 是否需要触发本可恢复知识网络的恢复策略
- 明确说明：将执行新的恢复操作，不依赖历史恢复记录

### 2. Think (推理分析)

**重要原则**：推理分析阶段不应该查询历史恢复记录，而是根据当前请求独立分析并决策恢复策略。

**数据域选择**（作为后续think、plan、act的基础）：

- **用户输入包含数据域** → 使用用户指定的数据域
- **用户输入不包含数据域** → 让用户指明是哪个数据域
- **列出数据域** → Agent提供list_data_domains工具，列出所有数据域供用户选择
- **数据域选择要求**：数据域选择是后续所有操作的基础，必须先确定数据域

**备份时间点选择决策**：

- **邮件服务器级别恢复** → 选择**最近**经过可恢复性验证且恢复验证结果是"可恢复"的备份时间点副本
- **邮件级别恢复** → 选择**最近**经过可恢复性验证且恢复验证结果是"可恢复"且**存在要恢复的邮件**的备份时间点副本
  - **特殊说明**：如果要恢复的多封邮件不完全存在一个时间点副本，存在不同的时间点副本，则按时间点副本列表顺序由老到新的顺序恢复

**恢复粒度决策**：

- **邮件服务器无法启动** → 采用**邮件服务器级别**恢复，恢复整个邮件服务器
- **邮件服务器数据丢失** → 采用**邮件服务器级别**恢复，恢复整个邮件服务器
- **邮件被删除** → 采用**邮件级别**恢复，仅恢复指定的邮件

**恢复目的地决策**：

- **原机状态在线（Online）** → 采用**原机恢复**，恢复到原Exchange生产服务器
- **原机状态不在线（Offline/DataLost）** → 让用户选择恢复目的地：
  - 选择恢复到原Exchange生产服务器（需要先修复原机）
  - 选择恢复到Exchange恢复服务器（推荐，避免影响生产环境）

**决策恢复策略**：根据事故分析结果，确定恢复策略。

**注意**：在有多个可能性，如果无法确认，需要用户确认。

**LLM输出内容**：

- 事故类型
- 推荐的恢复粒度（根据事故类型自动决策）
- 数据域选择（根据数据域状态让用户选择）
- 恢复目的地（根据原机状态自动决策或让用户选择）
- 备份时间点选择策略（根据恢复粒度自动决策）
- 需要的备份时间点范围
- 恢复风险提示
- 明确说明：将创建新的恢复任务并执行，不依赖历史恢复记录

### 3. Risk Evaluate (风险评估)

**风险判断**：根据恢复目的地和恢复粒度评估风险：

1. **数据覆盖风险评估**（基于production_data_overwrite风险类型）：
   - **恢复到恢复服务器**：不覆盖生产数据，风险等级为无
   - **恢复到生产服务器**：会覆盖现有生产数据，风险等级为高，必须用户确认
   - **邮件服务器级别恢复**：恢复整个邮件服务器，存在数据覆盖风险，必须用户确认
   - **邮件级别恢复**：仅恢复指定的邮件，数据覆盖风险较低

2. **备份时间点可恢复性风险评估**（基于backup_timepoint_verification_failed风险类型）：
   - **已验证且可恢复**：备份时间点经过验证且验证结果为可恢复，风险等级为无
   - **未验证**：备份时间点未进行过验证，风险等级为高，恢复可能失败或数据不完整
   - **验证失败**：备份时间点已进行验证但验证结果为失败，风险等级为高，恢复可能失败或数据不完整
   - **验证中**：备份时间点验证正在进行中，风险等级为中，建议等待验证完成

### 4. Plan (生成恢复策略)

**重要原则**：每次恢复请求都要创建新的恢复任务，不应该查询或依赖历史恢复记录。

**find_backup_timepoints行动**：

1. 接收Exchange服务器名称和地址作为输入参数
2. 在备份软件中查找该服务器的备份时间点副本
3. 按备份时间倒序排序
4. 输出时间点副本列表

**browse_backup_emails行动**（邮件级别恢复时执行）：

1. 接收备份时间点副本ID和过滤条件作为输入参数
2. 读取备份时间点副本的元数据
3. 从元数据中提取邮件列表
4. 根据过滤条件筛选邮件（如果提供了过滤条件）
5. 按邮件日期倒序排序
6. 输出邮件列表

**create_recovery_task行动**：

1. 检查恢复目的地是否为生产服务器：
   - 如果recovery_destination == production，评估数据覆盖风险
   - 告知用户：恢复到生产服务器会覆盖现有生产数据
   - 要求用户确认是否继续
   - 如果用户不确认，不生成恢复任务
2. 检查备份时间点验证状态：
   - 如果backup_timepoint.is_verified == false，告知用户备份时间点未验证或验证失败
   - 告知用户：恢复可能失败或数据不完整
   - 要求用户确认是否继续
3. 根据恢复策略生成**新的**恢复任务
4. 设置任务属性：
   - **timepoint**：选择的备份时间点
   - **recovery_type**：恢复类型（挂载恢复/数据恢复）
   - **recovery_granularity**：恢复粒度（邮件服务器/邮件级别）
   - **recovery_destination**：恢复目的地
   - **task_status**：Pending
5. 输出任务ID和任务信息
6. 明确说明：已创建新的恢复任务，将立即执行

### 5. Act (执行过程)

**重要原则**：每次恢复请求都要执行恢复操作，不应该查询或依赖历史恢复记录。即使相同邮件之前恢复过，每次新的恢复请求都应该重新执行完整的恢复流程。

**execute_recovery_task行动**：

1. 检查恢复目的地是否为生产服务器：
   - 如果recovery_destination == production，评估数据覆盖风险
   - 告知用户：恢复到生产服务器会覆盖现有生产数据
   - 要求用户确认是否继续
   - 如果用户不确认，不执行恢复任务
2. 将任务状态更新为Running
3. 根据恢复粒度执行恢复：
   - **邮件服务器级别**：从备份时间点恢复整个邮件服务器到恢复服务器
   - **邮件级别**：从备份时间点恢复指定的邮件列表到恢复服务器
4. 根据恢复类型执行恢复：
   - **挂载恢复**：将备份时间点挂载到恢复服务器
   - **数据恢复**：将数据从备份时间点恢复到恢复服务器
5. 执行恢复操作，监控恢复进度
6. 记录恢复操作的详细信息（时间、数据量、耗时、恢复类型、恢复粒度）
7. 产生**新的**恢复作业，记录：
   - 执行恢复操作的用户ID
   - 恢复耗时
   - 恢复结果
   - 执行时间
   - 结束时间
8. 将任务状态更新为Completed或Failed
9. 输出恢复结果和恢复的邮件列表
10. 明确说明：已执行新的恢复操作，不依赖历史恢复记录

**verify_exchange_availability行动**：

1. 连接到恢复服务器中的Exchange实例
2. 验证Exchange服务是否可以对外提供业务：
   - 检查Exchange服务状态是否正常
   - 检查邮件服务是否可以正常访问
   - 检查用户邮箱是否可以正常登录
   - 检查邮件收发功能是否正常
3. 验证邮件内容（邮件级别恢复时）：
   - 检查邮件完整性（主题、发件人、收件人、正文、附件）
   - 验证邮件是否可以正常打开和阅读
   - 检查附件是否完整可访问
4. 保存**新的**验证结果到recovery_job_verification，包括：
   - exchange_server_id：Exchange服务器ID
   - recovery_task_id：恢复任务ID
   - recovery_job_id：恢复作业ID
   - verification_method：验证方法
   - verification_result：验证结果（通过/失败）
   - verification_time：验证时间
   - verification_details：验证详情（Exchange服务状态、邮件功能、邮件主题、发件人、收件人、正文、附件等）
5. 输出验证结果（通过/失败）和详细信息
6. 明确说明：已执行新的验证操作，不依赖历史验证记录

### 6. Report (结果反馈)

**generate_recovery_report行动**：

- **恢复状态**：邮件已恢复，Exchange可用性验证通过（如有验证）
- **数据统计**：恢复的邮件数量、总数据量（KB/MB）
- **时效评估**：业务恢复总耗时
- **任务信息**：恢复任务的timepoint、recovery_type、recovery_granularity、recovery_destination
- **作业信息**：恢复作业的user_id、execution_time、end_time、duration、recovery_result
- **验证信息**：验证的exchange_server_id、recovery_task_id、recovery_job_id、verification_method、verification_result（如有验证）

## 风险控制机制

### 风险控制原则

1. **所有恢复操作都设置为风险项**：执行恢复任务时都需要预先确认是否执行
2. **用户预先告知例外**：如果用户预先告知Agent不需要确认是否执行，则可以跳过确认
3. **数据覆盖风险控制**：在恢复任务生成创建前，如果有数据发生覆盖原备份的生产服务器或者覆盖恢复资源中的服务器数据，则需要告知风险允许确认后才可生成，不然不生成该恢复任务

### 风险控制场景

#### 1. 恢复任务生成前（create_recovery_task）

**数据覆盖风险检查**：

- **恢复到生产服务器**（recovery_destination == production）：
  - 风险等级：高
  - 风险描述：恢复到生产服务器会覆盖现有生产数据
  - 确认要求：必须用户确认
  - 如果用户不确认：不生成恢复任务

- **恢复到生产服务器且为邮件服务器级别恢复**（recovery_destination == production && recovery_granularity == server）：
  - 风险等级：高
  - 风险描述：恢复到生产服务器且为邮件服务器级别恢复，会覆盖整个生产服务器数据
  - 确认要求：必须用户确认
  - 如果用户不确认：不生成恢复任务

- **恢复到生产服务器且为邮件级别恢复**（recovery_destination == production && recovery_granularity == email）：
  - 风险等级：中
  - 风险描述：恢复到生产服务器且为邮件级别恢复，会覆盖部分生产数据
  - 确认要求：需要用户确认
  - 如果用户不确认：不生成恢复任务

**备份时间点验证失败风险检查**：

- **备份时间点未验证或验证失败**（backup_timepoint.is_verified == false）：
  - 风险等级：高
  - 风险描述：备份时间点未经过验证或验证失败，恢复可能失败或数据不完整
  - 确认要求：需要用户确认
  - 如果用户不确认：不生成恢复任务

#### 2. 恢复任务执行时（execute_recovery_task）

**数据覆盖风险检查**：

- **恢复到生产服务器**（recovery_destination == production）：
  - 风险等级：高
  - 风险描述：恢复到生产服务器会覆盖现有生产数据
  - 确认要求：必须用户确认
  - 如果用户不确认：不执行恢复任务

- **恢复到生产服务器且为邮件服务器级别恢复**（recovery_destination == production && recovery_granularity == server）：
  - 风险等级：高
  - 风险描述：恢复到生产服务器且为邮件服务器级别恢复，会覆盖整个生产服务器数据
  - 确认要求：必须用户确认
  - 如果用户不确认：不执行恢复任务

- **恢复到生产服务器且为邮件级别恢复**（recovery_destination == production && recovery_granularity == email）：
  - 风险等级：中
  - 风险描述：恢复到生产服务器且为邮件级别恢复，会覆盖部分生产数据
  - 确认要求：需要用户确认
  - 如果用户不确认：不执行恢复任务

- **恢复到恢复服务器**（recovery_destination == recovery_server）：
  - 风险等级：低
  - 风险描述：恢复到恢复服务器，不影响生产数据
  - 确认要求：风险较低，但仍需确认（除非用户预先告知不需要确认）

### 风险确认流程

1. **风险识别**：系统自动识别当前操作的风险等级
2. **风险告知**：向用户告知风险描述和可能的影响
3. **用户确认**：要求用户确认是否继续执行
4. **执行决策**：
   - 如果用户确认：继续执行操作
   - 如果用户不确认：终止操作，不生成恢复任务或不执行恢复任务
5. **记录日志**：记录风险评估结果和用户确认记录

### 风险等级定义

- **高风险**：会覆盖整个生产服务器数据或使用未验证的备份时间点，必须用户确认
- **中风险**：会覆盖部分生产数据，需要用户确认
- **低风险**：恢复到恢复服务器，不影响生产数据，但仍需确认（除非用户预先告知不需要确认）
- **无风险**：无任何风险
