老胡茶室
老胡茶室
Beta

零成本打造自动化笔记发布流水线

胡键

友情提示:本文所指的“零成本”是指除了你投入的时间和精力之外的“硬成本”,cheers!

附加提示:【笔记】在本文中等同【摘要】。

不知各位在网上闲逛时是否会有链接看不过来的情形?起码我是这样。这些链接可以是任何引起你兴趣的东西,它可能来自于别人的推文、搜索的结果或者正在读的文章或视频里的链接。

我估计这种需求并不鲜见,因为“read it later”类插件或应用随处可见。

我曾经用过一两个,但短暂的新鲜劲过后,再也没有使用过。因为它们(注:若干年前)基本上都只是一个书签管理工具,并且有些还加上了一些画蛇添足的功能,如文章推荐。本来我就因为兴趣太广泛导致现有链接都读不过来,它居然还要再给我推荐更多的文章去读,简直有点脑残!

心血来潮的需求

若干年后,在如今这个 AI 平民化的时代某一天(当时我正沉迷于编写自用的 TSW 插件),一个念头突然闪过:为什么不用 AI 来帮我处理这些链接呢?初步整理了一下思路之后,我罗列的需求如下:

  1. 基于当前打开的文章自动形成摘要
  2. 摘要的格式如下:关键字、概述、分节总结、文中工具链接、参考文献,原文链接。
  3. 导出摘要。

以上需求纯粹基于我个人的需要,因为我期望:

  1. 快速了解文章内容,以便决定是否继续阅读。
  2. 有工具或参考文献链接,以便查看相关工具或参考文献。
  3. 有原文链接,以便查看原文。
  4. 导出摘要,则是为了方便保存。

但是,我并不是一个太勤快的人,不喜欢反复做琐碎的事情。在手动保存摘要一段时间之后,又增加了新的需求:

  1. 直接将摘要导出到我的 github repo 里,而非下载到本地,在手动提交到 repo,最后同步到 remote repo。
  2. 再建一个摘要站点,将其分享出去。这样即可方便我自己的阅读,也方便他人(主要是我自己的团队成员)的阅读。
  3. 省钱,最好是在这些基础设施上不要花钱。

不花钱的技术方案

以上需求大体分成三个部分:

  1. 摘要生成
  2. 摘要导出
  3. 摘要站点

让我们依次考虑如何以零的成本实现这三个部分。

摘要生成

LLM 大大降低了 NLP 问题的解决门槛。如今,你可以轻易地用任何成熟 LLM 提供商 API 为一段文本生成摘要。

但是细节是魔鬼,为了最大程度压榨 LLM 的能力,你还需要考虑若干问题。

链接 VS 内容

我第一次尝试的是:链接,因为图省事是我的原则。

一开始,貌似 ok,但仔细看过摘要内容之后,发现效果并不理想,而且还大概率是它在胡说八道。

于是乎,老老实实回归传统,解析链接,获取内容再传入。

LLM 的选择

要想不花钱或少花钱,这里的选择就涉及两个方面:免费额度和输入长度。

当时就所谓的御三家:OpenAI、Claude 和 Gemini,让我们在本文姑且忽略以 Mistral 为代表的其他厂商。

  • 从免费额度上来看: Gemini 是最慷慨的。
  • 从场景上来看:处理普通文本,三家没明显差距。
  • 从输入长度上来看: Gemini 最大,这样的话可以简化开发,因为这里的输入就是单个页面的文本,即便是那种长篇大论,也大概率不会超过 Gemini 的限制。因此不需要考虑分段等问题。

But,这并不意味着你可以直接就把网页的 html 直接喂给 Gemini 了。因为:

  1. 一般的网页上有很多噪音,如广告、导航、评论等。
  2. 就正文来讲,大多数情况下:代码片段、图片等对于摘要并不重要。
  3. MD 格式的文本对于 LLM 来说是最好的输入格式。

因此,这里对于 html 进行了简单的清洗:

  1. 过滤无关标签
    • 结合 <article><section> 标签
    • 过滤无关标签如 <script>
  2. 将 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 就行了。

然而,作为技术选型达人,兄弟自然要体现出额外的品味,😄。

  1. 静态站点 + MD 文件输入
  2. 前端全文检索
  3. 提交即自动发布
  4. 网页托管尽可能不花钱

最终选型:

  1. Astro + 相关模版,最终定制化之后形成自用模版:
  2. Vercel + GitHub Actions
    • Vercel 提供了与 GitHub repo 直连部署的功能,这样提交即发。且对于个人用静态站点,几乎不花钱。

由于 Astro 对 MD 文件有格式要求,这里就是按照其格式要求生成对应符合格式的 MD 文件即可。相信各位可以在上述代码参考基础上自行实现。

基础设施成本:0

总结

至此,整个零成本自动化笔记发布流水线关键部分已经介绍完毕,各位可以将其融入到自己的项目中去。就我的使用场景来讲,它是我自用插件的一部分,;)。各位则可以发挥想象,酌情调整,以适应自己的需求。

想象一下:输入一个链接,不到 5 分钟时间:

  1. 你就可以在自己的专属摘要站点上看到最新内容
  2. 还可以随时分享和回来查看
  3. 并且查看相应工具链接和参考文献更加便捷

这样的体验,岂非快哉?!