Skip to content

[Feature Request] 增加额外的内容处理过程,或者增加对于prompt的支持 #447

@prur

Description

@prur

需求:

实现可以根据订阅源的不同,设置对于该订阅源的额外的内容处理方式,然后把处理结果作为附属内容发送给用户。

比如对于订阅源A,增加一个文本翻译的工作流程;对于订阅源B,增加一个关键词提取的功能;还可以有总结、自定义的prompt等功能。

下面是根据询问 AI 的改进意见,供您参考:

Q:

1)本项目代码的主要的工作流程:

1. 初始化程序,连接数据库和Telegram API
2. 加载用户订阅源,启动定时任务定期检查更新
3. 检查到更新时,获取内容,解析并处理成需要的格式
4. 将内容发送到Telegram上
5. 接收用户交互命令,如修改设置等
6. 持续循环上述流程

2)代码改进:
在流程3与流程4之间(或者通过修改流程3、流程4)增加一项功能:
根据订阅源的不同,设置对于该订阅源的额外内容处理方式,比如对于订阅源A,增加一个文本翻译的工作流程;对于订阅源B,增加一个关键词提取的功能;

3)代码改进要求:
1. 尽可能小的影响源代码、原来的代码框架、代码逻辑
2. 尽可能的使用可插拔、热加载、插件等方式
3. 详尽写出需要修改的代码范围,和具体的代码实现

A:

## 实现方法:

(1) 尽可能小影响原代码

在src/parsing/post.py中,Post类的 send_formatted_post 方法末尾增加判断:

if feed_link in TRANSLATION_FEEDS:
   await self.translate(formatted_text)
if feed_link in KEYWORD_FEEDS:
   await self.keyword_extract(formatted_text)

TRANSLATION_FEEDS、KEYWORD_FEEDS定义新的常量或配置来表示启用额外处理的订阅源

(2) 额外处理用可插拔方式实现

在src/plugin中新增google_translate.py、keyword_extract.py等文件

内容类似:

from abc import ABC, abstractmethod

class Processor(ABC):
  @abstractmethod
  async def process(text):
    pass

class GoogleTranslator(Processor):
  # 实现翻译逻辑

class KeywordExtractor(Processor):
  # 实现关键词提取逻辑

src/parsing/post.py中调用:

processor = get_processor(feed_link)
await processor.process(formatted_text)


(3) 使新功能热加载

使用watchdog监听src/plugin目录变化

变化时重新导入processor,实现热加载

以上尽可能在不影响原框架、最小改动的情况下实现可配置、可插拔的订阅源额外处理功能。

主要更改:

导入自定义处理器

定义订阅源到处理器的映射

在发送前判断订阅源是否需要额外处理

如果需要,调用对应的处理器进行处理

处理后再发送

这样,在不影响原有代码和框架的情况下,实现了订阅源的自定义处理。

可以根据实际需要调整处理器的映射,新增其他处理器等来丰富功能。

整体来说,订阅源的自定义处理可以通过类似的可插拔设计模式实现,不需要大规模修改原代码。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions