# 插件设置

插件设置页面位于 **AI回评** → **插件设置**，通过标签栏切换以下五个配置页面：

- 基本设置
- AI角色设置
- 模型设置
- 提示词设置
- 数据清理

页面右侧为操作控制侧边栏，显示保存按钮和未保存状态指示器。标题栏右侧提供 **查看日志** 按钮，可快速跳转到回复日志页面。

## 基本设置

| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| 自动回复 | 是否启用自动回复功能 | 开启 |
| 自动发布 | AI回复是否自动发布，关闭则存为草稿 | 开启 |
| 最大重试次数 | AI生成失败时的最大重试次数（0为不重试，最大10） | 3 |
| 最大对话轮次 | 同一评论线程中AI最多自动回复的轮次（0为不限制，需二次确认） | 10 |
| 速率限制（每小时） | 每小时最大AI回复数量（0为不限制，需二次确认） | 0（不限制） |
| 启用页面AI回复 | 开启后所有独立页面一键启用AI回复（包括新建页面），关闭则一键关闭 | 关闭 |
| 评论者黑名单 | 不触发AI回复的评论者，支持名称、邮箱和正则表达式（`regex:` 开头） | 空 |
| 启用白名单 | 白名单内评论者跳过 AI 前置过滤与拦截 | 开启 |
| 白名单评论者 | 命中名单的评论者将跳过 AI 前置过滤与拦截 | 空 |
| 启用前置过滤 | AI回复前检测评论合规性，拦截广告/辱骂/敏感内容，节省Token | 开启 |
| 违规评论设为待审核 | 检测到违规评论时自动取消通过，需人工审核 | 开启 |
| 瞬间评论区适配 | 为瞬间插件(Moments)的评论区启用AI自动回复，仅当检测到瞬间插件已安装并启用时显示 | 开启 |

::: tip 黑/白名单批量操作
黑名单和白名单均支持批量操作：

- **批量添加**：点击"添加评论者"按钮，弹出评论者列表对话框，支持搜索、多选、全选批量添加，也支持手动输入名称或邮箱
- **批量移除**：名单列表中支持多选后批量移除
- 白名单内评论者跳过 AI 前置过滤与拦截，避免可信评论被误伤
:::

::: warning 白名单与黑名单关系
白名单优先级高于黑名单：同时命中两者的评论者按白名单处理（跳过拦截但不会触发 AI 回复）。白名单仅跳过 AI 审核**拦截**，不影响 AI 回复的触发逻辑。
:::

::: tip 前置过滤（合规检测）
启用前置过滤后，AI 在生成回复前会综合判断评论者昵称与评论内容进行合规性分类，识别以下类别：

- **正常**：放行，继续走 AI 回复流程
- **广告**：包含推广链接、产品推销、引流信息等；或评论者昵称本身即为广告
- **辱骂攻击**：包含辱骂、人身攻击、恶意挑衅、歧视性言论等
- **敏感内容**：涉及政治敏感、违法违规、色情暴力等
- **无意义**：纯乱码、无意义字符堆砌

对于非"正常"类别的评论，插件会：

1. **停止生成 AI 回复**，节省 Token 与 API 调用
2. 创建一条 `FILTERED` 状态的日志记录（可在日志页通过"已拦截"状态筛选查看）
3. 若启用"违规评论设为待审核"，会自动将原评论的 `approved` 置为 `false`

被误拦截的评论可在日志页点击 **误报反馈** 按钮处理，支持"AI 回复"和"仅通过"两种方式。

::: warning
前置过滤依赖 AI Foundation 插件进行分类判断，会额外消耗少量 Token。若 AI 服务不可用或分类失败，为安全起见将拦截评论而非放行。
:::
:::

## AI角色设置

AI角色定义了回复评论的虚拟身份。支持创建多个角色，每个角色有独立的昵称、人格提示词、性别、语气风格和 Gravatar 头像，可指定一个为默认角色。

| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| 角色昵称 | AI回复者的显示名称 | 小回 |
| 性别与语气 | 角色性别（男/女）+ 中性语气复选框 | 女 + 中性语气 |
| 唤醒词 | 评论以此词开头则唤醒该角色回复，留空不启用 | 空 |
| 人格提示词 | 定义AI角色的人格和回复风格，留空则使用基础配置中的角色身份提示词（personaIdentity） | 见下方 |
| 邮箱 | 用于 Gravatar 头像服务展示头像 | 空 |
| 设为默认 | 将该角色设为默认角色 | 第一个角色默认 |

::: tip 人格提示词
人格提示词定义了AI角色的性格和回复风格。**留空时自动使用基础配置中的角色身份提示词（personaIdentity）**，无需重复填写。如需为角色设置独特人格，在此填写即可覆盖默认值。
:::

::: tip Gravatar头像
填写邮箱后，AI回复者的头像将通过 [Gravatar](https://gravatar.com) 服务自动生成，使用 [Cravatar](https://cn.cravatar.com) 镜像。如果不填写邮箱，将使用 Gravatar 默认头像。
:::

### 分类角色映射

支持为文章分类（Category）指定默认 AI 角色，解析优先级为：唤醒词 > Post/Category/Tag 标注 > 分类角色映射 > 全局默认。瞬间评论使用全局默认角色。

配置格式为 JSON：`{"分类名":"角色名"}`，未配置的分类使用默认角色。例如：

```json
{
  "技术分享": "极客助手",
  "生活随笔": "小回"
}
```

## 模型设置

| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| AI模型名称 | 留空使用AI Foundation默认模型，填写AiModel资源名称可指定模型 | 空 |
| 分类角色映射 | 为文章分类指定默认AI角色，JSON格式 | 空 |

::: warning
模型设置需要先安装 AI Foundation 插件。若未安装或未配置模型，首页会显示对应的警告卡片并提供快捷跳转按钮。
:::

## 提示词设置

提示词拆分为五个独立模块，各模块以独立文本框配置，**均为可选项，留空时自动使用内置默认值**。详细的模块说明、默认值与预设模板参考请参阅 [提示词模板](./prompt.md)。

| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| 角色身份提示词（personaIdentity） | 定义 AI 角色的基础身份与对话风格，可选 | 默认值 |
| 安全审核提示词（safetyReview） | 内容安全红线与边界约束，可选（仅启用前置过滤时显示） | 默认值 |
| 情感适配提示词（sentimentAdapter） | 依据评论情感倾向调整回复语气，可选 | 默认值 |
| 输出规范提示词（outputGuidance） | 回复长度/格式/风格等通用约束，可选 | 默认值 |
| 语言要求提示词（languageRequirement） | 根据评论语言自动匹配回复语言的约束规则，可选 | 默认值 |

::: tip 留空即用默认
五个模块均支持留空。留空时后端自动填入完整默认值，无需手动填写即可获得稳定的 AI 输出。若仅需调整某一模块（如只改角色身份），其他模块保持留空即可。
:::

### 组装顺序

提示词由后端按固定顺序拼接，无需手动放置占位符：

1. **角色身份** — 若 AI 角色配置了人格提示词，则优先使用角色的人格设定
2. **安全审核** — 内容安全红线与边界约束
3. **语言要求** — 根据评论语言匹配回复语言
4. **输出规范** — 回复长度/格式/风格约束
5. **情感适配** — 含动态情感提示（非中性情感时追加）
6. **上下文信息** — 文章标题、发布日期、评论数、文章内容、对话历史、评论（由系统自动注入）

### 上下文自动注入

以下上下文由系统自动追加到提示词末尾，无需在模块中手动写入：

| 变量 | 说明 | 注入时机 |
|------|------|---------|
| <code v-pre>{{post_title}}</code> | 文章标题 | 始终注入 |
| <code v-pre>{{post_date}}</code> | 文章发布日期（如 2024-01-15） | 始终注入 |
| <code v-pre>{{comment_count}}</code> | 该文章的评论数 | 始终注入 |
| <code v-pre>{{article}}</code> | 文章/页面内容 | 始终注入 |
| <code v-pre>{{conversation_history}}</code> | 对话历史上下文 | 多轮对话时注入 |
| <code v-pre>{{comment}}</code> | 评论内容（含评论者名称） | 始终注入 |

## Comment Next 冲突检测

插件会在首页自动检测 [plugin-comment-next](https://github.com/halo-sigs/plugin-comment-next)（评论组件 Next）是否安装并启用。Comment Next 已集成 AI 回复、AI 拦截功能，若同时启用本插件可能与该插件的功能重复。

::: warning 冲突提示
检测到 Comment Next 插件已安装并启用时，首页顶部会显示红色冲突提示卡，提供两个跳转链接：

- **AI回复** — 跳转到 Comment Next 插件的 AI 自动回复配置页
- **AI拦截** — 跳转到 Comment Next 插件的 AI 审核配置页

建议二选一：要么在本插件中配置 AI 回复，要么在 Comment Next 中配置，避免两套 AI 回复逻辑同时运行产生重复回复。
:::

## AI Foundation 状态检测

插件首页自动检测 AI Foundation 的安装、启用和模型配置状态，针对不同状态显示对应的警告卡片和快捷跳转按钮：

| 状态 | 提示 | 快捷操作 |
|------|------|---------|
| 未安装 | AI Foundation 未安装 | 前往插件页面、应用商店下载 |
| 已安装未启用 | AI Foundation 未启用 | 前往启用 |
| 已启用未配置模型 | 未配置默认模型 | 添加模型、配置默认模型 |
| 正常 | AI Foundation 连接正常 | — |

## 数据清理

| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| 启用自动清理 | 是否自动清理过期的AI回复记录 | 开启 |
| 保留天数 | 超过此天数的记录将被自动清理 | 30 |

### 手动清理

手动清理区域支持自定义清理时间节点：

1. 在输入框中填写清理天数（默认7天前）
2. 点击 **立即清理** 按钮
3. 弹出二次确认弹窗，确认后执行清理
4. 清理完成后显示删除的记录数量

::: warning
清理操作不可撤销，执行前会弹出确认弹窗。清理仅删除 `AiCommentReply` 记录（插件内部的日志记录），不会删除已发布的 Halo Reply 评论。
:::

## 配置导入导出

插件设置页面顶部提供导入导出按钮，方便备份和迁移配置。

### 导出配置

点击 **导出** 按钮，将当前配置（包括 ConfigMap 数据和所有 AI 角色）导出为 JSON 文件。

### 导入配置

1. 点击 **导入** 按钮，选择 JSON 配置文件
2. 确认导入操作（导入会覆盖当前配置，不可撤销）
3. 导入完成后自动刷新设置和角色列表

::: warning
导入操作会覆盖当前配置，请谨慎操作。建议在导入前先导出当前配置作为备份。
:::
