feat: 草稿模式修复、回复编辑、预设扩展、多语言回复、文档全面更新

- 修复草稿模式下仍自动发布评论的Bug
- 新增草稿模式下编辑AI回复内容功能
- 新增3个Prompt预设(技术解答型/鼓励型/知识科普型)
- 新增多语言回复指令
- 新增日志页面时间范围筛选
- 新增AI角色排序功能
- 新增配置导入/导出功能
- 修复processingLocks内存泄漏
- 修复OptimisticLockingFailureException缺少重试
- 修复publishReply空Mono导致审核挂起
- 移除近7日回复趋势卡片
- 版本号更新至0.0.0-ygkszvd
- 全面更新插件文档
This commit is contained in:
sunny-335
2026-06-16 18:52:42 +08:00
parent 6f1cb4b037
commit 72726da9b8
26 changed files with 1217 additions and 276 deletions
+2
View File
@@ -31,6 +31,8 @@
|--------|------|--------|
| 自动回复 | 是否启用自动回复功能 | 开启 |
| 自动发布 | AI回复是否自动发布,关闭则存为草稿 | 开启 |
| 最大对话轮次 | 同一评论线程中AI最多自动回复的轮次 | 8 |
| 速率限制 | 每分钟最大AI回复数量 | 10 |
| 最大重试次数 | AI生成失败时的最大重试次数 | 3 |
## 重试机制
+33 -2
View File
@@ -9,17 +9,32 @@
## 审核流程
1. 新评论到达后,AI生成回复内容
2. 回复以草稿状态保存(`approved = false`
2. 回复以草稿状态保存(状态为"通过",但未发布
3.**AI回复日志** 页面,草稿状态的记录会显示审核按钮
4. 管理员可以:
- **编辑** — 修改AI回复内容后再审核
- **审核通过** — 回复立即发布,访客可见
- **拒绝** — 删除草稿回复,记录标记为 REJECTED
## 编辑回复内容
草稿模式下,管理员可以在发布前编辑AI生成的回复内容:
1. 在日志页面找到状态为"通过"且未发布的记录
2. 点击 **编辑** 按钮
3. 在弹出的编辑对话框中修改回复内容
4. 点击 **保存** 完成修改
5. 修改后可继续审核通过或拒绝
::: tip
编辑功能仅在草稿状态(通过但未发布)下可用。已发布的回复不支持编辑。
:::
## 日志页面操作
在AI回复日志页面:
- 草稿记录显示 **审核通过****拒绝** 按钮
- 草稿记录显示 **编辑**、**审核通过** 和 **拒绝** 按钮
- 已发布的记录显示正常状态
- 被拒绝的记录显示 REJECTED 标签
@@ -37,3 +52,19 @@
::: warning
批量操作不可撤销,请谨慎操作。
:::
## 草稿模式工作原理
草稿模式下,AI回复的处理流程与自动发布模式不同:
| 步骤 | 自动发布模式 | 草稿模式 |
|------|------------|---------|
| AI生成回复 | ✅ | ✅ |
| 创建 Halo Reply 扩展 | ✅ 立即创建 | ❌ 不创建 |
| 保存 AiCommentReply 记录 | 状态=PASS, 已发布 | 状态=PASS, 未发布 |
| 审核通过时 | — | 创建 Reply 扩展并发布 |
| 拒绝时 | — | 标记为 REJECTED |
::: info
草稿模式下不会创建 Halo 的 Reply 评论扩展,只有审核通过后才会创建。这意味着在审核前,评论区域不会显示任何AI回复。
:::
+43 -4
View File
@@ -10,10 +10,14 @@
## AI回复头像不显示?
1. 确认在插件设置中填写了AI角色邮箱
1. 确认在AI角色设置中填写了邮箱
2. 邮箱需要在 [Gravatar](https://gravatar.com) 上注册并设置头像
3. 插件使用 [Cravatar](https://cravatar.cn) 作为Gravatar镜像服务
::: info
由于 Halo 评论系统的限制,AI角色头像仅支持通过 Gravatar 邮箱方式设置,不支持自定义上传头像。
:::
## 评论没有触发AI回复?
可能的原因:
@@ -23,6 +27,8 @@
3. **已有AI回复记录** — 同一评论不会重复触发
4. **历史评论** — 插件启动前的评论不会自动触发,可使用手动触发
5. **AI生成失败** — 检查AI模型配置和日志
6. **速率限制** — 检查是否触发了每分钟回复数量限制
7. **对话轮次上限** — 检查是否达到了最大对话轮次
## 如何对历史评论触发AI回复?
@@ -32,12 +38,24 @@
## 草稿模式的回复在哪里审核?
在插件管理页面的 **AI回复日志** 中,草稿状态的记录会显示"审核通过"和"拒绝"按钮。
在插件管理页面的 **AI回复日志** 中,草稿状态的记录会显示"编辑"、"审核通过"和"拒绝"按钮。
## 如何在发布前编辑AI回复?
1. 确保草稿模式已启用(关闭"自动发布"开关)
2. 在AI回复日志页面找到状态为"通过"且未发布的记录
3. 点击 **编辑** 按钮修改回复内容
4. 修改完成后点击"审核通过"发布
::: tip
编辑功能仅在草稿状态(通过但未发布)下可用。
:::
## 如何修改AI回复的语气风格?
1. 在插件设置中修改 **AI角色人格提示词**
2. 或修改 **自定义Prompt模板**
3. 或选择不同的 **Prompt预设** 风格组合
## AI Foundation 插件是必须的吗?
@@ -63,6 +81,27 @@
在插件设置的"数据清理"页面,可以配置自动清理超过指定天数的记录(默认30天),也可以点击"立即清理"手动触发。
## 黑名单支持邮箱吗?
## 黑名单支持正则表达式吗?
支持。黑名单同时匹配评论者的显示名称和邮箱地址,不区分大小写。你也可以在设置页面点击"添加评论者"按钮从评论列表中选择。
支持。黑名单支持三种匹配方式:
- **名称匹配**:直接输入评论者显示名称
- **邮箱匹配**:输入邮箱地址
- **正则表达式**:以 `regex:` 开头,如 `regex:^spam.*`
## 如何管理多个AI角色?
在插件设置的 **AI角色设置** 区域,可以添加、编辑、删除AI角色,也可以使用 ▲▼ 按钮调整角色顺序。每个角色有独立的昵称、人格提示词和Gravatar头像。
## 如何导入/导出配置?
在插件设置页面右上角:
- 点击 **导出配置** 将当前设置和AI角色导出为 JSON 文件
- 点击 **导入配置** 从 JSON 文件导入配置(导入前会显示确认对话框)
## 日志页面如何按时间筛选?
在日志页面的筛选栏中,使用日期选择器设置起始日期和结束日期,即可筛选指定时间范围内的记录。
## 为什么AI角色不支持自定义上传头像?
Halo 的评论组件对匿名评论者(kind=Email)始终使用 `email-hash` 注解生成 Gravatar 头像,会忽略自定义头像 URL。这是 Halo 评论系统的设计限制,因此插件只支持通过 Gravatar 邮箱方式设置AI角色头像。
+15 -3
View File
@@ -32,9 +32,21 @@
1. 进入插件设置页面
2.**基本设置** 中找到 **评论者黑名单**
3. 输入评论者的显示名称邮箱,多个用逗号分隔
3. 输入评论者的显示名称邮箱或正则表达式,多个用逗号分隔
4. 保存设置
### 匹配方式
| 方式 | 格式 | 示例 |
|------|------|------|
| 名称匹配 | 直接输入名称 | `张三` |
| 邮箱匹配 | 输入邮箱地址 | `spam@example.com` |
| 正则表达式 | 以 `regex:` 开头 | `regex:^spam.*` |
::: tip
正则表达式匹配可以批量屏蔽符合模式的评论者,例如 `regex:^bot` 会屏蔽所有以 "bot" 开头的评论者。
:::
### 从评论列表选择
1. 在黑名单输入框旁点击 **添加评论者** 按钮
@@ -45,7 +57,7 @@
### 示例
```
张三,spam@example.com,李四
张三,spam@example.com,李四,regex:^bot.*
```
黑名单中的评论者发布评论时,插件会同时匹配显示名称和邮箱地址(不区分大小写),匹配成功则跳过AI回复。
黑名单中的评论者发布评论时,插件会同时匹配显示名称和邮箱地址(不区分大小写),正则表达式也会参与匹配。匹配成功则跳过AI回复。
+7 -6
View File
@@ -5,18 +5,19 @@ AI回评(Comment AI Autopilot)是一个 Halo 博客系统的插件,能够
## 核心功能
- **自动回复** — 监听新评论,自动调用AI生成回复,支持多轮对话上下文
- **多语言适配** — 根据评论语言自动用对应语言回复
- **多语言适配** — 根据评论语言自动用对应语言回复(中文、英文、日文、韩文等)
- **情感分析** — 分析评论情感倾向(正面/中性/负面),根据情感调整回复语气
- **草稿模式** — AI回复先存为草稿,管理员审核后再发布
- **草稿模式** — AI回复先存为草稿,管理员审核后再发布,支持发布前编辑回复内容
- **失败重试** — AI生成失败时自动重试,指数退避策略
- **批量操作** — 草稿模式下支持批量通过/拒绝/删除
- **文章/页面级开关** — 在文章编辑器中直接控制是否启用AI回复,文章默认开启,页面默认关闭
- **评论者黑名单** — 屏蔽指定评论者,不触发AI回复
- **评论者黑名单** — 屏蔽指定评论者,支持名称、邮箱和正则表达式匹配
- **手动触发** — 在评论管理页面对历史评论手动触发AI回复
- **AI角色** — 自定义AI回复者的昵称、人格提示词和Gravatar头像
- **AI角色** — 自定义AI回复者的昵称、人格提示词和Gravatar头像,支持多角色管理和排序
- **安全审核** — AI生成的内容经过安全审核,不合规内容自动拒绝
- **仪表盘统计** — 显示回复数、情感分布、每日回复趋势等图表
- **日志筛选搜索** — 按状态、情感筛选,关键词搜索
- **仪表盘统计** — 显示回复数、情感分布、通过率、平均审核评分等统计信息
- **日志筛选搜索** — 按状态、情感筛选,关键词搜索,时间范围过滤,支持分页
- **配置导入/导出** — 支持导出和导入插件配置,方便迁移和备份
- **数据清理** — 自动清理超过指定天数的旧记录
- **AI Foundation 集成** — 必须安装 Halo AI Foundation 插件,使用其提供的AI模型能力
+31 -5
View File
@@ -1,6 +1,28 @@
# AI角色
AI角色定义了回复评论的虚拟身份,包括昵称、人格和头像。
AI角色定义了回复评论的虚拟身份,包括昵称、人格和头像。支持创建多个角色并灵活管理。
## 多角色管理
插件支持创建多个AI角色,每个角色有独立的昵称、人格提示词和Gravatar头像。在设置页面的 **AI角色设置** 区域可以管理所有角色。
### 默认角色
系统必须保留一个默认角色,用于没有指定角色的场景。默认角色不可删除,但可以将其他角色设为默认。
### 角色排序
多角色场景下,可以使用角色卡片上的 ▲▼ 按钮调整角色顺序。排序会影响角色在列表中的展示顺序。
### 角色操作
| 操作 | 说明 |
|------|------|
| 添加角色 | 点击"添加角色"按钮创建新角色 |
| 编辑角色 | 点击编辑图标修改角色信息 |
| 删除角色 | 点击删除图标移除角色(默认角色不可删除) |
| 设为默认 | 点击星标图标将角色设为默认角色 |
| 排序 | 使用 ▲▼ 按钮调整角色顺序 |
## 角色配置
@@ -28,11 +50,11 @@ AI回复者的显示名称,默认为「小回」。修改后新回复将使用
### 邮箱与头像
填写邮箱后,AI回复者的头像将通过 Gravatar 服务自动生成:
填写邮箱后,AI回复者的头像将通过 CravatarGravatar 镜像)服务自动生成:
1. 插件根据邮箱生成 SHA-256 哈希
2. 构造 Gravatar URL`https://cn.cravatar.com/avatar/{hash}`
3. 头像URL存储在评论的 `owner.annotations["avatar"]`
2. 构造头像 URL`https://cn.cravatar.com/avatar/{hash}`
3. Halo 评论系统通过 `email-hash` 注解自动匹配头像
::: warning
如果不填写邮箱,AI回复者将使用 Halo 默认头像。
@@ -40,7 +62,7 @@ AI回复者的显示名称,默认为「小回」。修改后新回复将使用
### 头像预览
设置页面输入邮箱后,右侧会实时显示 Gravatar 头像预览,方便确认头像是否正确。
角色编辑对话框中输入邮箱后,会实时显示 Gravatar 头像预览,方便确认头像是否正确。
::: tip
如果预览头像不正确,请检查:
@@ -48,3 +70,7 @@ AI回复者的显示名称,默认为「小回」。修改后新回复将使用
2. 是否已在 [Gravatar](https://gravatar.com) 上为该邮箱设置头像
3. 头像更新可能有缓存延迟
:::
::: info
由于 Halo 评论系统的限制,AI角色头像仅支持通过 Gravatar 邮箱方式设置,不支持自定义上传头像。这是因为 Halo 的评论组件对匿名评论者(kind=Email)始终使用 `email-hash` 注解生成 Gravatar 头像,忽略自定义头像 URL。
:::
+38 -1
View File
@@ -9,6 +9,13 @@ Prompt模板控制AI生成回复时的完整提示词结构。
{{safety_prompt}}
【语言要求】你必须使用与评论相同的语言回复。检测评论的语言特征:
- 如果评论包含中文字符(汉字),请用中文回复
- 如果评论包含日文假名(平假名/片假名),请用日文回复
- 如果评论包含韩文字符,请用韩文回复
- 如果评论主要是拉丁字母,请根据其语言特征(如英语、法语、西班牙语等)用相同语言回复
- 绝对不要用与评论不同的语言回复
请回复以下评论。注意:
- 回复长度应与评论长度匹配,简短问候简短回复
- 不要复述或总结文章内容
@@ -25,6 +32,20 @@ Prompt模板控制AI生成回复时的完整提示词结构。
{{comment}}
```
## 多语言回复
默认模板中包含语言要求指令,AI会自动检测评论的语言并用相同语言回复:
- 中文评论 → 中文回复
- 英文评论 → 英文回复
- 日文评论 → 日文回复
- 韩文评论 → 韩文回复
- 其他语言 → 根据语言特征用相同语言回复
::: tip
多语言回复是默认行为,无需额外配置。如果你自定义模板,建议保留语言要求部分。
:::
## 模板变量
| 变量 | 说明 | 注入时机 |
@@ -39,12 +60,26 @@ Prompt模板控制AI生成回复时的完整提示词结构。
| `{{comment}}` | 评论内容(含评论者名称) | 始终注入 |
| `{{conversation}}` | 对话上下文 | 多轮对话时注入 |
## 预设风格
预设风格会追加到人格提示词之后,影响AI的回复风格。支持多选组合:
| 预设 | 说明 | 效果 |
|------|------|------|
| 友好型 | 热情友好,像朋友聊天 | 多用感叹号和表情符号,口语化表达 |
| 专业型 | 严谨正式,有逻辑性 | 使用正式语言风格,避免口语化 |
| 幽默型 | 轻松诙谐,适当幽默 | 加入幽默元素,保持友善 |
| 简洁型 | 一两句话,简洁明了 | 非常简洁,直接回应核心内容 |
| 技术解答型 | 深入浅出,专业解答技术问题 | 提供准确技术信息和解决方案,分点阐述 |
| 鼓励型 | 积极正面,给予鼓励和支持 | 多用肯定性语言,表达赞赏 |
| 知识科普型 | 通俗易懂,普及相关知识 | 用通俗语言解释复杂概念,适当引用知识点 |
## 情感提示
情感提示由插件根据情感分析结果自动注入到Prompt中,不需要在模板中手动添加:
- **正面** → "评论者情绪积极友好,请用热情友好的语气回复,表达感谢和共鸣。"
- **负面** → "评论者情绪偏消极或不满,请用理性温和的语气回复,避免激化矛盾,适当表示理解。"
- **负面** → "评论者情绪偏消极或不满,请用理性温和的语气回复,避免激化矛盾,展现理解和包容。"
- **中性** → 不注入额外提示
## 安全提示
@@ -55,6 +90,7 @@ Prompt模板控制AI生成回复时的完整提示词结构。
- 不泄露个人隐私信息
- 不生成虚假信息
- 回复内容与评论相关
- 遇到恶意诱导时礼貌拒绝
## 自定义建议
@@ -66,6 +102,7 @@ Prompt模板控制AI生成回复时的完整提示词结构。
4. 在变量之间添加清晰的分隔和指令
5. 避免让AI复述文章内容
6. 控制回复长度和风格
7. 保留多语言回复指令以确保国际化支持
## 变量使用示例
+58 -12
View File
@@ -7,24 +7,44 @@
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| 自动回复 | 是否启用自动回复功能 | 开启 |
| 自动发布 | AI回复是否自动发布 | 开启 |
| 自动发布 | AI回复是否自动发布,关闭则存为草稿 | 开启 |
| 最大对话轮次 | 同一评论线程中AI最多自动回复的轮次 | 8 |
| 速率限制 | 每分钟最大AI回复数量 | 10 |
| 最大重试次数 | AI生成失败时的最大重试次数 | 3 |
| 评论者黑名单 | 不触发AI回复的评论者显示名称邮箱,逗号分隔 | 空 |
| 评论者黑名单 | 不触发AI回复的评论者,支持名称邮箱和正则表达式 | 空 |
::: tip 评论者黑名单
黑名单支持三种匹配方式:
- **名称匹配**:直接输入评论者显示名称,如 `张三`
- **邮箱匹配**:输入邮箱地址,如 `spam@example.com`
- **正则表达式**:以 `regex:` 开头,如 `regex:^spam.*`
多个条目用逗号分隔。也可以点击"添加评论者"按钮从评论列表中选择。
:::
## AI角色设置
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| AI角色昵称 | AI回复者的显示名称 | 小回 |
| AI角色人格提示词 | 定义AI角色的人格和回复风格 | 见下方 |
| AI角色邮箱 | 用于Gravatar头像服务展示头像 | 空 |
AI角色支持多角色管理,每个角色有独立的昵称、人格提示词和Gravatar头像。
默认人格提示词:
### 角色管理
> 你是「小回」,一个友善的评论者。你的回复简洁自然,像朋友聊天一样。简短的评论就简短回复,有深度的讨论才展开回应。不要长篇大论,不要复述文章内容。
- **添加角色** — 点击"添加角色"按钮创建新的AI角色
- **编辑角色** — 点击角色卡片上的编辑图标修改角色信息
- **删除角色** — 点击删除图标移除角色(默认角色不可删除)
- **设为默认** — 点击星标图标将角色设为默认角色(用于没有指定角色的场景)
- **角色排序** — 使用 ▲▼ 按钮调整角色顺序
### 角色配置项
| 配置项 | 说明 |
|--------|------|
| 昵称 | AI回复者的显示名称 |
| 邮箱 | 用于Gravatar头像服务展示头像 |
| 人格提示词 | 定义AI角色的人格和回复风格 |
| 设为默认角色 | 是否作为默认角色使用 |
::: tip Gravatar头像
填写邮箱后,AI回复者的头像将通过 [Gravatar](https://gravatar.com) 服务自动生成。如果不填写邮箱,将使用默认头像。
填写邮箱后,AI回复者的头像将通过 [Cravatar](https://cravatar.cn)(Gravatar 镜像)服务自动生成。在角色编辑对话框中输入邮箱后,会实时显示 Gravatar 头像预览。如果不填写邮箱,将使用默认头像。
:::
## 模型设置
@@ -41,8 +61,21 @@
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| Prompt预设 | 选择预设风格,可多选 | 无 |
| 自定义Prompt模板 | AI生成回复时使用的Prompt模板 | 见下方 |
### 预设风格
| 预设 | 说明 |
|------|------|
| 友好型 | 热情友好,像朋友聊天 |
| 专业型 | 严谨正式,有逻辑性 |
| 幽默型 | 轻松诙谐,适当幽默 |
| 简洁型 | 一两句话,简洁明了 |
| 技术解答型 | 深入浅出,专业解答技术问题 |
| 鼓励型 | 积极正面,给予鼓励和支持 |
| 知识科普型 | 通俗易懂,普及相关知识 |
### 模板变量
| 变量 | 说明 |
@@ -52,7 +85,9 @@
| `{{sentiment_prompt}}` | 情感语气提示词(自动注入) |
| `{{article}}` | 文章内容 |
| `{{comment}}` | 评论内容 |
| `{{conversation}}` | 对话上下文(多轮对话时) |
| `{{post_title}}` | 文章标题 |
| `{{post_date}}` | 文章发布日期 |
| `{{comment_count}}` | 评论数 |
## 数据清理
@@ -62,5 +97,16 @@
| 保留天数 | 超过此天数的记录将被自动清理 | 30 |
::: tip
你也可以在数据清理页面点击"立即清理"按钮手动触发清理操作。
你也可以在数据清理区域点击"立即清理"按钮手动触发清理操作。
:::
## 配置导入/导出
设置页面右上角提供配置导入/导出功能:
- **导出配置** — 将当前插件设置和AI角色导出为 JSON 文件
- **导入配置** — 从 JSON 文件导入配置,导入前会显示确认对话框,包含配置内容预览
::: warning
导入配置将覆盖当前配置,此操作不可撤销。
:::