🗓️ 2024-05-16 🏷️ #技术与生活#

目录

    • 1.前言
    • 2.实现效果
    • 3.如何使用
      • 3.1 添加配置
      • 3.2 管理翻译

[TOC]

1.前言

Miniflux是我目前在用的一个开源RSS服务应用,前几日我提了一个issue,询问是否可以添加翻译标题的功能,因为我订阅了很多英文feed,但是我的英文不太好,词汇量不够,无法做到随便瞟一眼就能准确获取标题所传达的信息,需要停下来细看,有时碰到陌生单词还要借助翻译软件才行,这不利于快速获取有效信息。

阅读本来就是需要时间,为什么不停下来细看呢?原因是这样的,我平时获取信息大概要经历如下步骤,Miniflux刚好位于第一,二步骤——查找和过滤,现在是信息爆炸的时代,面对每日涌来的浩如烟海的信息,为了能获取多足够多,有价值的信息,就需要一个简单的方法,将可能感兴趣的信息过滤出来,而将不感兴趣的信息拒之脑门外。RSS里每一个feed消息,一般包含标题(title)和简介(description),如何判断是否感兴趣,通过阅读上述两个字段,就能很粗暴的作出决定,但是存在一些feed,简介即是正文信息,内容很长,所以两个提供判断条件的字段就只剩下标题一个(该过滤的前提是没有标题党)。

flowchart TD
查找 --> b{过滤}
b --> c[归集]
c --> d[阅读]
d --> e{过滤}
e --> f[存档]
f --> g[消化吸收]
g --> h[总结/输出/应用]

另一个可选的过滤方法是,Miniflux对于每一个feed可以单独设置【阻止规则】,用来过滤,比如设置关键字“震惊”,如果该feed发布的消息的标题、网址、标签包含上述关键字就会被忽略,大部分RSS在线服务商,比如Feedly和Inoreader,过滤属于高级功能,需要付费且价格不菲,这也是我转向Miniflux的原因。这很有效,但是仅对已经被标注过的某一方面/类型的信息起作用,你总不能将所有不感兴趣的信息标注出来吧,所以呢再通过标题判断就很有必要了。

2.实现效果

可能「翻译标题」的需求太小众,issue没有引起足够多的关注,只有一位热心网友评论推荐了RSS翻译器,我阅读后发现确实满足需求,但需要部署外部独立的翻译服务,然后转发feed到Miniflux,觉得这个方法使得整个翻译流程复杂化了,最好是将其集成到Miniflux里,作为一个内建的功能。

于是我fork官方仓库,花了些时间将该功能实现,依然使用OpenAI公司的ChatGPT来完成翻译(类似实验性的功能,目前还没有合并到上游仓库)。

下面是功能截图。

image-20240516030056095

网页显示效果,左边原文 | 右边译文
IMG_2212
IOS Reeder效果

3.如何使用

3.1 添加配置

在启动配置文件里,增加如下几个配置项

CHATGPTAPI=  
CHATGPTKEY=  
CHATGPTMODEL=gpt-3.5-turbo  
TRANSLATEPROMPT=你是一个翻译助手,需要将我的话准确地翻译成中文

说明:

  • CHATGPTAPI:chatgpt的接口,可以使用第三方,但是必须兼容OpenAI

  • CHATGPTKEY:访问密钥

  • CHATGPTMODEL:模型,默认gpt-3.5-turbo

  • TRANSLATEPROMPT:翻译提示,需要成翻译哪门语言,就在这里定义文本描述

3.2 管理翻译

可在应用web页面管理开启和关闭翻译。

image-20240516030544555

新增feed页,勾选「翻译标题」将添加并翻译标题

image-20240516030347587

feed编辑页,可在此控制是否「翻译标题」

我已经将应用编译成可执行文件并发布,可以在这里找到,另外如果你有更好的解决方案,欢迎让我知道。

---更新---

Miniflux的开发真是太活跃,因为我增加翻译的修改没有合并到上游,导致每次合并上游新版本的时候都需要手动修改冲突,太烦人了,于是我便将翻译功能剥离出来,变成一个独立的服务。本来想直接使用之前提到的Rss-Translator,但是该项目是基于Python语言的Django框架,我不是很熟悉,而且Python开销有点大,我的小服务器吃不消,遂作罢。

现在这个小翻译服务也已经开源,感兴趣的可以先看看demo,用户名demo,密码:demo1234