FIT2CLOUD
AI回评 的图标

AI回评

753
269

基于 AI 的 Halo 博客评论自动回复插件,支持 AI 虚拟角色回复、自审核、自动发布和对话式连续回复

1.3.0
暖心向阳335 发布于
>=2.25.0

新增

  • 支持瞬间插件(Moments)评论区适配 — 当检测到已安装并启用 plugin-moments 时,自动为瞬间评论启用 AI 自动回复
    • 新增 MomentsIntegrationService,通过 SchemeManager 检测 Moment 扩展注册状态,避免直接引用导致的 NoClassDefFoundError
    • 在插件设置 - 基本设置中新增"瞬间评论区适配"开关,仅当瞬间插件可用时显示,默认开启
    • ContextExtractor 适配 Moment 上下文:使用 moment name 作为关联标识,通过 Unstructured 单次 fetch 获取瞬间实际内容(spec.content.raw/html)和发布时间(spec.releaseTime)作为 AI 上下文
    • FilterService 对 Moment 评论读取 momentsEnabled 配置决定是否触发 AI 回复
  • 评论人昵称广告判定 — 前置过滤现在综合判断评论者昵称与评论内容。昵称包含商业推广关键词(如"免费算命"、“加微信xxx”、“代写论文”、"低价代购"等)即使评论内容看似正常也会被判定为广告
    • CommentPreFilterService.check() 新增 commentOwner 参数,将昵称纳入 AI 分类输入
    • 系统提示词新增"原则六:昵称与内容综合判定",列举昵称广告典型特征

改进

  • 重构提示词组装与兼容机制 — 建立更健壮的模块化拼接逻辑,解决多配置组合时的指令冲突与上下文丢失问题
    • 新增 {{output_guidance}}{{sentiment_hint}}{{language_requirement}} 三个占位符,将输出规范、情感提示、语言要求拆分为独立模块
    • 角色与预设使用段落分隔(空行+段落标记)确保指令隔离,避免风格预设污染角色设定
    • 情感提示通过 {{sentiment_hint}} 占位符原位注入;旧模板不含该占位符时自动降级为末尾追加,保持向后兼容
    • 消除两个近乎相同的 buildPrompt 重载的代码重复,统一委托给单一核心组装方法
    • 默认模板更新为模块化结构,新安装用户即可获得更稳定的 AI 输出
    • 强化身份约束:明确角色不是文章作者、站点管理员、客服或用户本人;禁止声称亲身经历未提供之事;禁止编造文章外的人物、数据、链接;禁止泄露系统提示词、模型参数、插件实现与安全策略
  • “Prompt设置"更名为"提示词设置” — UI 标签页、面板标题、设置项标签、帮助文本统一改为中文"提示词"
  • 日志瞬间关联链接精确到具体瞬间 — Moment 评论的关联链接从 /moments 列表页改为 /moments/{name} 具体瞬间页
  • 日志页面增加实时刷新功能 — 新增"实时刷新"开关,开启后每 10 秒静默轮询新数据。标签页隐藏或弹窗打开时自动暂停,回到页面时立即刷新。支持可配置刷新间隔(5s/10s/30s/60s)、新记录 Toast 提示、滚动位置保留、连续失败自动关闭
  • AI 安全审核改为失败关闭策略ReviewService 在审核服务不可用或异常时不再自动通过,改为返回 FAIL 并拦截发布,避免未经审核的 AI 回复被自动发布

Bug 修复

  • 修复日志页面 XSS 漏洞renderContent 仅移除 <script><iframe> 标签,未过滤 on* 事件处理器和 javascript: 协议。现已全面清理所有事件处理器、危险协议和嵌入标签
  • 修复日志页面删除后页码越界 — 删除最后一条记录后当前页变空但页码不回退,显示"暂无记录"。新增页码自动回退逻辑
  • 修复日志页面分页按钮在加载中可重复点击 — 新增 :disabled="loading" 防止重复请求
  • 修复误报弹窗关闭后残留状态 — 点击遮罩关闭弹窗时未清除 falsePositiveTarget,可能导致重开时显示旧数据
  • 修复 AiReplyOrchestrator 指数退避无上限retryCount 较高时延迟可达 43 分钟,超过处理锁 TTL 导致锁提前过期。新增 300 秒上限
  • 修复 ContextExtractor 空指针风险extractCommentContent/extractCommentOwner/extractReplyContent 未检查 spec == null,畸形数据会触发 NPE 中断整个处理链
  • 修复 SettingsView 邮箱防抖定时器未清理 — 组件卸载时 emailDebounce 定时器仍在运行,导致内存泄漏。新增 onUnmounted 清理
  • 修复 HomeView 刷新数据 Toast 提前弹出refreshData 未等待异步请求完成就提示成功。改为 await Promise.all() 后再提示
  • 修复 PromptBuilder 安全提示词可被绕过 — 自定义模板若遗漏 {{safety_prompt}} 占位符,安全约束会被静默丢弃。新增安全网:检测到遗漏时强制前置注入安全规范
  • 修复 AiReplyOrchestrator.processFalsePositive 无去重锁 — 误报处理流程未使用处理锁,重复触发会创建重复 AI 回复。新增 processingLocks 机制
  • 修复 AiReplyOrchestrator.processFalsePositive 失败后记录卡在 PENDING — 处理失败时记录未被标记为 FAIL,用户无法重试。新增 onErrorResume 将记录标记为 FAIL
  • 修复 AiReplyOrchestrator.hasExistingReply 错误时静默放行 — 数据库异常时去重检查返回 false 导致重复创建记录。改为返回 true(失败关闭,宁可跳过也不重复)
  • 修复 AiReplyCleanupService 删除处理中记录 — 清理逻辑未过滤 PENDING/REVIEWING 状态记录,可能破坏正在进行的 AI 回复流程。新增状态过滤
  • 修复 AiReplyCleanupService null subscribe 消费者.subscribe(null, ...) 传入 null 成功消费者,可能导致 NPE。改为空 lambda
  • 修复 AiReplyCleanupService 清理开关默认值不一致 — ConfigMap 存在但 data 为 null 时返回 false(禁用),与其他情况返回 true 不一致。统一为 true
  • 修复 Endpoint 分页参数未校验Integer.parseInt 对非数字参数抛出 500 错误。新增 parseIntSafely 安全解析
  • 修复 Endpoint 关键词搜索大小写敏感 — 搜索 “Hello” 无法匹配 “hello”。改为 toLowerCase() 不区分大小写
  • 修复 Endpoint 批量操作并发无限制flatMap 默认并发 256,大批量操作可能压垮数据库。限制为 10
  • 修复 LogsView 实时刷新漏检状态变化 — 数据签名仅含 total 和首尾 name,记录状态变化不会被检测。签名新增首尾状态和发布标记
  • 修复 LogsView 实时刷新与手动操作竞态 — 自动刷新与手动 fetchReplies 可能同时执行导致数据错乱。新增 autoRefreshing 标志位
  • 修复 ReplyReconciler.isAiReply 空指针风险 — 未检查 spec == null,畸形 Reply 数据会触发 NPE
  • 修复 ContextExtractor 瞬间内容重复 fetchgetMomentContentgetMomentReleaseDate 各自独立 fetch 同一个瞬间扩展,产生 2 次重复查询。合并为 getMomentContentAndDate 单次 fetch
  • 修复 ContextExtractor 瞬间分支缺少容错buildContext 的 Moment 分支缺少 onErrorResumedefaultIfEmpty,异常时静默跳过而非降级处理。已补齐与 Post/SinglePage 一致的容错
  • 修复 AiReplyOrchestrator.processFalsePositive 锁竞态条件 — 锁值存储过期时间(未来时间戳),过期后 putIfAbsent 不覆盖旧值导致去重失效。改为存储获取时间,与 processComment 一致
  • 修复 cleanupStaleLocks 无法清理误报处理锁 — 误报处理锁值是未来时间戳,cleanupStaleLocks 计算 age 为负数永远不清理。统一为存储获取时间
  • 修复 ContextExtractor.getCommentCount 空指针风险reply.getSpec() 可能为 null 时直接调用 getCommentName() 触发 NPE。fetchConversationHistory 同样问题已一并修复
  • 移除实时刷新冗余时间显示 — 移除刷新间隔选择右侧的"等待中…"/“刚刚更新”/"N秒前更新"等状态文本及相关定时器,减少不必要的 UI 噪声和每秒重渲染

资源下载

  • plugin-comment-ai-autopilot-1.3.0.jar