DeepSeek评论与摘要插件
本文最后更新于 2025年4月21日 早上
开头有一段踩坑记录,直接看使用方法,忽略前面的踩坑记录。
Motivation
根据经典的拖延心理:当想要逃避某件事时,就会想要去做除了这件事的其他任何事。
比如不想学习的时候,会莫名其妙地打扫房间和整理桌面
因为抗拒科研和逃避科研,我对博客建设的兴趣陡然上升,最近github上的trending repo中有一个Anduin2017/HowToCook: 程序员在家做饭方法指南,觉得很有意思,然后去看了作者的博客,发现作者的文章评论区都会有一个DeepSeek或者ChatGPT生成的总结性评论,于是想要给自己也加一个。
正好,目前的摘要仅仅是简单截取开头,很不美观,生成的总结还可以拿来当摘要。
实现过程
根据软件工程的“沟通、策划、建模、构建、部署”,产生idea的时候应该就完成了沟通,所以要策划整体实现的流程。
我只是一个项目经验仅限于苍穹外卖和黑马点评的rookie,所以让DeepSeek、ChatGPT、Grok3合作给我策划流程,最终定下的整体流程为:
graph TD
A[本地Hexo写作] --> B{hexo g -d}
B --> C[服务器Git仓库]
C --> D[触发post-receive钩子]
D --> E[运行generate-comments.js]
E --> F[调用DeepSeek API生成总结]
F --> G[通过Netlify Functions更新Twikoo评论]
F --> H[更新文章excerpt]
C --> I[定时同步到GitHub Pages]
不过写到generate-comments.js
时,发现部署到服务端有点多余,跑一次就够了,不用设置定时任务。
干脆放在博客目录下,每次hexo命令都会执行一次,不过我最终选择单独运行,反正都是遍历_post
做修改。
所以实际的开发流程是:
- 编写云函数post-comment
- 编写generate-comments.js
- 本地运行generate-comments.js
花了3个晚上+一个白天才正确地搞定。。在前期设计和具体实现上都有很多问题。
编写云函数
其实此举纯属多余,twikoo需要云函数是因为前端不能直接向数据库发送数据,得用云函数当后端。
但是我这里是本地运行,已经脱离前端了,完全可以直接通过MongoDBClient向数据库插入数据
但还是写一下,毕竟已经做了(lll¬ω¬)
模仿twikoo打包json的方式,写一个更弱的post即可,twikoo提交评论的代码在/src/server/function/twikoo/index.js/commentSubmit
。
为了避免MONGODB_URL泄露,在Netlify的环境变量中添加连接字符串,而不直接写在js中。
在本地写好代码之后,按照twikoo部署的方法,将函数上传到github仓库,在Netlify中Deploy with GitHub完成部署。
我的云函数是发送post请求,请求体就是评论内容和其他的信息,函数负责将内容插入数据库。
编写generate-comments.js
其实就是个几百行小代码,类似于hexo插件了。
代码见github,有充分的注释和运行日志输出(Copilot写的)
大体流程就是:
- 遍历
_post
文件夹下的md文件,读取文件名、matter里的日期、文章内容 - URL编码,拼接成URL,连接数据库,搜索该URL下是否存在AI评论,有就跳过
- 调DeepSeek的API,发个post,带上prompt跟文章内容,请求头里带上API_KEY,获取AI评论
- 重新拼出URL,构造json,发给云函数(去掉云函数后就是插入数据库)
- 将AI评论插入.md的matter里面,作为excerpt,就可作为摘要显示
代码中拼了两次URL,是为了日志打印方便
代码中多次建立、断开数据库连接,开销较大,可以优化优化(lll¬ω¬)
使用方法
将
generate-comments.js
放在博客目录的/script
下在博客根目录下创建.env文件:包含
MONGODB_URI=你的MongoDB连接串
+DEEPSEEK_API_KEY=你的API密钥
在博客根目录的
package.json
的dependencies
下增加:1
2
3
4"axios": "^1.6.0",
"dotenv": "^16.5.0",
"gray-matter": "^4.0.3",
"mongodb": "^6.0.0"在博客根目录下打开终端(git bash之类的),运行
npm install
下载依赖确保安装了dotenv包:
npm install dotenv
hexo g
即可运行插件
获取MongoDB连接串的方式见:MongoDB Atlas | Twikoo 文档
获取DEEPSEEK_API_KEY的方式见:DeepSeek 开放平台(当然是要钱的,不过挺便宜,我一轮下来只花了4毛钱)
在代码开头有配置项: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23// 配置项
const config = {
deepseek: {
botName: 'DeepSeek',
botUid: 'deepseek-bot',
botLink: 'https://www.deepseek.com/',
botUa: 'DeepSeek Bot/1.0'
},
mongodb: {
uri: process.env.MONGODB_URI,
dbName: 'test',
collection: 'comment'
},
hexo: {
postsDir: './source/_posts'
},
logging: {
enabled: true,
consoleOutput: true,
fileOutput: false,
logFile: './logs/app.log'
}
};
根据自己的实际情况修改配置:
deepseek
下面的配置是设置评论区的AI评论的相关信息,并非使用V1还是R1,要修改模型调用就Ctrl+F搜索v1,改成R1对应的URL即可,换用其他大模型同理mongodb
下的配置是连接数据库相关的信息,dbname
是数据库名称,collection
是数据库内存评论的库hexo
下的配置是存放博文的相对路径logging
下的配置是是否在运行时启用日志功能,enabled
表示启用,consoleOutput
表示在命令行中打印日志输出,fileOutput
表示输出日志到文件中,logFile
表示日志存储文件的路径
limitation
仅适用于使用MongoDB,最好是twikoo的hexo博客
目前只支持DeepSeek,其他的需要修改API_KEY和相应配置
DeepSeek API要花钱
使用教程可能有问题,因为没条件测试(lll¬ω¬)