网站AI摘要升级实录:定制属于自己的AI

🧭 背景介绍

在刚开始建站时,本站采用的是张洪大佬的 洪墨AI 用于自动生成AI摘要,由于本站的文章更新较为频繁,token 很快就用完了,近日刚收到余额不足提醒。

鉴于这段时间以来使用的体验感觉并不是那么好,主要存在以下问题:

  • Token 消耗较快,且价格不便宜:8.99 元 / 5 万 tokens,换算下来成本较高;
  • 稳定和性能不足:有时候进入文章详情并没有显示出AI摘要或需要等一段时间才能显示出;
  • 效果不佳:输出的摘要内容比较少,可参看下面前后对比;
  • 无法自定义:没有办法自定义提示词,进行效果优化。

还有我另外在其他平台也有很多 tokens 没用完,因此就想着直接建立自己的AI。

PS:其实洪墨AI的产品做的还是挺不错的,只是可能不太适合我。

📋 前提条件

  • 本站是基于 NotionNext 框架搭建的,因此本教程仅适用于NotionNext最新版
  • 需要有通用大模型平台的 token
  • 已部署Redis服务,用于缓存生成的AI摘要信息(使用Docker部署非常简单)

🧩 使用前后对比

在开始之前我们先使用洪墨AI和青萍AI对比看一下效果。

PS:这里性能和稳定性就不说了,青萍AI 缓存都是在自己服务器上的非常之快。

洪墨AI

青萍AI

虽然样式上还差了点,后续可以自己优化,但是在效果上面可以看出青萍AI还是要更完整一些的。

🚀 详细步骤

1️⃣ 修改 NotionNext 源码

在这之前先移除洪墨AI接入代码这个就不多说了,然后 NotionNext 本身最新版其实就已经内置了AI摘要插件,我们只需要做很小的调整就可以了。

PS:不知道为何官方文档里面并没有提及这一点,因此我就写一下教程以供大家参考吧。

修改项目的/lib/plugins/aiSummary.js源码文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 这里以 DeepSeek 通用大模型为例,由于源文件不支持因此需要全部替换为以下内容
# 其实就只是改了下使用的大模型、认证方式和提示词
export async function getAiSummary(aiSummaryAPI, aiSummaryKey, truncatedText) {
try {
console.log('请求文章摘要', truncatedText.slice(0, 50))
const response = await fetch(aiSummaryAPI, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${aiSummaryKey}`
},
body: JSON.stringify({
model: "deepseek-chat",
messages: [
{
role: "system",
content: "请阅读以下博客文章,提炼其核心内容,并生成一段简洁、清晰的摘要。\n要求:\n1. 概括主要观点:突出作者的核心想法和关键结论;\n2. 保留文章结构:如有明显的引入、过程、结论,尽量反映出来;\n3. 风格自然:语言流畅,略带博客口吻,但不过度口语化;\n4. 字数建议:控制在 80~100 字之间;\n5. 不要返回markdown格式;\n6. 请确保在生成的内容中,中文与英文、数字之间添加空格;\n7. 请以这里是青萍AI,这篇文章介绍了开头。\n\n"
},
{
role: "user",
content: truncatedText
}
],
max_tokens: 200,
temperature: 0.7
})
})

if (response.ok) {
const data = await response.json()
return data.choices[0].message.content
} else {
throw new Error('Response not ok')
}
} catch (error) {
console.error('DeepSeek API请求失败', error)
return '获取文章摘要失败,请稍后再试。'
}
}

完整提示词如下,这里比较关键也是我们模型效果优化的一个重要措施:

1
2
3
4
5
6
7
8
9
请阅读以下博客文章,提炼其核心内容,并生成一段简洁、清晰的摘要。
要求:
1. 概括主要观点:突出作者的核心想法和关键结论;
2. 保留文章结构:如有明显的引入、过程、结论,尽量反映出来;
3. 风格自然:语言流畅,略带博客口吻,但不过度口语化;
4. 字数建议:控制在 80~100 字之间;
5. 不要返回markdown格式;
6. 请确保在生成的内容中,中文与英文、数字之间添加空格;
7. 请以这里是青萍AI,这篇文章介绍了开头。

PS:如有更好的提示词欢迎大家讨论交流~

2️⃣ 添加环境变量配置

根据你的部署方式添加以下环境变量:

1
2
3
4
5
6
7
8
# AI Summary
AI_SUMMARY_API=https://api.deepseek.com/v1/chat/completions
AI_SUMMARY_KEY=sk-xxxxxxx
# 默认缓存31年
AI_SUMMARY_CACHE_TIME=999999999

# Redis缓存
REDIS_URL="redis://[username]:[password]@[host]:6379/1"

这里我们不仅是配置了大模型的API接口和KEY,还加上了Redis缓存,感谢NotionNext让配置如此简单。

之所以要配置 Redis 是因为项目默认使用的是内存缓存,每次部署都会将缓存清零,然后下次构建又会全量请求大模型获取摘要,从而导致 token 消耗量就会非常大,因此必须要使用外置的 Redis 组件进行缓存。

另外文章发布后不会经常变动,因此我这里设置的默认缓存时间非常长,完全是够用了。

PS:这里需要注意的是如果你的redis只设置了密码,那么username可以为空,但是要带上中间的冒号:

3️⃣ 验证效果并上线部署

在本地环境先跑一下,看看效果,然后再推到服务器进行构建部署(这里要说下洪墨AI不支持本地显示摘要信息,还必须要https)。

首次构建由于没有缓存,需要挨个获取AI摘要信息会比较慢,后续构建查到有缓存就不会再请求大模型了。

如果是跟我一样使用的阿里云效部署,还需要另外开通安全组白名单,否则构建时缓存无法写入到Redis中,尽量不要将Redis直接暴露在公网。

云效北京构建集群公网IP:47.93.89.24647.94.150.17

云效杭州构建集群公网IP:47.96.173.226116.62.173.28

PS:由于我的文章也不少,最终首次构建耗时差不多半个小时。。。

✅ 总结

最后总结一下,将AI摘要服务从**洪墨AI升级为青萍AI**主要带来以下优点:

  • 更稳定,性能更高:这是因为缓存服务直接在本地的服务器,可以看到一进入详情页面就开始疯狂输出摘要了,甚至连等待都不需要加。
  • 成本更低:可以直接复用其他通用大模型,如:DeepSeek、千问等,有些还送了很多token,比如千问新用户免费送百万 tokens。
  • 效果更好:可以自定义提示词,将效果打磨的更好。