Hexo 安知鱼主题开启挂接自定义AI摘要

Hexo 安知鱼主题开启挂接自定义AI摘要
Moshine这是一篇教学文章,目的是替代只能使用原主题中内置的洪墨 AI 的摘要功能,由于种种原因,有些朋友可能已有使用较为顺手的 AI 工具;通过本教程,可以使用 OpenAI 和 DeepSeek 等多种 AI 低价甚至免费的实现 AI 摘要功能。
效果图

工作原理
本教程实现原理是,通过第三方插件 hexo-ai-summary-liushen 进行摘要的生成控制,然后写入文章的 Front-matter 中,再通过主题自带的 AI 摘要功能将其渲染。
hexo-ai-summary-liushen 插件基于 hexo-ai-excerpt 插件开发而来,原插件已经归档,于是 清羽飞扬 复刻了新的,进行了重构。
[!caution]
请注意,当改动任何配置文件前请务必进行备份操作,这是一种保障也是一个良好的运维习惯。
实现过程
前置条件
- 需主题版本大于 1.1.6 版本;
- 执行以下命令安装插件和依赖:
1
npm install hexo-ai-summary-liushen --save
1
npm install axios p-limit node-fetch --save
开启主题自带 AI 摘要功能
完成前置条件后,在安知鱼主题的配置文件 _config.yml 中找到 post_head_ai_description 字段(这里要注意,是安知鱼主题的配置文件,不是 hexo 的配置文件!)。将其修改为如下内容:
1 | # 文章顶部ai摘要 |
这里的内容多为占位内容,除了 enable 和 mode 选项,其他没有任何控制效果,都是为了占位,所以无需担心,可以先按照我的写,后面再根据效果修改。
将 enable 和 mode 改为 enable: true 和 mode: local 即可。这里的意思是,开启主题自带的文章顶部 AI 摘要,模式选择为本地摘要。
[!caution]
由于后续操作会将你文章的所有 description 和 keywords 进行 AI 重写。当你执行至本步骤时,请你务必保存所有文件,并进行全文件夹备份(包括所有文章)。
配置插件
备份完成后,在博客根目录 Hexo 的配置文件 _config.yml 中任何位置添加如下新键值(此时是 Hexo 的配置文件,不是安知鱼主题的配置文件!这二者非常相似。):
1 | # hexo-ai-summary-liushen |
下面是配置的说明:
cover_all:覆盖性重新生成所有摘要,非必要不要打开,可能会导致过量的 API 消耗。
logger:为了更加精细的实现控制,清羽飞扬设置了三个日志等级,如下划分:
- 0:仅仅显示错误信息,不会显示包括生成文章摘要在内的任何输出
- 1:当生成新文章摘要时,会输出对于文本的处理,比如超长自动裁剪,生成成功或者生成失败。
- 2:调试使用,会输出包括跳过所有页面信息,仅仅处理文章部分。
api:任何 OpenAI 类型接口,包括 deepseek,讯飞星火,腾讯混元,ChatGPT 等。
ChatGPT 接口:
https://api.openai.com/v1/chat/completions;DeepSeek 接口:
https://api.deepseek.com/chat/completions;其余请查询具体官方文档。
[!info]
智谱 AI 的 GLM-4-Flash 模型是免费模型,如果想白嫖可以使用这个模型;智谱 AI 的 API接口:https://open.bigmodel.cn/api/paas/v4/chat/ completions
token:API 对应的接口密钥。
model:使用的模型名称,请检查对应接口文档说明,不同接口包含的模型不一致。
- ChatGPT模型建议:gpt-3.5-turbo
- DeepSeek 模型建议:deepseek-chat
- 其余请查询具体官方文档。
prompt:提示词,请自行定制,建议详细一些,但是不要太废话,以清羽飞扬写的为例。
ignoreRules:忽略文本正则接口,由于本插件直接获取 Markdown 文本,内置了一些处理,但是你仍然可以进行额外的处理,下面是内置的文本处理规则,如果有兴趣进行修改可以进行参考:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// 2. 清理内容
content = content
.replace(/```[\s\S]*?```/g, '') // 代码块
// .replace(/`[^`\n]+`/g, '') // 行内代码
.replace(/{%[^%]*%}/g, '') // Hexo 标签
.replace(/^\|.*?\|.*$/gm, '') // 表格行
.replace(/!\[.*?\]\(.*?\)/g, '') // 图片
.replace(/\[(.*?)\]\(.*?\)/g, '$1') // 超链接文本
.replace(/<[^>]+>/g, '') // HTML 标签
.replace(/ /g, ' ') // 空格实体
.replace(/\n{2,}/g, '\n') // 多重换行压缩
.replace(/^\s+|\s+$/gm, '') // 行首尾空格
.replace(/[ \t]+/g, ' ') // 多空格压缩
.trim();
// 3. 拼接标题
const combined = (title ? title.trim() + '\n\n' : '') + content;max_input_token:限制模型输入的最大字数,用字符串的 slice 进行截断,如果超出模型接受范围,可能会造成下文覆盖上文导致prompt丢失,内容混乱,所以请按照模型承受能力进行灵活配置。
concurrency:很多模型会限制并发,所以这里清羽飞扬利用 p-limit 插件实现了并发限制,降低失败请求的概率,经过调查,p-limit应该是hexo内已经有的一些包,所以也不需要担心需要重新安装之类的,直接使用即可。
[!tip]
由于利用了 hexo 自带的钩子,所以,摘要数据可能会被缓存,如果直接执行 hexo server,并没有任何效果,请尝试先执行hexo cl清理缓存,hexo cl 不会删除任何已经生成了的摘要内容。
验证内容和例外文章
如果一切正常,此时执行 Hexo 三连 hexo cl && hexo g && hexo s 后就可以在每篇文章的顶部看到对应的摘要文字。
[!caution]
这里再次提醒:由于后续操作会将你文章的所有 description 和 keywords 进行 AI 重写。当你执行至本步骤时,请你务必保存所有文件,并进行全文件夹备份(包括所有文章)。
如果存在例外文章,不想让其显示 AI 摘要,可以在文章的 Front-matter 中添加 is_summary: false 进行排除,此时该文章将不显示 AI 摘要。










