From e5f973c13dc25e3464ac8a706da617f21b7dd7be Mon Sep 17 00:00:00 2001 From: sunny-335 Date: Tue, 23 Jun 2026 19:54:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AF=84=E8=AE=BA=E5=89=8D=E7=BD=AE?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=EF=BC=88=E5=90=88=E8=A7=84=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=EF=BC=89=E4=B8=8E=20AI=20Foundation=20=E9=9A=94=E7=A6=BB?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=20(v1.1.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +- build.gradle | 2 +- docs/CHANGELOG.md | 82 +++++++ docs/guide/draft-mode.md | 12 + docs/guide/faq.md | 31 +++ docs/guide/introduction.md | 18 +- docs/guide/manual-trigger.md | 12 + docs/guide/prompt.md | 2 + docs/guide/sentiment.md | 12 +- docs/guide/settings.md | 42 ++++ docs/index.md | 12 +- gradle.properties | 5 +- .../CommentAiAutopilotPlugin.java | 54 ++++- .../extension/AiCommentReply.java | 6 + .../service/AiFoundationClient.java | 151 +++++------- .../service/AiFoundationDelegate.java | 73 ++++++ .../service/AiReplyOrchestrator.java | 58 ++++- .../service/CommentPreFilterService.java | 220 ++++++++++++++++++ src/main/resources/extensions/settings.yaml | 10 + src/main/resources/plugin.yaml | 2 +- ui/build.gradle | 36 ++- ui/src/views/LogsView.vue | 14 +- ui/src/views/SettingsView.vue | 22 +- 23 files changed, 742 insertions(+), 139 deletions(-) create mode 100644 src/main/java/top/nxxy335/commentaiautopilot/service/AiFoundationDelegate.java create mode 100644 src/main/java/top/nxxy335/commentaiautopilot/service/CommentPreFilterService.java diff --git a/README.md b/README.md index 53ebd6a..d39f37c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # AI回评 / Comment AI Autopilot -基于 AI 的 Halo 博客评论自动回复插件,支持多 AI 角色、自审核、自动发布和对话式连续回复。 +基于 AI 的 Halo 博客评论自动回复插件,支持多 AI 角色、合规检测、自审核、自动发布和对话式连续回复。 ## 功能特性 @@ -9,6 +9,7 @@ - **自动回复** — 监听新评论,自动调用 AI 生成回复,支持多轮对话上下文 - **多语言适配** — 根据评论语言自动用对应语言回复 - **情感分析** — 分析评论情感倾向(非常正面/正面/中性/负面/非常负面),根据情感调整回复语气 +- **前置过滤(合规检测)** — AI 回复前对评论进行合规性分类,自动拦截广告/辱骂攻击/敏感内容/无意义内容,违规评论停止生成 AI 回复以节省 Token,可选自动将违规评论设为待审核状态 - **草稿模式** — AI 回复先存为草稿,管理员审核后再发布,支持批量操作 - **失败重试** — AI 生成失败时自动重试,指数退避策略 - **对话轮次限制** — 同一评论线程中限制 AI 最多回复轮次,防止无限对话 @@ -20,7 +21,7 @@ - **Prompt 模板** — 支持自定义 Prompt 模板,提供多种模板变量(文章标题、发布日期、评论数、对话历史等) - **Prompt 预设** — 内置友好型、专业型、幽默型、简洁型预设风格,可多选组合 - **插件健康检查** — 实时检测 AI Foundation 连接状态和模型可用性 -- **日志筛选** — 按状态、情感筛选,关键词搜索 +- **日志筛选** — 按状态、情感筛选,关键词搜索,支持查看拦截原因和分类标签 - **数据清理** — 自动清理超过指定天数的旧记录 - **AI Foundation 集成** — 通过 Halo 官方推荐的 `ExtensionGetter` 获取 AI 服务,需安装 AI Foundation 插件 diff --git a/build.gradle b/build.gradle index 4d6cd49..1a547fe 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { } group 'top.nxxy335.commentaiautopilot' -version '1.0.4' +version project.property('version') repositories { mavenCentral() diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 591a024..b38d540 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,87 @@ # 更新日志 +## v1.1.0 + +> 2026-06-23 + +### 新增 + +- **评论前置过滤(合规检测)** — AI 回复前对评论进行合规性分类,识别广告/辱骂攻击/敏感内容/无意义内容,违规评论停止生成 AI 回复,节省 Token +- **违规评论自动设为待审核** — 检测到违规评论时自动将原评论 `approved` 置为 `false`,进入待审核队列,前端不再展示该评论 +- **FILTERED 日志状态** — 被拦截的评论生成"已拦截"状态记录,日志页支持按"已拦截"状态筛选 +- **拦截原因分类标签** — 日志页显示拦截分类标签(广告/辱骂攻击/敏感内容/无意义)和详细拦截原因(含评论内容摘要) +- **安全优先策略** — AI 分类服务不可用或异常时,默认拦截评论而非放行,防止违规内容漏网 + +### 改进 + +- **AI Foundation 隔离加载** — 将 AI Foundation API 引用隔离到 `AiFoundationDelegate` 类,`AiFoundationClient` 不再直接引用 AI Foundation 类,修复未安装 AI Foundation 时插件无法启动的问题(`NoClassDefFoundError`) +- **评论内容 HTML 剥离** — 前置过滤检测前自动剥离评论 HTML 标签,提升 AI 分类准确性 +- **对话场景精准处罚** — AI 对话场景下违规内容来自 Reply 时,仅取消通过该 Reply 而非父级 Comment,避免误伤 +- **升级配置自动迁移** — 从 v1.0.x 升级时自动将 `preFilterEnabled` 从 `false` 迁移为 `true`(新默认值) + +### Bug 修复 + +- **修复未安装 AI Foundation 时插件无法启动** — `BeanDefinitionStoreException: Failed to parse AiFoundationClient`,将 AI Foundation API 引用隔离到委托类 +- **修复前置过滤默认关闭** — `preFilterEnabled` 默认值从 `false` 改为 `true`,新安装和升级用户均默认启用 +- **修复 `penalize()` 遗漏 `approved=null`** — Halo 评论创建时 `approved` 可能为 `null`,原代码仅处理 `approved=true` 的情况 +- **修复 `classify()` 失败时放行违规评论** — `defaultIfEmpty` 和 `onErrorResume` 改为拦截而非放行 +- **修复 Windows 构建失败** — Gradle Worker Daemon 执行 pnpm 退出码 268435659,改用系统 pnpm Exec 任务并禁用 Daemon + +--- + +## v1.0.4 + +> 2026-06-19 + +### 改进 + +- **对话弹窗头像显示** — 对话弹窗中每条消息显示 Gravatar 头像,基于评论者或 AI 角色的邮箱自动匹配 +- **对话引用摘要** — 对话弹窗中回复消息显示引用摘要框,标明引用了谁的什么内容,支持截断显示 +- **UI 全面重构** — LogsView 和 SettingsView 改用纯 Scoped CSS,移除所有 Tailwind 类和自定义 CSS 依赖,避免 Halo 主题冲突 +- **标签去 Emoji 化** — 状态、情感标签改用纯色背景标签,去除所有 Emoji +- **移动端适配优化** — 全面优化移动端响应式布局,解决排版错位问题 +- **AI角色设置完善** — 支持 CRUD、Gravatar 头像预览、性别/唤醒词/默认角色配置 +- **配置导入导出** — 支持将插件配置(ConfigMap + AI角色)导出为 JSON 文件,方便备份和迁移 +- **评论者黑名单弹窗选择** — 设置页面可从已有评论列表中选择评论者添加到黑名单 + +### Bug 修复 + +- **修复对话弹窗引用溯源** — 后端 `getConversation` 重写,构建 Reply 映射字典正确溯源引用关系 +- **修复 ConversationMessage 数据结构** — 新增 `quoteOwner`/`quoteContent` 字段支持引用摘要展示 +- **修复 AI 角色邮箱提取** — 后端新增 `extractOwnerEmail` 方法,正确从 CommentOwner 提取邮箱用于头像生成 + +--- + +## v1.0.3 + +### 改进 + +- **SettingsView 完整功能版** — 5个设置面板(基本设置、AI角色、模型设置、Prompt、数据清理)全部实现 +- **AI角色管理** — 支持 CRUD、Gravatar 头像、性别/唤醒词/默认角色配置 +- **数据清理** — 自动清理开关、保留天数滑块、手动清理 +- **导入导出** — JSON 配置导入导出 +- **评论者黑名单弹窗选择** — 从已有评论列表中选择评论者 + +--- + +## v1.0.2 + +### 改进 + +- **LogsView & SettingsView 样式重构** — 移除所有 Tailwind 类,改用 `