友情提示:本文所指的“零成本”是指除了你投入的时间和精力之外的“硬成本”,cheers!
附加提示:【笔记】在本文中等同【摘要】。
不知各位在网上闲逛时是否会有链接看不过来的情形?起码我是这样。这些链接可以是任何引起你兴趣的东西,它可能来自于别人的推文、搜索的结果或者正在读的文章或视频里的链接。
我估计这种需求并不鲜见,因为“read it later”类插件或应用随处可见。
我曾经用过一两个,但短暂的新鲜劲过后,再也没有使用过。因为它们(注:若干年前)基本上都只是一个书签管理工具,并且有些还加上了一些画蛇添足的功能,如文章推荐。本来我就因为兴趣太广泛导致现有链接都读不过来,它居然还要再给我推荐更多的文章去读,简直有点脑残!
心血来潮的需求
若干年后,在如今这个 AI 平民化的时代某一天(当时我正沉迷于编写自用的 TSW 插件),一个念头突然闪过:为什么不用 AI 来帮我处理这些链接呢?初步整理了一下思路之后,我罗列的需求如下:
- 基于当前打开的文章自动形成摘要
- 摘要的格式如下:关键字、概述、分节总结、文中工具链接、参考文献,原文链接。
- 导出摘要。
以上需求纯粹基于我个人的需要,因为我期望:
- 快速了解文章内容,以便决定是否继续阅读。
- 有工具或参考文献链接,以便查看相关工具或参考文献。
- 有原文链接,以便查看原文。
- 导出摘要,则是为了方便保存。
但是,我并不是一个太勤快的人,不喜欢反复做琐碎的事情。在手动保存摘要一段时间之后,又增加了新的需求:
- 直接将摘要导出到我的 github repo 里,而非下载到本地,在手动提交到 repo,最后同步到 remote repo。
- 再建一个摘要站点,将其分享出去。这样即可方便我自己的阅读,也方便他人(主要是我自己的团队成员)的阅读。
- 省钱,最好是在这些基础设施上不要花钱。
不花钱的技术方案
以上需求大体分成三个部分:
- 摘要生成
- 摘要导出
- 摘要站点
让我们依次考虑如何以零的成本实现这三个部分。
摘要生成
LLM 大大降低了 NLP 问题的解决门槛。如今,你可以轻易地用任何成熟 LLM 提供商 API 为一段文本生成摘要。
但是细节是魔鬼,为了最大程度压榨 LLM 的能力,你还需要考虑若干问题。
链接 VS 内容
我第一次尝试的是:链接,因为图省事是我的原则。
一开始,貌似 ok,但仔细看过摘要内容之后,发现效果并不理想,而且还大概率是它在胡说八道。
于是乎,老老实实回归传统,解析链接,获取内容再传入。
LLM 的选择
要想不花钱或少花钱,这里的选择就涉及两个方面:免费额度和输入长度。
当时就所谓的御三家:OpenAI、Claude 和 Gemini,让我们在本文姑且忽略以 Mistral 为代表的其他厂商。
- 从免费额度上来看: Gemini 是最慷慨的。
- 从场景上来看:处理普通文本,三家没明显差距。
- 从输入长度上来看: Gemini 最大,这样的话可以简化开发,因为这里的输入就是单个页面的文本,即便是那种长篇大论,也大概率不会超过 Gemini 的限制。因此不需要考虑分段等问题。
But,这并不意味着你可以直接就把网页的 html 直接喂给 Gemini 了。因为:
- 一般的网页上有很多噪音,如广告、导航、评论等。
- 就正文来讲,大多数情况下:代码片段、图片等对于摘要并不重要。
- MD 格式的文本对于 LLM 来说是最好的输入格式。
因此,这里对于 html 进行了简单的清洗:
- 过滤无关标签
- 结合
<article>
和<section>
标签 - 过滤无关标签如
<script>
等
- 结合
- 将 html 转为 md
- 采用
turndown
库
- 采用
除此之外,这里还有额外的好处:减少了输入长度,这意味着同样的配额可以用更多次。
注:代码,https://github.com/foxgem/tsw/blob/main/src/ai/utils.ts
摘要格式
就是写 prompt,没啥好说的。直接看代码吧:https://github.com/foxgem/tsw/blob/main/src/ai/ai.ts#L261
综合三步,基础设施成本:0。
摘要导出
这里需求明确,采用 github 的免费 API 即可,使用 octokit
库。此处需 GitHub 的 PAC,创建流程如下:
settings -> developer settings -> personal access tokens -> fine-grained tokens
基础设施成本:0。
注:代码,https://github.com/foxgem/tsw/blob/main/src/lib/utils.ts#L33
摘要站点
有经验的从业者看到这个需求可能会说:哦,这个简单,用 GitHub Pages 就行了。
然而,作为技术选型达人,兄弟自然要体现出额外的品味,😄。
- 静态站点 + MD 文件输入
- 前端全文检索
- 提交即自动发布
- 网页托管尽可能不花钱
最终选型:
- Astro + 相关模版,最终定制化之后形成自用模版:
- Vercel + GitHub Actions
- Vercel 提供了与 GitHub repo 直连部署的功能,这样提交即发。且对于个人用静态站点,几乎不花钱。
由于 Astro 对 MD 文件有格式要求,这里就是按照其格式要求生成对应符合格式的 MD 文件即可。相信各位可以在上述代码参考基础上自行实现。
基础设施成本:0。
总结
至此,整个零成本自动化笔记发布流水线关键部分已经介绍完毕,各位可以将其融入到自己的项目中去。就我的使用场景来讲,它是我自用插件的一部分,;)。各位则可以发挥想象,酌情调整,以适应自己的需求。
想象一下:输入一个链接,不到 5 分钟时间:
- 你就可以在自己的专属摘要站点上看到最新内容
- 还可以随时分享和回来查看
- 并且查看相应工具链接和参考文献更加便捷
这样的体验,岂非快哉?!