老胡茶室
老胡茶室
Beta

打造一支个人专属的 AI 写作团队

胡键

这段时间以来,关注本公众号的朋友应该会发现,本号突然从某一天开始变得活跃起来,几乎天天发稿。在技术群内转发的时候,也有老哥们大呼:“老胡高产!”

然而,物极必反,由于水灌得太大,惹得相交多年的群主哥们出面让我把龙头关小点 😂!

我虽文思不算敏捷,但手也不算太慢。并且,由于从业多年且经历丰富,所以写点技术类的东西,对我来讲还不算什么难事,只是受限心情而已。

但要做到这种程度的灌水,却非我个人能所为。其中的秘密就在于:最近搭建了一支私人 AI 写作班子。

搭建这套班子的本意其实并非为了灌水,而是服务于个人需要。当初的需求就两点:

  1. 快速总结文章要点同时提炼出思维导图。
  2. 作为个人助手,帮我做点调研工作。

后来,因为各种机缘巧合,逐渐演变成了现在的样子。虽然它还不算终极形态,但已经基本满足了现阶段的大多数需求。

至于灌水,那只是捎带让公众号重新活跃起来的附加手段罢了。真要专心灌水,那程度起码至少翻 10 倍以上。因为整个过程已经基本自动化,除了嫌烦没有集成微信之外,我就只干 copy/paste。整篇文章的生成,视网络情况和任务类型,快则 5 分钟内,慢则 15 分钟。

本文将重点介绍总结类文章的生成过程,至于其他类型,会陆续更新介绍。

专属团队的意义

有人肯定会问:现在主要的 AI provider 都已经可以轻易生成和总结文章了,为何还要费心思去自己写代码干这事?

就我个人来讲,很简单:

  1. 技术人的天性。
  2. 定制化的需求。
  3. 私密性的需求。
  4. 避免 lock-in 的需要。

况且,一旦成功实现,这套方案也能方便的应用到其他项目上,一举多得。

生成内容其实很简单

大道不过三两行,说穿不值一文。

让 LLM 生成内容无非就是传入 prompt,返回结果而已。整个生成过程是个黑盒,我们插不上太多手。我们要做的无非就是想方设法写好 prompt,把它和素材一起传入,最后坐等结果而已。若结果不满意,那就换个 prompt 继续试。

因此,这活的核心就在于两点:

  1. prompt 设计。
  2. 把素材准备成适合 llm 处理的格式。

通常情况下,一次 llm 调用便能搞定,讲究点的话可能会规划工作流,引入自动 review 和校正的过程。

但,我没有这么干,

因为它目前也就是服务于我个人,并且我也没有兴趣、雄心壮志和时间去写一个完整的开源项目,所以就是便宜行事,把代码开源了事。有兴趣优化的自行 clone,随意修改完了。

并不详细的技术方案介绍

在之前的选型文章《拒绝 AI FOMO,理性选择 AI 工具》里我曾说过,对于个人项目,我用的是 Python。原因也说了是因为 python 对于文档处理有大量好用的类库。

此处,从一开始就选用了 agno agent 框架来开发。原因无他:价格便宜量又足,各位可自行判断。但本文的实现思路其实跟框架无关,可以轻易套用在你倾心的框架之上。所以,不要跟我争什么框架的优劣。没兴趣!

虽然采用了 agent 方式,但总体上,并没有给配置太多的 tools。这并非我不会,而是在试过之后,发现有个 tricky 的地方:agent 计划工具太随意,且来回浪费 token,即浪费钱。而且,我目前的需求就是纯 cli 方式,一进一出,完全没有必要整上这些花活。

纯靠人工调度,更省事且省钱。

但是,我并非建议完全不用 tools,请注意!假如,你正在编写跟用户交互的 chatbot 类产品,有较强的交互性需求,那么 agent 的工具配置是非常有必要的。否则,用户体验会很差且编程费事。

接下来,就是分场景介绍一下我灌水的主要文章类型的实现方式。

文摘类文章生成:思维导图和要点提炼

包括:论文快读、文摘和视频摘要等。

代码:https://github.com/DTeam-Top/tsw-cli/blob/main/agent/summary.py

这里,思维导图和要点提炼分别有两个不同的 agent,它们返回内容会拼接在一起,形成最终的结果。

每个功能分别对应一个 prompt,这点没什么可细说的,各位在代码中可直接查看。只是对于思维导图的 prompt 结构多说两句:

  1. 选择 mermaid 为生成工具,自然也就是采用其语法。
  2. 将 mermaid 的思维导图语法内嵌其中,同时还给出了正反两部分例子,方便它学习和纠错。

但是,即便这样,依旧无法保证它 100% 正确,虽然可以达到 90% 左右。为了避免每次手工去修正结果,这里引入了一个结果后处理过程,会检查生成结果,然后自行纠错。这样,基本可做到 99% 以上的正确率,无需人工干预。

为了方便显示,这里用了一个取巧的做法:将整个思维导图文本用 pako 编码,同时拼凑一个 mermaid image 的 url。这个 url 可以直接点击在浏览器中查看。

为了在 MD 中显示,且避免手动上传图片到微信中,这里直接将图片 base64 编码后直接内嵌到 MD 中,搞定!

对于输入文档类型:

  • PDF:使用 pymupdf4llm 直接提取文本,它不仅支持文本还能提炼表格和图片。
  • 视频:主要是油管视频,之前将 link 直接传给 Gemini(这也是它文档中示例的方式),效果不理想。故调整思路,转而取字幕上传,使用 youtube-transcript-api
  • 链接:若是 pdf,则下载后走 pdf 分支;否则,直接取 html 内容,将其转换成 markdown 格式,使用 markdownify。注:我当然知道这里不严谨,还有其他格式,但目前就是图方便。

同时,它还支持对于多个文档一次进行总结,这在专题研究时很方便。这无非就是上面的循环而已。这里略过。

代码类文章生成

包括:代码快读和 review 等。

代码:https://github.com/DTeam-Top/tsw-cli/blob/main/agent/code.py

注:tutorial 尚不完善,且我也没有验证它生成的教程正确性如何,故慎用。

这里的主体思路跟上面一样,传入 prompt,得到期望的结果。

对于 prompt,其实没什么可说的,可直接在代码中看就好了。这里的关键是对于代码库的处理,即如何(尽可能)一次性的将整库传给 Gemini(这时候它的长上下文优势就凸显了)。

这里直接使用 repomix 即可,具体使用可参见其文档。它支持远超和本地 git 仓库。同时,注意配置好忽略哪些,避免传入不必要的内容,同时也是为了节省 token。

后记

简单吧?既然如此轻易便可用打造一支私人 AI 写作团队,那为何不试试呢?