From d737cbc8f164eebe26320d5b7b289dac6f93dda0 Mon Sep 17 00:00:00 2001 From: sunny-335 Date: Tue, 16 Jun 2026 23:20:51 +0800 Subject: [PATCH] feat: v1.0.0-beta.1 - AI Foundation reflection integration and draft mode fix --- README.md | 13 +- build.gradle | 8 +- docs/guide/auto-reply.md | 2 - docs/guide/draft-mode.md | 35 +--- docs/guide/faq.md | 47 +---- docs/guide/filter.md | 18 +- docs/guide/introduction.md | 13 +- docs/guide/persona.md | 36 +--- docs/guide/prompt.md | 39 +--- docs/guide/settings.md | 70 ++----- docs/index.md | 2 +- libs/ai-foundation-api.jar | Bin 355538 -> 374601 bytes .../endpoint/CommentAiAutopilotEndpoint.java | 170 +++++++++------- .../extension/AiCommentReply.java | 2 +- .../extension/AiPersona.java | 2 +- .../listener/ReplyReconciler.java | 6 + .../service/AiFoundationClient.java | 191 +++++++++++++++--- .../service/AiFoundationConfiguration.java | 23 --- .../service/AiReplyService.java | 14 +- .../service/PromptBuilder.java | 22 +- .../service/ReviewService.java | 15 +- .../service/SentimentService.java | 15 +- src/main/resources/plugin.yaml | 6 +- ui/src/views/HomeView.vue | 75 ++++++- ui/src/views/LogsView.vue | 72 +------ ui/src/views/SettingsView.vue | 115 +---------- 26 files changed, 410 insertions(+), 601 deletions(-) delete mode 100644 src/main/java/top/nxxy335/commentaiautopilot/service/AiFoundationConfiguration.java diff --git a/README.md b/README.md index 5fc76cc..3cc576a 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ ## 功能特性 -- **多 AI 角色** — 支持创建多个 AI 角色,每个角色有独立的昵称、人格提示词和 Gravatar 头像,支持排序,可为不同文章指定不同角色 +- **多 AI 角色** — 支持创建多个 AI 角色,每个角色有独立的昵称、人格提示词和 Gravatar 头像,可为不同文章指定不同角色 - **自动回复** — 监听新评论,自动调用 AI 生成回复,支持多轮对话上下文 -- **多语言适配** — 根据评论语言自动用对应语言回复(中文、英文、日文、韩文等) +- **多语言适配** — 根据评论语言自动用对应语言回复 - **情感分析** — 分析评论情感倾向(正面/中性/负面),根据情感调整回复语气 -- **草稿模式** — AI 回复先存为草稿,管理员审核后再发布,支持发布前编辑回复内容,支持批量操作 +- **草稿模式** — AI 回复先存为草稿,管理员审核后再发布,支持批量操作 - **失败重试** — AI 生成失败时自动重试,指数退避策略 - **对话轮次限制** — 同一评论线程中限制 AI 最多回复轮次,防止无限对话 - **速率限制** — 每分钟最大 AI 回复数量,防止批量评论消耗过多额度 @@ -17,11 +17,10 @@ - **手动触发** — 在评论管理页面对历史评论手动触发 AI 回复 - **安全审核** — AI 生成的内容经过安全审核,不合规内容自动拒绝 - **Prompt 模板** — 支持自定义 Prompt 模板,提供多种模板变量(文章标题、发布日期、评论数等) -- **Prompt 预设** — 内置友好型、专业型、幽默型、简洁型、技术解答型、鼓励型、知识科普型预设风格,可多选组合 -- **仪表盘统计** — 显示回复数、情感分布、通过率、平均审核评分等统计信息 +- **Prompt 预设** — 内置友好型、专业型、幽默型、简洁型预设风格,可多选组合 +- **仪表盘统计** — 显示回复数、情感分布、每日回复趋势等图表,支持时间范围切换 - **插件健康检查** — 实时检测 AI Foundation 连接状态和模型可用性 -- **日志筛选** — 按状态、情感筛选,关键词搜索,时间范围过滤,支持分页 -- **配置导入/导出** — 支持导出和导入插件配置,方便迁移和备份 +- **日志筛选** — 按状态、情感筛选,关键词搜索 - **数据清理** — 自动清理超过指定天数的旧记录 - **AI Foundation 集成** — 必须安装 Halo AI Foundation 插件,使用其提供的 AI 模型能力 diff --git a/build.gradle b/build.gradle index 563178a..f56f01f 100644 --- a/build.gradle +++ b/build.gradle @@ -5,14 +5,14 @@ plugins { } group 'top.nxxy335.commentaiautopilot' -version '0.0.0-ygkszvd' +version '1.0.0-beta.1' repositories { mavenCentral() } dependencies { - implementation platform('run.halo.tools.platform:plugin:2.23.0') + implementation platform('run.halo.tools.platform:plugin:2.25.0') compileOnly 'run.halo.app:api' compileOnly files('libs/ai-foundation-api.jar') implementation 'org.jsoup:jsoup:1.18.1' @@ -39,7 +39,7 @@ tasks.withType(JavaCompile).configureEach { tasks.register('processUiResources', Copy) { from project(':ui').layout.buildDirectory.dir('dist') - into layout.buildDirectory.dir('resources/main/console') + into layout.buildDirectory.dir('resources/main/ui') dependsOn project(':ui').tasks.named('assemble') shouldRunAfter tasks.named('processResources') } @@ -53,6 +53,6 @@ tasks.named('generatePluginComponentsIdx') { } halo { - version = '2.23' + version = '2.25' } diff --git a/docs/guide/auto-reply.md b/docs/guide/auto-reply.md index 0e825cc..854bf4e 100644 --- a/docs/guide/auto-reply.md +++ b/docs/guide/auto-reply.md @@ -31,8 +31,6 @@ |--------|------|--------| | 自动回复 | 是否启用自动回复功能 | 开启 | | 自动发布 | AI回复是否自动发布,关闭则存为草稿 | 开启 | -| 最大对话轮次 | 同一评论线程中AI最多自动回复的轮次 | 8 | -| 速率限制 | 每分钟最大AI回复数量 | 10 | | 最大重试次数 | AI生成失败时的最大重试次数 | 3 | ## 重试机制 diff --git a/docs/guide/draft-mode.md b/docs/guide/draft-mode.md index 6323a5f..d86ff5a 100644 --- a/docs/guide/draft-mode.md +++ b/docs/guide/draft-mode.md @@ -9,32 +9,17 @@ ## 审核流程 1. 新评论到达后,AI生成回复内容 -2. 回复以草稿状态保存(状态为"通过",但未发布) +2. 回复以草稿状态保存(`approved = false`) 3. 在 **AI回复日志** 页面,草稿状态的记录会显示审核按钮 4. 管理员可以: - - **编辑** — 修改AI回复内容后再审核 - **审核通过** — 回复立即发布,访客可见 - **拒绝** — 删除草稿回复,记录标记为 REJECTED -## 编辑回复内容 - -草稿模式下,管理员可以在发布前编辑AI生成的回复内容: - -1. 在日志页面找到状态为"通过"且未发布的记录 -2. 点击 **编辑** 按钮 -3. 在弹出的编辑对话框中修改回复内容 -4. 点击 **保存** 完成修改 -5. 修改后可继续审核通过或拒绝 - -::: tip -编辑功能仅在草稿状态(通过但未发布)下可用。已发布的回复不支持编辑。 -::: - ## 日志页面操作 在AI回复日志页面: -- 草稿记录显示 **编辑**、**审核通过** 和 **拒绝** 按钮 +- 草稿记录显示 **审核通过** 和 **拒绝** 按钮 - 已发布的记录显示正常状态 - 被拒绝的记录显示 REJECTED 标签 @@ -52,19 +37,3 @@ ::: warning 批量操作不可撤销,请谨慎操作。 ::: - -## 草稿模式工作原理 - -草稿模式下,AI回复的处理流程与自动发布模式不同: - -| 步骤 | 自动发布模式 | 草稿模式 | -|------|------------|---------| -| AI生成回复 | ✅ | ✅ | -| 创建 Halo Reply 扩展 | ✅ 立即创建 | ❌ 不创建 | -| 保存 AiCommentReply 记录 | 状态=PASS, 已发布 | 状态=PASS, 未发布 | -| 审核通过时 | — | 创建 Reply 扩展并发布 | -| 拒绝时 | — | 标记为 REJECTED | - -::: info -草稿模式下不会创建 Halo 的 Reply 评论扩展,只有审核通过后才会创建。这意味着在审核前,评论区域不会显示任何AI回复。 -::: diff --git a/docs/guide/faq.md b/docs/guide/faq.md index 25db149..8724a69 100644 --- a/docs/guide/faq.md +++ b/docs/guide/faq.md @@ -10,14 +10,10 @@ ## AI回复头像不显示? -1. 确认在AI角色设置中填写了邮箱 +1. 确认在插件设置中填写了AI角色邮箱 2. 邮箱需要在 [Gravatar](https://gravatar.com) 上注册并设置头像 3. 插件使用 [Cravatar](https://cravatar.cn) 作为Gravatar镜像服务 -::: info -由于 Halo 评论系统的限制,AI角色头像仅支持通过 Gravatar 邮箱方式设置,不支持自定义上传头像。 -::: - ## 评论没有触发AI回复? 可能的原因: @@ -27,8 +23,6 @@ 3. **已有AI回复记录** — 同一评论不会重复触发 4. **历史评论** — 插件启动前的评论不会自动触发,可使用手动触发 5. **AI生成失败** — 检查AI模型配置和日志 -6. **速率限制** — 检查是否触发了每分钟回复数量限制 -7. **对话轮次上限** — 检查是否达到了最大对话轮次 ## 如何对历史评论触发AI回复? @@ -38,24 +32,12 @@ ## 草稿模式的回复在哪里审核? -在插件管理页面的 **AI回复日志** 中,草稿状态的记录会显示"编辑"、"审核通过"和"拒绝"按钮。 - -## 如何在发布前编辑AI回复? - -1. 确保草稿模式已启用(关闭"自动发布"开关) -2. 在AI回复日志页面找到状态为"通过"且未发布的记录 -3. 点击 **编辑** 按钮修改回复内容 -4. 修改完成后点击"审核通过"发布 - -::: tip -编辑功能仅在草稿状态(通过但未发布)下可用。 -::: +在插件管理页面的 **AI回复日志** 中,草稿状态的记录会显示"审核通过"和"拒绝"按钮。 ## 如何修改AI回复的语气风格? 1. 在插件设置中修改 **AI角色人格提示词** 2. 或修改 **自定义Prompt模板** -3. 或选择不同的 **Prompt预设** 风格组合 ## AI Foundation 插件是必须的吗? @@ -81,27 +63,6 @@ 在插件设置的"数据清理"页面,可以配置自动清理超过指定天数的记录(默认30天),也可以点击"立即清理"手动触发。 -## 黑名单支持正则表达式吗? +## 黑名单支持邮箱吗? -支持。黑名单支持三种匹配方式: -- **名称匹配**:直接输入评论者显示名称 -- **邮箱匹配**:输入邮箱地址 -- **正则表达式**:以 `regex:` 开头,如 `regex:^spam.*` - -## 如何管理多个AI角色? - -在插件设置的 **AI角色设置** 区域,可以添加、编辑、删除AI角色,也可以使用 ▲▼ 按钮调整角色顺序。每个角色有独立的昵称、人格提示词和Gravatar头像。 - -## 如何导入/导出配置? - -在插件设置页面右上角: -- 点击 **导出配置** 将当前设置和AI角色导出为 JSON 文件 -- 点击 **导入配置** 从 JSON 文件导入配置(导入前会显示确认对话框) - -## 日志页面如何按时间筛选? - -在日志页面的筛选栏中,使用日期选择器设置起始日期和结束日期,即可筛选指定时间范围内的记录。 - -## 为什么AI角色不支持自定义上传头像? - -Halo 的评论组件对匿名评论者(kind=Email)始终使用 `email-hash` 注解生成 Gravatar 头像,会忽略自定义头像 URL。这是 Halo 评论系统的设计限制,因此插件只支持通过 Gravatar 邮箱方式设置AI角色头像。 +支持。黑名单同时匹配评论者的显示名称和邮箱地址,不区分大小写。你也可以在设置页面点击"添加评论者"按钮从评论列表中选择。 diff --git a/docs/guide/filter.md b/docs/guide/filter.md index 3cee5e9..45ae346 100644 --- a/docs/guide/filter.md +++ b/docs/guide/filter.md @@ -32,21 +32,9 @@ 1. 进入插件设置页面 2. 在 **基本设置** 中找到 **评论者黑名单** -3. 输入评论者的显示名称、邮箱或正则表达式,多个用逗号分隔 +3. 输入评论者的显示名称或邮箱,多个用逗号分隔 4. 保存设置 -### 匹配方式 - -| 方式 | 格式 | 示例 | -|------|------|------| -| 名称匹配 | 直接输入名称 | `张三` | -| 邮箱匹配 | 输入邮箱地址 | `spam@example.com` | -| 正则表达式 | 以 `regex:` 开头 | `regex:^spam.*` | - -::: tip -正则表达式匹配可以批量屏蔽符合模式的评论者,例如 `regex:^bot` 会屏蔽所有以 "bot" 开头的评论者。 -::: - ### 从评论列表选择 1. 在黑名单输入框旁点击 **添加评论者** 按钮 @@ -57,7 +45,7 @@ ### 示例 ``` -张三,spam@example.com,李四,regex:^bot.* +张三,spam@example.com,李四 ``` -黑名单中的评论者发布评论时,插件会同时匹配显示名称和邮箱地址(不区分大小写),正则表达式也会参与匹配。匹配成功则跳过AI回复。 +黑名单中的评论者发布评论时,插件会同时匹配显示名称和邮箱地址(不区分大小写),匹配成功则跳过AI回复。 diff --git a/docs/guide/introduction.md b/docs/guide/introduction.md index 901b297..5c5475d 100644 --- a/docs/guide/introduction.md +++ b/docs/guide/introduction.md @@ -5,19 +5,18 @@ 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模型能力 diff --git a/docs/guide/persona.md b/docs/guide/persona.md index f382f5d..1b1ce63 100644 --- a/docs/guide/persona.md +++ b/docs/guide/persona.md @@ -1,28 +1,6 @@ # AI角色 -AI角色定义了回复评论的虚拟身份,包括昵称、人格和头像。支持创建多个角色并灵活管理。 - -## 多角色管理 - -插件支持创建多个AI角色,每个角色有独立的昵称、人格提示词和Gravatar头像。在设置页面的 **AI角色设置** 区域可以管理所有角色。 - -### 默认角色 - -系统必须保留一个默认角色,用于没有指定角色的场景。默认角色不可删除,但可以将其他角色设为默认。 - -### 角色排序 - -多角色场景下,可以使用角色卡片上的 ▲▼ 按钮调整角色顺序。排序会影响角色在列表中的展示顺序。 - -### 角色操作 - -| 操作 | 说明 | -|------|------| -| 添加角色 | 点击"添加角色"按钮创建新角色 | -| 编辑角色 | 点击编辑图标修改角色信息 | -| 删除角色 | 点击删除图标移除角色(默认角色不可删除) | -| 设为默认 | 点击星标图标将角色设为默认角色 | -| 排序 | 使用 ▲▼ 按钮调整角色顺序 | +AI角色定义了回复评论的虚拟身份,包括昵称、人格和头像。 ## 角色配置 @@ -50,11 +28,11 @@ AI回复者的显示名称,默认为「小回」。修改后新回复将使用 ### 邮箱与头像 -填写邮箱后,AI回复者的头像将通过 Cravatar(Gravatar 镜像)服务自动生成: +填写邮箱后,AI回复者的头像将通过 Gravatar 服务自动生成: 1. 插件根据邮箱生成 SHA-256 哈希 -2. 构造头像 URL:`https://cn.cravatar.com/avatar/{hash}` -3. Halo 评论系统通过 `email-hash` 注解自动匹配头像 +2. 构造 Gravatar URL:`https://cn.cravatar.com/avatar/{hash}` +3. 头像URL存储在评论的 `owner.annotations["avatar"]` 中 ::: warning 如果不填写邮箱,AI回复者将使用 Halo 默认头像。 @@ -62,7 +40,7 @@ AI回复者的显示名称,默认为「小回」。修改后新回复将使用 ### 头像预览 -在角色编辑对话框中输入邮箱后,会实时显示 Gravatar 头像预览,方便确认头像是否正确。 +在设置页面输入邮箱后,右侧会实时显示 Gravatar 头像预览,方便确认头像是否正确。 ::: tip 如果预览头像不正确,请检查: @@ -70,7 +48,3 @@ AI回复者的显示名称,默认为「小回」。修改后新回复将使用 2. 是否已在 [Gravatar](https://gravatar.com) 上为该邮箱设置头像 3. 头像更新可能有缓存延迟 ::: - -::: info -由于 Halo 评论系统的限制,AI角色头像仅支持通过 Gravatar 邮箱方式设置,不支持自定义上传头像。这是因为 Halo 的评论组件对匿名评论者(kind=Email)始终使用 `email-hash` 注解生成 Gravatar 头像,忽略自定义头像 URL。 -::: diff --git a/docs/guide/prompt.md b/docs/guide/prompt.md index 836e3e5..5516821 100644 --- a/docs/guide/prompt.md +++ b/docs/guide/prompt.md @@ -9,13 +9,6 @@ Prompt模板控制AI生成回复时的完整提示词结构。 {{safety_prompt}} -【语言要求】你必须使用与评论相同的语言回复。检测评论的语言特征: -- 如果评论包含中文字符(汉字),请用中文回复 -- 如果评论包含日文假名(平假名/片假名),请用日文回复 -- 如果评论包含韩文字符,请用韩文回复 -- 如果评论主要是拉丁字母,请根据其语言特征(如英语、法语、西班牙语等)用相同语言回复 -- 绝对不要用与评论不同的语言回复 - 请回复以下评论。注意: - 回复长度应与评论长度匹配,简短问候简短回复 - 不要复述或总结文章内容 @@ -32,20 +25,6 @@ Prompt模板控制AI生成回复时的完整提示词结构。 {{comment}} ``` -## 多语言回复 - -默认模板中包含语言要求指令,AI会自动检测评论的语言并用相同语言回复: - -- 中文评论 → 中文回复 -- 英文评论 → 英文回复 -- 日文评论 → 日文回复 -- 韩文评论 → 韩文回复 -- 其他语言 → 根据语言特征用相同语言回复 - -::: tip -多语言回复是默认行为,无需额外配置。如果你自定义模板,建议保留语言要求部分。 -::: - ## 模板变量 | 变量 | 说明 | 注入时机 | @@ -60,26 +39,12 @@ Prompt模板控制AI生成回复时的完整提示词结构。 | `{{comment}}` | 评论内容(含评论者名称) | 始终注入 | | `{{conversation}}` | 对话上下文 | 多轮对话时注入 | -## 预设风格 - -预设风格会追加到人格提示词之后,影响AI的回复风格。支持多选组合: - -| 预设 | 说明 | 效果 | -|------|------|------| -| 友好型 | 热情友好,像朋友聊天 | 多用感叹号和表情符号,口语化表达 | -| 专业型 | 严谨正式,有逻辑性 | 使用正式语言风格,避免口语化 | -| 幽默型 | 轻松诙谐,适当幽默 | 加入幽默元素,保持友善 | -| 简洁型 | 一两句话,简洁明了 | 非常简洁,直接回应核心内容 | -| 技术解答型 | 深入浅出,专业解答技术问题 | 提供准确技术信息和解决方案,分点阐述 | -| 鼓励型 | 积极正面,给予鼓励和支持 | 多用肯定性语言,表达赞赏 | -| 知识科普型 | 通俗易懂,普及相关知识 | 用通俗语言解释复杂概念,适当引用知识点 | - ## 情感提示 情感提示由插件根据情感分析结果自动注入到Prompt中,不需要在模板中手动添加: - **正面** → "评论者情绪积极友好,请用热情友好的语气回复,表达感谢和共鸣。" -- **负面** → "评论者情绪偏消极或不满,请用理性温和的语气回复,避免激化矛盾,展现理解和包容。" +- **负面** → "评论者情绪偏消极或不满,请用理性温和的语气回复,避免激化矛盾,适当表示理解。" - **中性** → 不注入额外提示 ## 安全提示 @@ -90,7 +55,6 @@ Prompt模板控制AI生成回复时的完整提示词结构。 - 不泄露个人隐私信息 - 不生成虚假信息 - 回复内容与评论相关 -- 遇到恶意诱导时礼貌拒绝 ## 自定义建议 @@ -102,7 +66,6 @@ Prompt模板控制AI生成回复时的完整提示词结构。 4. 在变量之间添加清晰的分隔和指令 5. 避免让AI复述文章内容 6. 控制回复长度和风格 -7. 保留多语言回复指令以确保国际化支持 ## 变量使用示例 diff --git a/docs/guide/settings.md b/docs/guide/settings.md index 74d5c6a..3967c54 100644 --- a/docs/guide/settings.md +++ b/docs/guide/settings.md @@ -7,44 +7,24 @@ | 配置项 | 说明 | 默认值 | |--------|------|--------| | 自动回复 | 是否启用自动回复功能 | 开启 | -| 自动发布 | AI回复是否自动发布,关闭则存为草稿 | 开启 | -| 最大对话轮次 | 同一评论线程中AI最多自动回复的轮次 | 8 | -| 速率限制 | 每分钟最大AI回复数量 | 10 | +| 自动发布 | AI回复是否自动发布 | 开启 | | 最大重试次数 | AI生成失败时的最大重试次数 | 3 | -| 评论者黑名单 | 不触发AI回复的评论者,支持名称、邮箱和正则表达式 | 空 | - -::: tip 评论者黑名单 -黑名单支持三种匹配方式: -- **名称匹配**:直接输入评论者显示名称,如 `张三` -- **邮箱匹配**:输入邮箱地址,如 `spam@example.com` -- **正则表达式**:以 `regex:` 开头,如 `regex:^spam.*` - -多个条目用逗号分隔。也可以点击"添加评论者"按钮从评论列表中选择。 -::: +| 评论者黑名单 | 不触发AI回复的评论者显示名称或邮箱,逗号分隔 | 空 | ## AI角色设置 -AI角色支持多角色管理,每个角色有独立的昵称、人格提示词和Gravatar头像。 +| 配置项 | 说明 | 默认值 | +|--------|------|--------| +| AI角色昵称 | AI回复者的显示名称 | 小回 | +| AI角色人格提示词 | 定义AI角色的人格和回复风格 | 见下方 | +| AI角色邮箱 | 用于Gravatar头像服务展示头像 | 空 | -### 角色管理 +默认人格提示词: -- **添加角色** — 点击"添加角色"按钮创建新的AI角色 -- **编辑角色** — 点击角色卡片上的编辑图标修改角色信息 -- **删除角色** — 点击删除图标移除角色(默认角色不可删除) -- **设为默认** — 点击星标图标将角色设为默认角色(用于没有指定角色的场景) -- **角色排序** — 使用 ▲▼ 按钮调整角色顺序 - -### 角色配置项 - -| 配置项 | 说明 | -|--------|------| -| 昵称 | AI回复者的显示名称 | -| 邮箱 | 用于Gravatar头像服务展示头像 | -| 人格提示词 | 定义AI角色的人格和回复风格 | -| 设为默认角色 | 是否作为默认角色使用 | +> 你是「小回」,一个友善的评论者。你的回复简洁自然,像朋友聊天一样。简短的评论就简短回复,有深度的讨论才展开回应。不要长篇大论,不要复述文章内容。 ::: tip Gravatar头像 -填写邮箱后,AI回复者的头像将通过 [Cravatar](https://cravatar.cn)(Gravatar 镜像)服务自动生成。在角色编辑对话框中输入邮箱后,会实时显示 Gravatar 头像预览。如果不填写邮箱,将使用默认头像。 +填写邮箱后,AI回复者的头像将通过 [Gravatar](https://gravatar.com) 服务自动生成。如果不填写邮箱,将使用默认头像。 ::: ## 模型设置 @@ -61,21 +41,8 @@ AI角色支持多角色管理,每个角色有独立的昵称、人格提示词 | 配置项 | 说明 | 默认值 | |--------|------|--------| -| Prompt预设 | 选择预设风格,可多选 | 无 | | 自定义Prompt模板 | AI生成回复时使用的Prompt模板 | 见下方 | -### 预设风格 - -| 预设 | 说明 | -|------|------| -| 友好型 | 热情友好,像朋友聊天 | -| 专业型 | 严谨正式,有逻辑性 | -| 幽默型 | 轻松诙谐,适当幽默 | -| 简洁型 | 一两句话,简洁明了 | -| 技术解答型 | 深入浅出,专业解答技术问题 | -| 鼓励型 | 积极正面,给予鼓励和支持 | -| 知识科普型 | 通俗易懂,普及相关知识 | - ### 模板变量 | 变量 | 说明 | @@ -85,9 +52,7 @@ AI角色支持多角色管理,每个角色有独立的昵称、人格提示词 | `{{sentiment_prompt}}` | 情感语气提示词(自动注入) | | `{{article}}` | 文章内容 | | `{{comment}}` | 评论内容 | -| `{{post_title}}` | 文章标题 | -| `{{post_date}}` | 文章发布日期 | -| `{{comment_count}}` | 评论数 | +| `{{conversation}}` | 对话上下文(多轮对话时) | ## 数据清理 @@ -97,16 +62,5 @@ AI角色支持多角色管理,每个角色有独立的昵称、人格提示词 | 保留天数 | 超过此天数的记录将被自动清理 | 30 | ::: tip -你也可以在数据清理区域点击"立即清理"按钮手动触发清理操作。 -::: - -## 配置导入/导出 - -设置页面右上角提供配置导入/导出功能: - -- **导出配置** — 将当前插件设置和AI角色导出为 JSON 文件 -- **导入配置** — 从 JSON 文件导入配置,导入前会显示确认对话框,包含配置内容预览 - -::: warning -导入配置将覆盖当前配置,此操作不可撤销。 +你也可以在数据清理页面点击"立即清理"按钮手动触发清理操作。 ::: diff --git a/docs/index.md b/docs/index.md index 78b7a09..4860314 100644 --- a/docs/index.md +++ b/docs/index.md @@ -25,5 +25,5 @@ features: - title: 灵活过滤 details: 文章/页面级开关控制,评论者黑名单支持名称和邮箱匹配 - title: 数据管理 - details: 仪表盘统计、日志筛选搜索与时间范围过滤、配置导入导出、自动清理旧记录 + details: 仪表盘统计、日志筛选搜索、自动清理旧记录 --- diff --git a/libs/ai-foundation-api.jar b/libs/ai-foundation-api.jar index 9d0e2292881c92c02fd5e9edf59b1133cf9a4cba..f6c647aca67bab4d48f4c48f63a91e091569f567 100644 GIT binary patch delta 93056 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 delta 74396 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 z z-hcXuOAbox;>*U@dknsXIOR!z<=OVc;DA)mRfisp4MnRsK&7|A`Nf}Gb9{e^C*vd` z3!v(gX9#JcfX8#`G`*K{bi%tVRM91~cf$ih{#V62v>AYwHcm6|5R7QpkkXW4S_?CI|Bc+@q}Z5qgc*V++H zV>{0NfP<|xJ<||BX^F%jE?APNacn<+hyC*fus&7`L7e$a2+98p0%vI#X|^{R)ckt_ zEgSY;3FJDy8G5LF)F8|o+m=Jx94a2+P
(h0H39|<*X*TfzS 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%0AY}AZ)x?=Q+ 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 diff --git a/src/main/java/top/nxxy335/commentaiautopilot/endpoint/CommentAiAutopilotEndpoint.java b/src/main/java/top/nxxy335/commentaiautopilot/endpoint/CommentAiAutopilotEndpoint.java index 3fa7bee..dc63c48 100644 --- a/src/main/java/top/nxxy335/commentaiautopilot/endpoint/CommentAiAutopilotEndpoint.java +++ b/src/main/java/top/nxxy335/commentaiautopilot/endpoint/CommentAiAutopilotEndpoint.java @@ -1,7 +1,6 @@ package top.nxxy335.commentaiautopilot.endpoint; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.server.RouterFunction; import org.springframework.web.reactive.function.server.ServerRequest; @@ -54,17 +53,17 @@ public class CommentAiAutopilotEndpoint implements CustomEndpoint { private final ReactiveExtensionClient client; private final AiReplyOrchestrator orchestrator; private final AiReplyCleanupService cleanupService; - private final ObjectProvider aiFoundationClientProvider; + private final AiFoundationClient aiFoundationClient; private final CommentReplyPublisher commentReplyPublisher; private final ObjectMapper objectMapper; private static final String CONFIG_MAP_NAME = "comment-ai-autopilot-configmap"; - public CommentAiAutopilotEndpoint(ReactiveExtensionClient client, AiReplyOrchestrator orchestrator, AiReplyCleanupService cleanupService, ObjectProvider aiFoundationClientProvider, CommentReplyPublisher commentReplyPublisher) { + public CommentAiAutopilotEndpoint(ReactiveExtensionClient client, AiReplyOrchestrator orchestrator, AiReplyCleanupService cleanupService, AiFoundationClient aiFoundationClient, CommentReplyPublisher commentReplyPublisher) { this.client = client; this.orchestrator = orchestrator; this.cleanupService = cleanupService; - this.aiFoundationClientProvider = aiFoundationClientProvider; + this.aiFoundationClient = aiFoundationClient; this.commentReplyPublisher = commentReplyPublisher; this.objectMapper = new ObjectMapper(); } @@ -134,8 +133,9 @@ public class CommentAiAutopilotEndpoint implements CustomEndpoint { final Instant finalStartInstant = startInstant; final Instant finalEndInstant = endInstant; - // Check if we need in-memory filtering (keyword or date range) - boolean needsMemoryFilter = !keywordFilter.isBlank() || finalStartInstant != null || finalEndInstant != null; + // Check if we need in-memory filtering (keyword, date range, status, or sentiment) + boolean needsMemoryFilter = !keywordFilter.isBlank() || finalStartInstant != null || finalEndInstant != null + || !statusFilter.isBlank() || !sentimentFilter.isBlank(); if (needsMemoryFilter) { // Fall back to listAll + in-memory filter for complex queries @@ -184,30 +184,18 @@ public class CommentAiAutopilotEndpoint implements CustomEndpoint { .flatMap(result -> ServerResponse.ok().bodyValue(result)); } - // Simple filters only - use server-side pagination + // No filters - use server-side pagination directly Sort sort = "asc".equalsIgnoreCase(sortOrder) ? Sort.by(Sort.Order.asc("metadata.creationTimestamp")) : Sort.by(Sort.Order.desc("metadata.creationTimestamp")); var listOptions = ListOptions.builder().build(); - // Note: Halo's ListOptions fieldSelector support may be limited - // For status and sentiment, we'll still filter in memory but with paginated data return client.listBy(AiCommentReply.class, listOptions, PageRequestImpl.of(page - 1, size, sort)) .map(listResult -> { - var items = listResult.getItems(); - // Apply status/sentiment filter in memory on the current page - var filtered = items.stream() - .filter(r -> { - if (!statusFilter.isBlank() && !statusFilter.equals(r.getSpec().getStatus())) return false; - if (!sentimentFilter.isBlank() && !sentimentFilter.equals(r.getSpec().getSentiment())) return false; - return true; - }) - .toList(); - Map result = new HashMap<>(); - result.put("items", filtered); + result.put("items", listResult.getItems()); result.put("total", listResult.getTotal()); result.put("page", page); result.put("size", size); @@ -438,31 +426,50 @@ public class CommentAiAutopilotEndpoint implements CustomEndpoint { .flatMap(record -> { String replyName = record.getSpec().getReplyName(); if (replyName == null || replyName.isBlank()) { - // Draft mode: no Reply extension exists, create one with approved=true - return commentReplyPublisher.publishReply( - record.getSpec().getCommentId(), - record.getSpec().getReply(), - record.getSpec().getPostId(), - record.getSpec().getReplyTo(), - true, - record.getSpec().getPersonaName() - ) - .switchIfEmpty(Mono.defer(() -> { - log.warn("[Endpoint] publishReply returned empty for draft approval of {}, AI reply may already exist", name); - return Mono.error(new IllegalStateException("AI回复已存在,无法重复发布")); - })) - .flatMap(publishedReply -> { - String newReplyName = publishedReply.getMetadata().getName(); - return client.fetch(AiCommentReply.class, name) - .flatMap(latest -> { - latest.getSpec().setReplyName(newReplyName); - latest.getSpec().setPublished(true); - return client.update(latest); - }) + // Draft mode: no Reply extension exists yet. + // First check if a Reply already exists (e.g. from a previous autoPublish=true run) + return findReplyForRecord(record) + .flatMap(existingReply -> { + // Reply already exists, just approve it + existingReply.getSpec().setApproved(true); + existingReply.getSpec().setApprovedTime(Instant.now()); + return client.update(existingReply) .retryWhen(Retry.backoff(3, Duration.ofMillis(100)) - .filter(e -> e instanceof OptimisticLockingFailureException)); + .filter(e -> e instanceof OptimisticLockingFailureException)) + .then(Mono.defer(() -> client.fetch(AiCommentReply.class, name) + .flatMap(latest -> { + latest.getSpec().setReplyName(existingReply.getMetadata().getName()); + latest.getSpec().setPublished(true); + return client.update(latest); + }) + .retryWhen(Retry.backoff(3, Duration.ofMillis(100)) + .filter(e -> e instanceof OptimisticLockingFailureException)) + )) + .then(ServerResponse.ok().bodyValue(Map.of("message", "approved"))); }) - .then(ServerResponse.ok().bodyValue(Map.of("message", "approved"))); + .switchIfEmpty(Mono.defer(() -> { + // No existing Reply found, create a new approved one + return commentReplyPublisher.publishReply( + record.getSpec().getCommentId(), + record.getSpec().getReply(), + record.getSpec().getPostId(), + record.getSpec().getReplyTo(), + true, + record.getSpec().getPersonaName() + ) + .flatMap(publishedReply -> { + String newReplyName = publishedReply.getMetadata().getName(); + return client.fetch(AiCommentReply.class, name) + .flatMap(latest -> { + latest.getSpec().setReplyName(newReplyName); + latest.getSpec().setPublished(true); + return client.update(latest); + }) + .retryWhen(Retry.backoff(3, Duration.ofMillis(100)) + .filter(e -> e instanceof OptimisticLockingFailureException)); + }) + .then(ServerResponse.ok().bodyValue(Map.of("message", "approved"))); + })); } else { // Reply extension already exists, set approved=true return client.fetch(Reply.class, replyName) @@ -536,27 +543,45 @@ public class CommentAiAutopilotEndpoint implements CustomEndpoint { .flatMap(record -> { String replyName = record.getSpec().getReplyName(); if (replyName == null || replyName.isBlank()) { - // Draft mode: no Reply extension exists, create one with approved=true - return commentReplyPublisher.publishReply( - record.getSpec().getCommentId(), - record.getSpec().getReply(), - record.getSpec().getPostId(), - record.getSpec().getReplyTo(), - true, - record.getSpec().getPersonaName() - ) - .switchIfEmpty(Mono.error(new IllegalStateException("AI回复已存在,无法重复发布"))) - .flatMap(publishedReply -> { - String newReplyName = publishedReply.getMetadata().getName(); - return client.fetch(AiCommentReply.class, name) - .flatMap(latest -> { - latest.getSpec().setReplyName(newReplyName); - latest.getSpec().setPublished(true); - return client.update(latest); - }) + // Draft mode: check if Reply already exists first + return findReplyForRecord(record) + .flatMap(existingReply -> { + existingReply.getSpec().setApproved(true); + existingReply.getSpec().setApprovedTime(Instant.now()); + return client.update(existingReply) .retryWhen(Retry.backoff(3, Duration.ofMillis(100)) - .filter(e -> e instanceof OptimisticLockingFailureException)); - }); + .filter(e -> e instanceof OptimisticLockingFailureException)) + .then(Mono.defer(() -> client.fetch(AiCommentReply.class, name) + .flatMap(latest -> { + latest.getSpec().setReplyName(existingReply.getMetadata().getName()); + latest.getSpec().setPublished(true); + return client.update(latest); + }) + .retryWhen(Retry.backoff(3, Duration.ofMillis(100)) + .filter(e -> e instanceof OptimisticLockingFailureException)) + )); + }) + .switchIfEmpty(Mono.defer(() -> + commentReplyPublisher.publishReply( + record.getSpec().getCommentId(), + record.getSpec().getReply(), + record.getSpec().getPostId(), + record.getSpec().getReplyTo(), + true, + record.getSpec().getPersonaName() + ) + .flatMap(publishedReply -> { + String newReplyName = publishedReply.getMetadata().getName(); + return client.fetch(AiCommentReply.class, name) + .flatMap(latest -> { + latest.getSpec().setReplyName(newReplyName); + latest.getSpec().setPublished(true); + return client.update(latest); + }) + .retryWhen(Retry.backoff(3, Duration.ofMillis(100)) + .filter(e -> e instanceof OptimisticLockingFailureException)); + }) + )); } else { // Reply extension already exists, set approved=true return client.fetch(Reply.class, replyName) @@ -860,21 +885,10 @@ public class CommentAiAutopilotEndpoint implements CustomEndpoint { } private Mono health(ServerRequest request) { - AiFoundationClient aiClient = aiFoundationClientProvider.getIfAvailable(); - boolean aiFoundationInstalled = aiClient != null; - - if (!aiFoundationInstalled) { - return ServerResponse.ok().bodyValue( - new HealthResponse(false, false, false, "", "unhealthy")); - } - - // AI Foundation is installed, check if it's enabled and model is available - return aiClient.chat("ping", null) - .map(response -> (HealthResponse) new HealthResponse(true, true, true, "default", "healthy")) - .onErrorResume(e -> { - log.debug("Health check: AI Foundation call failed: {}", e.getMessage()); - return Mono.just(new HealthResponse(true, true, false, "", "degraded")); - }) + // AiFoundationClient is always created; availability is checked at runtime + return aiFoundationClient.isAvailable() + .map(available -> (HealthResponse) new HealthResponse(available, available, available, "", available ? "healthy" : "degraded")) + .defaultIfEmpty(new HealthResponse(false, false, false, "", "unhealthy")) .flatMap(health -> ServerResponse.ok().bodyValue(health)); } diff --git a/src/main/java/top/nxxy335/commentaiautopilot/extension/AiCommentReply.java b/src/main/java/top/nxxy335/commentaiautopilot/extension/AiCommentReply.java index 428c220..d9cf6f2 100644 --- a/src/main/java/top/nxxy335/commentaiautopilot/extension/AiCommentReply.java +++ b/src/main/java/top/nxxy335/commentaiautopilot/extension/AiCommentReply.java @@ -60,7 +60,7 @@ public class AiCommentReply extends AbstractExtension { @Schema(description = "使用的AI角色名称") private String personaName; - @Schema(description = "关联的Reply扩展名称,草稿模式下为空") + @Schema(description = "已发布的回复名称") private String replyName; } } diff --git a/src/main/java/top/nxxy335/commentaiautopilot/extension/AiPersona.java b/src/main/java/top/nxxy335/commentaiautopilot/extension/AiPersona.java index 364d937..57fa9e7 100644 --- a/src/main/java/top/nxxy335/commentaiautopilot/extension/AiPersona.java +++ b/src/main/java/top/nxxy335/commentaiautopilot/extension/AiPersona.java @@ -38,7 +38,7 @@ public class AiPersona extends AbstractExtension { @JsonProperty("isDefault") private Boolean isDefault; - @Schema(description = "排序优先级,数值越小越靠前") + @Schema(description = "角色优先级,数值越小优先级越高") private Integer priority; } } diff --git a/src/main/java/top/nxxy335/commentaiautopilot/listener/ReplyReconciler.java b/src/main/java/top/nxxy335/commentaiautopilot/listener/ReplyReconciler.java index 793eb06..6d23e6e 100644 --- a/src/main/java/top/nxxy335/commentaiautopilot/listener/ReplyReconciler.java +++ b/src/main/java/top/nxxy335/commentaiautopilot/listener/ReplyReconciler.java @@ -72,6 +72,8 @@ public class ReplyReconciler implements Reconciler { String parentCommentName = reply.getSpec().getCommentName(); if (parentCommentName == null || parentCommentName.isBlank()) { + markProcessed(reply); + client.update(reply); return; } @@ -83,6 +85,8 @@ public class ReplyReconciler implements Reconciler { // No quoteReply - this is a direct reply to the top-level comment, // NOT a reply to AI. Skip it (CommentReconciler handles top-level comments). log.debug("[ReplyReconciler] Reply {} has no quoteReply, skipping (not a reply to AI)", name); + markProcessed(reply); + client.update(reply); return; } @@ -92,6 +96,8 @@ public class ReplyReconciler implements Reconciler { if (!isReplyToAi) { log.debug("[ReplyReconciler] Not a reply to AI, skipping: {}", name); + markProcessed(reply); + client.update(reply); return; } diff --git a/src/main/java/top/nxxy335/commentaiautopilot/service/AiFoundationClient.java b/src/main/java/top/nxxy335/commentaiautopilot/service/AiFoundationClient.java index 740097f..c349d1f 100644 --- a/src/main/java/top/nxxy335/commentaiautopilot/service/AiFoundationClient.java +++ b/src/main/java/top/nxxy335/commentaiautopilot/service/AiFoundationClient.java @@ -1,32 +1,43 @@ package top.nxxy335.commentaiautopilot.service; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; import run.halo.app.core.extension.Plugin; import run.halo.app.extension.ReactiveExtensionClient; -import run.halo.app.plugin.extensionpoint.ExtensionGetter; -import run.halo.aifoundation.AiModelService; -import run.halo.aifoundation.chat.LanguageModel; -import run.halo.aifoundation.chat.GenerateTextResult; + +import java.lang.reflect.Method; +import java.util.Map; /** - * AI Foundation client that calls the AI Foundation plugin's AiModelService. - * Only instantiated when AI Foundation classes are available (via @ConditionalOnClass). + * AI Foundation client that uses runtime class loading and reflection + * to call the AI Foundation plugin's AiModelService. + *

+ * This approach avoids classloader identity issues by loading AiModelService + * from ai-foundation's own classloader, so that Spring's getBeansOfType() + * can correctly match the implementation bean. + *

+ * No @ConditionalOnClass or pluginDependencies needed. + * Always registered as a bean; availability is checked at runtime. */ @Slf4j -@RequiredArgsConstructor +@Component public class AiFoundationClient { private static final String AI_FOUNDATION_PLUGIN_NAME = "ai-foundation"; + private static final String AI_MODEL_SERVICE_CLASS = "run.halo.aifoundation.AiModelService"; - private final ExtensionGetter extensionGetter; private final ReactiveExtensionClient client; + private final ApplicationContext applicationContext; + + public AiFoundationClient(ReactiveExtensionClient client, ApplicationContext applicationContext) { + this.client = client; + this.applicationContext = applicationContext; + } /** * Call AI Foundation to generate a chat response using the specified model. - * Checks at runtime whether the ai-foundation plugin is installed and enabled - * before attempting to use it. * * @param prompt the prompt text * @param modelName the AiModel metadata.name, null or blank to use default model @@ -44,8 +55,16 @@ public class AiFoundationClient { } /** - * Check if the ai-foundation plugin is installed and enabled at runtime. + * Check if AI Foundation is available: plugin installed, enabled, and AiModelService bean found. */ + public Mono isAvailable() { + return isAiFoundationEnabled() + .flatMap(enabled -> { + if (!enabled) return Mono.just(false); + return findAiModelService().hasElement(); + }); + } + private Mono isAiFoundationEnabled() { return client.fetch(Plugin.class, AI_FOUNDATION_PLUGIN_NAME) .map(plugin -> plugin.getSpec().getEnabled()) @@ -57,24 +76,144 @@ public class AiFoundationClient { } private Mono doChat(String prompt, String modelName) { - return extensionGetter.getEnabledExtension(AiModelService.class) - .flatMap(service -> { - Mono modelMono; - if (modelName != null && !modelName.isBlank()) { - modelMono = service.languageModel(modelName); - } else { - modelMono = service.languageModel(); - } - return modelMono.flatMap(model -> model.generateText(prompt) - .map(GenerateTextResult::getText) - .doOnNext(text -> log.debug("AI generated reply ({} chars) using model '{}'", - text.length(), modelName != null ? modelName : "default")) - ); - }) + return findAiModelService() + .flatMap(service -> invokeLanguageModel(service, modelName) + .flatMap(model -> invokeGenerateText(model, prompt)) + ) .doOnError(e -> log.error("AI Foundation call failed: {}", e.getMessage())) .onErrorResume(e -> { log.warn("AI Foundation not available: {}", e.getMessage()); return Mono.empty(); }); } + + /** + * Get PluginManager via the pluginWrapper bean registered in our plugin context. + * Halo's DefaultPluginApplicationContextFactory registers pluginWrapper as a singleton: + * beanFactory.registerSingleton("pluginWrapper", pluginWrapper); + * Then PluginWrapper.getPluginManager() gives us the PluginManager instance. + */ + private Object findPluginManager() { + try { + Object pluginWrapper = applicationContext.getBean("pluginWrapper"); + Method getPluginManagerMethod = pluginWrapper.getClass().getMethod("getPluginManager"); + getPluginManagerMethod.setAccessible(true); + Object pm = getPluginManagerMethod.invoke(pluginWrapper); + if (pm != null) { + log.info("Found PluginManager via pluginWrapper bean: {}", pm.getClass().getName()); + } + return pm; + } catch (NoSuchMethodException e) { + log.warn("pluginWrapper does not have getPluginManager() method: {}", e.getMessage()); + } catch (Exception e) { + log.warn("Failed to get PluginManager via pluginWrapper: {}", e.getMessage()); + } + log.warn("PluginManager not found"); + return null; + } + + /** + * Find the AiModelService bean from ai-foundation's PluginApplicationContext. + * Uses PluginManager.getPlugin() to get the plugin wrapper, then reflection + * to get the plugin's ApplicationContext. + */ + private Mono findAiModelService() { + return Mono.fromCallable(() -> { + Object pm = findPluginManager(); + if (pm == null) return null; + + // Call pm.getPlugin("ai-foundation") via reflection + Method getPluginMethod = pm.getClass().getMethod("getPlugin", String.class); + getPluginMethod.setAccessible(true); + Object pluginWrapper = getPluginMethod.invoke(pm, AI_FOUNDATION_PLUGIN_NAME); + if (pluginWrapper == null) { + log.debug("ai-foundation plugin not found in PluginManager"); + return null; + } + + // Call pluginWrapper.getPlugin() to get the plugin instance + Method getPluginInstanceMethod = pluginWrapper.getClass().getMethod("getPlugin"); + getPluginInstanceMethod.setAccessible(true); + Object pluginInstance = getPluginInstanceMethod.invoke(pluginWrapper); + if (pluginInstance == null) { + log.debug("ai-foundation plugin instance is null"); + return null; + } + + // Get the plugin's ApplicationContext via reflection on SpringPlugin + // DefaultSpringPlugin is package-private, so we need setAccessible + Method getCtxMethod = pluginInstance.getClass().getMethod("getApplicationContext"); + getCtxMethod.setAccessible(true); + ApplicationContext pluginAppContext = (ApplicationContext) getCtxMethod.invoke(pluginInstance); + + // Get the plugin classloader + Method getClassLoaderMethod = pluginWrapper.getClass().getMethod("getPluginClassLoader"); + getClassLoaderMethod.setAccessible(true); + ClassLoader pluginClassLoader = (ClassLoader) getClassLoaderMethod.invoke(pluginWrapper); + + // Load AiModelService from ai-foundation's classloader + Class aiModelServiceClass = pluginClassLoader.loadClass(AI_MODEL_SERVICE_CLASS); + + // Find the AiModelService bean in ai-foundation's ApplicationContext + Map beans = pluginAppContext.getBeansOfType(aiModelServiceClass); + if (beans.isEmpty()) { + log.debug("AiModelService bean not found in ai-foundation's ApplicationContext"); + return null; + } + + log.info("Found AiModelService bean in ai-foundation's ApplicationContext"); + Object result = beans.values().iterator().next(); + return (Object) result; + }).doOnError(e -> log.error("Failed to find AiModelService: {}", e.getMessage())); + } + + /** + * Call service.languageModel(modelName) or service.languageModel() via reflection. + * Returns Mono<LanguageModel> from ai-foundation's classloader. + */ + private Mono invokeLanguageModel(Object service, String modelName) { + return Mono.fromCallable(() -> { + Method method; + if (modelName != null && !modelName.isBlank()) { + method = service.getClass().getMethod("languageModel", String.class); + method.setAccessible(true); + return method.invoke(service, modelName); + } else { + method = service.getClass().getMethod("languageModel"); + method.setAccessible(true); + return method.invoke(service); + } + }).flatMap(result -> { + if (result instanceof Mono mono) return mono; + return Mono.justOrEmpty(result); + }); + } + + /** + * Call model.generateText(prompt) via reflection, then extract text from result. + * Returns the generated text string. + */ + private Mono invokeGenerateText(Object model, String prompt) { + return Mono.fromCallable(() -> { + Method method = model.getClass().getMethod("generateText", String.class); + method.setAccessible(true); + return method.invoke(model, prompt); + }).flatMap(result -> { + if (result instanceof Mono mono) { + return mono.map(this::extractText); + } + return Mono.justOrEmpty(extractText(result)); + }); + } + + private String extractText(Object result) { + if (result == null) return null; + try { + Method getText = result.getClass().getMethod("getText"); + getText.setAccessible(true); + return (String) getText.invoke(result); + } catch (Exception e) { + throw new RuntimeException("Failed to call getText() on GenerateTextResult: " + e.getMessage(), e); + } + } } diff --git a/src/main/java/top/nxxy335/commentaiautopilot/service/AiFoundationConfiguration.java b/src/main/java/top/nxxy335/commentaiautopilot/service/AiFoundationConfiguration.java deleted file mode 100644 index af05cfc..0000000 --- a/src/main/java/top/nxxy335/commentaiautopilot/service/AiFoundationConfiguration.java +++ /dev/null @@ -1,23 +0,0 @@ -package top.nxxy335.commentaiautopilot.service; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import run.halo.app.extension.ReactiveExtensionClient; -import run.halo.app.plugin.extensionpoint.ExtensionGetter; - -/** - * Configuration that registers AiFoundationClient only when - * AI Foundation plugin classes are available in the classloader. - * When AI Foundation is not installed, this entire configuration is skipped. - */ -@Configuration -@ConditionalOnClass(name = "run.halo.aifoundation.AiModelService") -public class AiFoundationConfiguration { - - @Bean - public AiFoundationClient aiFoundationClient(ExtensionGetter extensionGetter, - ReactiveExtensionClient client) { - return new AiFoundationClient(extensionGetter, client); - } -} diff --git a/src/main/java/top/nxxy335/commentaiautopilot/service/AiReplyService.java b/src/main/java/top/nxxy335/commentaiautopilot/service/AiReplyService.java index c3065f7..9111358 100644 --- a/src/main/java/top/nxxy335/commentaiautopilot/service/AiReplyService.java +++ b/src/main/java/top/nxxy335/commentaiautopilot/service/AiReplyService.java @@ -1,7 +1,6 @@ package top.nxxy335.commentaiautopilot.service; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; @@ -9,10 +8,10 @@ import reactor.core.publisher.Mono; @Slf4j public class AiReplyService { - private final ObjectProvider aiFoundationClientProvider; + private final AiFoundationClient aiFoundationClient; - public AiReplyService(ObjectProvider aiFoundationClientProvider) { - this.aiFoundationClientProvider = aiFoundationClientProvider; + public AiReplyService(AiFoundationClient aiFoundationClient) { + this.aiFoundationClient = aiFoundationClient; } /** @@ -22,12 +21,7 @@ public class AiReplyService { * @param modelName the model name (null for default) */ public Mono generateReply(String prompt, String modelName) { - AiFoundationClient client = aiFoundationClientProvider.getIfAvailable(); - if (client == null) { - log.warn("AI Foundation plugin is not installed, cannot generate reply"); - return Mono.empty(); - } - return client.chat(prompt, modelName) + return aiFoundationClient.chat(prompt, modelName) .doOnError(e -> log.error("AI reply generation failed: {}", e.getMessage())) .onErrorResume(e -> { log.warn("AI Foundation not available: {}", e.getMessage()); diff --git a/src/main/java/top/nxxy335/commentaiautopilot/service/PromptBuilder.java b/src/main/java/top/nxxy335/commentaiautopilot/service/PromptBuilder.java index 5adbfc7..1755cc3 100644 --- a/src/main/java/top/nxxy335/commentaiautopilot/service/PromptBuilder.java +++ b/src/main/java/top/nxxy335/commentaiautopilot/service/PromptBuilder.java @@ -39,18 +39,6 @@ public class PromptBuilder { private static final String PRESET_CONCISE = """ 【简洁型预设】你的回复应该非常简洁,一两句话即可。不要展开讨论,直接回应评论的核心内容。 -"""; - - private static final String PRESET_TECHNICAL = """ -【技术解答型预设】你的回复应该侧重于技术解答,提供准确的技术信息和解决方案。使用专业术语但要解释清楚,必要时提供代码示例或步骤说明。保持逻辑清晰,分点阐述。 -"""; - - private static final String PRESET_ENCOURAGING = """ -【鼓励型预设】你的回复应该充满鼓励和正能量,认可评论者的观点和想法。多用肯定性语言,表达对评论者思考的赞赏。即使评论有不足,也要以建设性的方式指出,给予信心和动力。 -"""; - - private static final String PRESET_EDUCATIONAL = """ -【知识科普型预设】你的回复应该以科普的方式展开,将复杂概念用通俗易懂的语言解释。适当引用相关知识点,帮助评论者拓宽视野。使用类比和举例让内容更易理解,但避免过于学术化。 """; private static final Map PRESET_MAP = new LinkedHashMap<>(); @@ -59,9 +47,6 @@ public class PromptBuilder { PRESET_MAP.put("professional", PRESET_PROFESSIONAL); PRESET_MAP.put("humorous", PRESET_HUMOROUS); PRESET_MAP.put("concise", PRESET_CONCISE); - PRESET_MAP.put("technical", PRESET_TECHNICAL); - PRESET_MAP.put("encouraging", PRESET_ENCOURAGING); - PRESET_MAP.put("educational", PRESET_EDUCATIONAL); } private static final String SAFETY_PROMPT = """ @@ -76,12 +61,7 @@ public class PromptBuilder { {{safety_prompt}} - 【语言要求】你必须使用与评论相同的语言回复。检测评论的语言特征: -- 如果评论包含中文字符(汉字),请用中文回复 -- 如果评论包含日文假名(平假名/片假名),请用日文回复 -- 如果评论包含韩文字符,请用韩文回复 -- 如果评论主要是拉丁字母,请根据其语言特征(如英语、法语、西班牙语等)用相同语言回复 -- 绝对不要用与评论不同的语言回复 + 【语言要求】请用评论所使用的语言回复。如果评论是英文,请用英文回复;如果是中文,请用中文回复;如果是日文,请用日文回复;以此类推。 请回复以下评论。注意: - 回复长度应与评论长度匹配,简短问候简短回复 diff --git a/src/main/java/top/nxxy335/commentaiautopilot/service/ReviewService.java b/src/main/java/top/nxxy335/commentaiautopilot/service/ReviewService.java index c9ec5ce..367dc72 100644 --- a/src/main/java/top/nxxy335/commentaiautopilot/service/ReviewService.java +++ b/src/main/java/top/nxxy335/commentaiautopilot/service/ReviewService.java @@ -1,7 +1,6 @@ package top.nxxy335.commentaiautopilot.service; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; @@ -9,10 +8,10 @@ import reactor.core.publisher.Mono; @Slf4j public class ReviewService { - private final ObjectProvider aiFoundationClientProvider; + private final AiFoundationClient aiFoundationClient; - public ReviewService(ObjectProvider aiFoundationClientProvider) { - this.aiFoundationClientProvider = aiFoundationClientProvider; + public ReviewService(AiFoundationClient aiFoundationClient) { + this.aiFoundationClient = aiFoundationClient; } private static final String REVIEW_PROMPT_TEMPLATE = """ @@ -37,18 +36,12 @@ public class ReviewService { public Mono review(String articleContent, String commentContent, String aiReply, String modelName) { - AiFoundationClient client = aiFoundationClientProvider.getIfAvailable(); - if (client == null) { - log.warn("AI Foundation plugin is not installed, skipping review (auto-pass)"); - return Mono.just(new ReviewResult(100, "PASS", "AI Foundation 未安装,自动通过")); - } - String reviewPrompt = String.format(REVIEW_PROMPT_TEMPLATE, truncate(articleContent, 2000), truncate(commentContent, 500), truncate(aiReply, 500)); - return client.chat(reviewPrompt, modelName) + return aiFoundationClient.chat(reviewPrompt, modelName) .map(this::parseSafetyResult) .defaultIfEmpty(new ReviewResult(100, "PASS", "审核无响应,自动通过")) .onErrorResume(e -> { diff --git a/src/main/java/top/nxxy335/commentaiautopilot/service/SentimentService.java b/src/main/java/top/nxxy335/commentaiautopilot/service/SentimentService.java index afc5b48..bf0b51b 100644 --- a/src/main/java/top/nxxy335/commentaiautopilot/service/SentimentService.java +++ b/src/main/java/top/nxxy335/commentaiautopilot/service/SentimentService.java @@ -1,7 +1,6 @@ package top.nxxy335.commentaiautopilot.service; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; @@ -9,10 +8,10 @@ import reactor.core.publisher.Mono; @Slf4j public class SentimentService { - private final ObjectProvider aiFoundationClientProvider; + private final AiFoundationClient aiFoundationClient; - public SentimentService(ObjectProvider aiFoundationClientProvider) { - this.aiFoundationClientProvider = aiFoundationClientProvider; + public SentimentService(AiFoundationClient aiFoundationClient) { + this.aiFoundationClient = aiFoundationClient; } public record SentimentResult(String sentiment, double confidence) { @@ -22,15 +21,9 @@ public class SentimentService { } public Mono analyzeSentiment(String commentContent, String modelName) { - AiFoundationClient client = aiFoundationClientProvider.getIfAvailable(); - if (client == null) { - log.warn("[Sentiment] AI Foundation plugin is not installed, defaulting to NEUTRAL"); - return Mono.just(new SentimentResult(SentimentResult.NEUTRAL, 0.0)); - } - String prompt = buildSentimentPrompt(commentContent); - return client.chat(prompt, modelName) + return aiFoundationClient.chat(prompt, modelName) .map(response -> { String sentiment = parseSentiment(response); return new SentimentResult(sentiment, 1.0); diff --git a/src/main/resources/plugin.yaml b/src/main/resources/plugin.yaml index 7074152..457a6ab 100644 --- a/src/main/resources/plugin.yaml +++ b/src/main/resources/plugin.yaml @@ -7,7 +7,7 @@ metadata: name: comment-ai-autopilot spec: enabled: true - requires: ">=2.23.0" + requires: ">=2.25.0" author: name: 暖心向阳335 website: https://nxxy335.top @@ -22,6 +22,4 @@ spec: url: "https://github.com/sunny-335/plugin-comment-ai-autopilot/blob/main/LICENSE" settingName: "comment-ai-autopilot-settings" configMapName: "comment-ai-autopilot-configmap" - version: "0.0.0-ygkszvd" - pluginDependencies: - ai-foundation: "*" + version: "1.0.0-beta.1" diff --git a/ui/src/views/HomeView.vue b/ui/src/views/HomeView.vue index b4b3399..5be0f66 100644 --- a/ui/src/views/HomeView.vue +++ b/ui/src/views/HomeView.vue @@ -177,6 +177,53 @@ + + +
+

近7日回复趋势

+
+ + + +
+
+
+
+
{{ day.count }}
+
+
{{ formatTrendDate(day.date) }}
+
+
+
+ 暂无数据 +
+
@@ -252,11 +299,16 @@