视频加载失败

Aemeath 主题博客后台要来啦

Aemeath 主题博客后台要来啦
24 分钟Aemeath / 小爱 / AI / 静态博客 / 友链 / GitHub Actions

Aemeath 主题博客后台要来啦

“给 Aemeath 做了一个小爱后台,把 AI 评论回复、评论审核、友链申请、状态管理和每日回链检查放到了一起,也终于理顺了静态博客修改与 GitHub Actions 部署之间的关系。”

4794 字
24 分钟
Aemeath 主题博客后台要来啦

Aemeath 主题的博客后台要来啦!

这段时间又给博客整了点新东西,把小爱从评论区里拎出来,给她安排了一个自己的后台。现在可以在同一个地方看评论、处理回复、调整审核规则、管理友链,再顺手检查一下大家有没有把我的友链偷偷下掉,嘿嘿。

功能还不算多,暂时没有发布文章和编辑文章的地方。毕竟我这个人喜欢整花活,文章里时不时就塞点动画、交互或者单独写的组件,传统 Markdown 编辑器还满足不了我,文章这部分就先继续留在代码里折腾。

这篇文章里的两种画面

主页封面是功能概念图,下面的 18 张截图来自目前后台的实际界面,其中评论审核的 3 张做了 AI 清晰化处理。已经能做什么、还有什么欠着,就按正文慢慢往下看叭。

先带大家看看目前已经做出来的部分叭。

先从登录界面开始#

这次后台走的是比较简约的路线:黑白配色、浅浅的点阵背景,再配上和小爱统一的字体。主要想让自己每天打开后台,就能处理完不合规的友链嘿嘿。

登录之后还有邮箱验证码确认。界面也沿用了同一套风格,没有跳到另一个画风里去。

小爱后台的登录界面
第一步 · 验证账号
通过邮箱验证码确认登录
第二步 · 邮箱确认

说起来,这套全是黑白黑白的界面,我还挺喜欢的。也许哪天又想折腾主题,就从这里长出一个新的版本了,哈哈。

AI 评论和回复#

第一个功能当然还是小爱的老本行:评论。

后台里有一个评论收件箱,可以按状态筛选,也能搜索具体留言。评论有没有处理、小爱有没有回复、还有哪些需要我自己看,放在一起就清楚很多,不用再到各篇文章下面翻来翻去了。

评论收件箱,集中查看留言和处理状态
评论收件箱,集中查看留言和处理状态

除了让小爱自己回复,我也可以在后台借助 AI 起草或者润色回复。比如脑子里大概知道想说什么,却一时组织不好句子,就让她先帮我整理一下,再由我检查、修改和发送。

有时候让 AI 帮我回一句,比我自己对着输入框发呆半天还顺畅,嘿嘿。不过遇到需要解释的事情,最后说什么还是得自己看一遍。

展开评论时还能查看上文和已有回复,编辑区有表情、快捷模板和发送前预览。AI 生成与润色都只会更新草稿,等我点击“发布回复”才真的发出去。如果在 AI 处理的过程中我又自己打了字,返回结果也会保留我的输入,避免突然把正在写的内容顶掉。

展开评论后,可以手动编辑并使用 AI 辅助回复
展开评论后,可以手动编辑并使用 AI 辅助回复

手写了一半,也可以先留着

手动回复的草稿会保存在当前浏览器,重新打开对应评论可以恢复;发送成功后才清掉。这里说的是评论回复草稿,友链那边的暂存和统一提交规则,后面会单独讲。

小爱也得有自己的作息#

自动回复的策略也能在后台调。比如只在友链页、留言板工作,忽略特定关键词,或者只回复楼主的首条评论,免得她在一层楼里跟大家聊个没完。

“运行与设置”里目前可以调整这些:

设置可以控制什么
模型与生成参数选择允许的模型,调整思考模式和温度。
回复范围默认只回复顶层评论,也可以切换到更大的回复范围。
页面与关键词设置允许路径、屏蔽路径,以及命中后跳过的关键词。
安静时段设置每天暂缓自动回复的时间,支持跨午夜。
每日上限限制自动回复数量,手动回复不占这部分额度。

下面还有运行状态、当天用量和操作记录。哪次成功了,哪次失败了,哪条是因为规则跳过,都有地方查。比起只知道“小爱怎么又不说话了”,现在至少能顺着记录找原因。

评论发布前先过一遍审核#

第二个功能是 AI 评论审核。

这部分和自动回复有各自的开关。小爱要不要参与聊天是一回事,评论提交时要不要检查,则是另一项设置。审核会结合昵称、评论正文和网站链接,检查辱骂骚扰、垃圾广告、隐私泄露等内容。

具体检查哪些类别、达到什么阈值拦截,都可以在后台调整。我不希望正常交流和合理批评也被挡住,所以还单独留了一个测试页面,修改规则后可以先试试效果。

目前这组截图用的是 Jev。让我比较满意的是速度:这次测试显示耗时 238 ms,也就是大约零点二秒。当然,这是这一次请求的结果,实际耗时还是会受接口和网络影响。

测试页会把判断结果、各项概率,以及访客最终看到的提示一起展示出来,比较容易看出哪里需要继续调。

评论审核的接口与模型设置

友链管理终于接进来了#

第三个功能,也是这次折腾得最久的部分:AI 友链申请和管理。

这里先感谢一下雪的这篇《静态博客后台-开源啦!》。他介绍的 AIOVTUE-CMS-gen 基于 Pages CMS,通过 GitHub 仓库管理静态站点内容。我看到之后,突然就想通了:小爱这边也可以沿用直接修改仓库的思路呀。

先把同步这件事理顺#

其实友链后台之前就做过一版。最早直接改服务器上的资料,前台几乎马上就能变化,看起来挺爽,但后面的同步问题也跟着来了。

服务器有一份状态,仓库里又有一份配置;一旦后台改完,GitHub Actions 又拿仓库里的旧内容构建部署,就容易把刚改的东西盖回去。为了让两边对得上,还要额外处理数据回写和版本核对,越折腾越绕。

现在的流程清楚多了:后台修改友链资料,先暂存,确认后统一提交到 GitHub,再由 Actions 构建和部署。 本地改代码也沿用同一个仓库,不用再把服务器上的友链配置单独搬回去。

把这条流程展开,大概就是这样:

评论里的友链申请
→ 小爱提取资料、核验站点并给出初审
→ 我同意添加,或手动新增、编辑已有友链
→ 在当前浏览器暂存这一批改动
→ 核对后统一更新仓库的 friendsConfig
→ GitHub Actions 构建,传输变化的文件
→ 服务器校验完整内容,再发布新版本

之前部署慢,还有一个原因是每次上传的东西太多。现在仍然会构建站点,但传输前会比对文件内容,只上传发生变化的部分;服务器复用没变的文件,校验完整后再切换到新版本。省下来的主要是重复上传静态资源的时间。

至于我刚好卡在定时 Actions 运行的时候修改怎么办,提交时会核对友链文件版本1,构建期间也会检查源代码有没有继续更新。发生冲突就先刷新核对,旧构建遇到新的源代码改动也会停止发布,交给后续构建处理。这样至少不用让两份配置互相猜了。

后台所在的服务器仍然会保存评论、审核证据和检查记录,而已经确认发布的友链配置统一进仓库。两边各自负责什么,终于清楚了一点。

AI 负责初审,我负责决定#

访客申请友链时,大家写资料的格式其实不太一样。有人写“名称、链接、图标”,有人写“站点名称、站点地址、头像”,还有人直接贴 Markdown 链接。让所有人严格照着同一份模板填,多少有点麻烦。

所以小爱会先识别留言,把能提取到的资料整理出来。必填的是名称、网址、描述和头像;主页图没有提供,就用默认图,RSS 没有就不添加。标签也可以根据站点介绍和能读取到的内容分析,拿不准时先用“个人博客”,后面我自己再改。

友链申请与小爱在评论区给出的初审分析
友链申请与小爱在评论区给出的初审分析

初审会结合实际能获取到的站点信息,检查 HTTPS、访问情况、头像和回链,并参考网页正文判断内容是否大体符合本站的收录要求。原创、持续更新、内容积极向上,都是我比较在意的;好看的二次元风格当然还有加分,嘿嘿。

能确认的内容会写进分析,遇到反爬、动态加载或者暂时打不开的页面,就留给我继续核对。目前也不能指望它把对方所有页面都翻一遍,判断出每个角落有没有问题。

待处理申请会一行展示三张卡片,外面直接放“同意”“拒绝”和“查看审核”,不用每条都点进去操作。

申请卡片上的快捷操作与审核状态
申请卡片上的快捷操作与审核状态

点进详情,可以看到原始留言、标准资料、回链证据、AI 初审分析,以及按规则估算的通过率和处理时间。已经收录的申请也会保留原来的分析,方便以后回头看。

这里必须再说一次:

最后拍板的还是站长

AI 仅提供初审和建议,是否添加与具体时间最终由站长决定。

比如它没有找到对方回链,初审没通过,我依然可以人工确认添加;反过来,AI 觉得很合适,我也可以拒绝。处理时间也是预测,到了晚上会提醒大概要等到明天,不能当成我已经答应几点上线哈。

审核详情里查看分析、原始留言并校对站点资料
审核详情里查看分析、原始留言并校对站点资料

这个通过率,到底怎么算出来的#

翻到源码里的 friend_assessment,这里其实有一套明确的规则。基础项总共 80 分:

检查项权重
HTTPS10
站点可正常访问10
内容符合要求20
原创内容15
持续更新10
找到本站回链15

单项确认符合就拿到对应权重,确认不符合是 0 分,无法判断则暂取一半。基础分取整后,再考虑二次元风格的额外加分,最终分数封顶 100:

S=min⁡(100,  round⁡(∑i=16wixi)+B),xi∈{0,12,1}S = \min\left(100,\; \operatorname{round}\left(\sum_{i=1}^{6} w_i x_i\right) + B\right), \qquad x_i \in \left\{0,\frac{1}{2},1\right\}

这里的 wiw_i 就是表里的权重,xix_i 是每项对应的确认程度,BB 是二次元加分。加这 20 分需要同时满足两个条件:AI 判断符合相应风格,并且实际抓取的页面里确实有相关线索。当前主要依据正文和页面标记,视觉审美这部分,我自己还得再看。

普通情况下,展示的“预计通过率”是分数加 5,再封顶到 95%。必填资料不全时会压到最高 30%,明确发现内容问题时最高 5%;遇到核验故障则不显示通过率。2

看建议就好,别拿它当录取通知书

这是一套按本站规则生成的估计值,没有经过统计校准。哪怕页面写着 95%,也不能代表我已经同意添加。

已收录友链也能直接管理#

后台把友链审核分成了三个子页面:待处理申请、已收录友链和 GitHub 仓库设置。连接仓库与最近发布放到一起,平时处理申请、维护资料,就不用一直看着配置区域了。

已收录页面保留头像、标签、推荐状态,还能查看主页图,支持搜索和筛选。新增、编辑、删除友链,也都在这里处理。

已收录友链的卡片列表与筛选工具
已收录友链的卡片列表与筛选工具

排序要有一点苹果桌面的感觉#

顺序这件事,我还专门折腾了一下。

点击“调整顺序”之后,卡片会像苹果手机编辑桌面布局那样,开始轻轻晃动。拖住右上角的点阵就能移动,旁边的卡片会跟着让出位置。比起自己去配置文件里找权重,再一条条改数字,这样直观很多。

进入排序模式后拖动卡片调整位置
进入排序模式后拖动卡片调整位置

推荐友链则继续沿用金色效果,前台卡片和评论区身份也能对应起来。这个布林布林的待遇,还是得保留的。

正常、失联和违规,分开处理#

卡片外面就能快捷调整展示状态和推荐状态,不用为了改一个选项再打开整个编辑表单。

卡片底部的展示状态菜单与金色推荐开关
卡片底部的展示状态菜单与金色推荐开关

现在友链有三种展示状态:

状态前台效果
正常展示正常显示卡片,可以点击访问。
短暂失联显示站点名称和失联遮罩,提供 30 天倒计时,期间不能点击跳转。
违规整改显示违规遮罩,提供 7 天整改倒计时,期间不能点击跳转。

倒计时会显示到天、时、分、秒;到期之后,提示会变成“将于3日内清除”,后续再由我处理。临时打不开的站点也有缓冲期,不用刚发现访问异常就直接删掉。

短暂失联遮罩,保留站点名称和整改倒计时
短暂失联遮罩,保留站点名称和整改倒计时
违规友链到期后显示“将于3日内清除”
违规友链到期后显示“将于3日内清除”

这两个遮罩我还挺喜欢的。状态说明白了,样式也没有把整张友链卡片弄得太突兀。

改完一批,再一起提交#

还有一个对我自己比较实用的细节:改一次,不会马上提交一次。

“改一个选项就提交一次”这件事,已经被我从使用流程里划掉了。

我可能一口气调整几条友链的推荐状态,再改两个标签,顺手排一下顺序。这些都会先暂存在当前友链审核页,顶部的“待提交改动”按钮会一直显示数量,三个子页面之间切换也能看到。

点开之后,可以核对具体改了什么,不想要的改动还能撤销。确认这一批都没问题,再按“保存并提交”,合并成一次仓库修改。离开友链审核、切到其他后台主页面时,暂存内容会清除,所以要提交的记得先保存哈。

提交前集中核对暂存改动,也可以逐项撤销
提交前集中核对暂存改动,也可以逐项撤销

提交之后,“最近发布”里还能看到具体的变更记录:新增了哪个站点,哪个字段从什么改成了什么,以及当前部署到了哪一步。

以前可能觉得这种记录没什么用,真遇到“我刚刚到底改了哪条”的时候,它就很有用了,哈哈。

最近发布中记录站点资料的修改前后内容
最近发布中记录站点资料的修改前后内容

每天检查一次回链#

最后一个功能是独立的回链检查页。

有些站点会悄悄把我的友链下掉,也不通知一下。我觉得这件事挺没礼貌的。如果确认是故意撤掉,而且一直不处理,我这边也会移除,不再交换。大家互相留一句话,总比让我后来自己发现好嘛。

所以现在可以设置每天检查一次。检查规则也比较宽松:在能读取到的页面里找到 rainzt.cn 就可以,不要求必须带 http 或 https。 如果自动找到的页面不合适,我也可以手动指定对方的友链页,再检查一次。

独立展示各个站点的回链检查结果
独立展示各个站点的回链检查结果

当然,有的站点开了反爬,有的友链是动态渲染的,也有的是临时网络异常,自动检测仍然会有无法确认的情况。后台会把结果列出来,剩下的我自己点进去看。访问异常也是先核实,再决定要不要设置短暂失联遮罩。

毕竟友链是和人交换的,一次请求没拿到结果,总得再看看。

以后还想继续加点什么#

以上就是目前 Aemeath 的小爱后台啦。

评论、初审、友链资料、展示状态、改动记录和回链检查,终于可以放在一个地方处理了。还有不少细节能继续打磨,文章编辑器也先欠着,等我想好怎么容纳那些花活再说,嘿嘿。

给自己留一份待办,免得下次又开新坑:

  • 把评论收件箱、人工回复与 AI 辅助回复接到一起。
  • 给评论审核留出独立设置和测试入口。
  • 友链申请初审、人工确认、批量暂存和仓库提交。
  • 推荐、排序、状态遮罩和每日回链检查。
  • 把后台和博客整理成可以开源的版本。
  • 再研究适合这些交互文章的编辑方式。

至于会不会顺手再做一个黑白主题:已经有点心动了,等我先把眼前的坑填完。

后续我打算把这套后台和博客一起整理开源。理想中的样子,还是让 AI 能多承担一点日常维护:整理资料、发现问题、给出建议,把需要我判断的事情清楚地摆出来。

慢慢来,先让小爱把眼前这些活儿干好。

Footnotes#

  1. 后台用 GitHub Contents API 返回的文件 SHA 核对正在编辑的版本;提交前文件已经变化,就要求刷新核对。部署时另外比对静态文件的 SHA-256 摘要,决定哪些文件需要传输。这两处校验各自解决不同的问题。 ↩

  2. 分数、加分和展示概率来自当前源码的 friend_assessment;它是站点规则的辅助表达。未来调整权重后,以后台实际显示的规则结果为准。 ↩

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Aemeath 主题博客后台要来啦
https://rainzt.cn/posts/aemeath-xiaoai-admin/
作者
Rain
发布于
2026-10-30
许可协议
CC BY-NC-SA 4.0

评论区

跳到正文
朝朝听雨
主题

站点主题

字体样式

‹ 返回
本文使用 AI 辅助创作,请注意甄别。
本文目录

文章目录

欢迎来到朝朝听雨

很高兴在这里遇见你。