跳转到内容

系统内置 AtomCraft

FeedCraft 内置了一系列“原子工艺 (AtomCrafts)”,用于对订阅源进行特定的处理。你可以将这些原子工艺组合成“组合工艺 (FlowCraft)”来构建强大的数据管道。

这些原子用于获取全文或清理 HTML。

从原始网页提取文章的全文内容。

  • 适用场景: 当 RSS 订阅源仅提供摘要或片段时。
  • 机制: 使用标准 HTTP 客户端请求网页,并使用算法提取正文。速度快且轻量。

使用无头浏览器 (Puppeteer) 提取全文。

  • 适用场景: 针对通过 JavaScript 动态渲染内容或有较强反爬虫措施的网站。
  • 机制: 连接到配置的浏览器提供方(browserless-restfulcdp)来渲染页面。速度较慢但兼容性更强。
  • 参数:
    • mode (默认: networkidle2): 页面加载等待模式。
      • load: 等待 load 事件。
      • domcontentloaded: 等待 DOMContentLoaded 事件。
      • networkidle0: 等待直到 500ms 内没有活跃的网络连接。
      • networkidle2: 等待直到 500ms 内活跃的网络连接数不超过 2 个。(推荐用于 SPA 单页应用)。
    • wait (默认: 0): 显式等待时间(秒),例如 5

清理 HTML 内容以去除杂乱信息。

  • 适用场景: 通过移除多余的 class、style 和空标签来提高可读性。

将内容中的相对链接(如 <a href="/about">)转换为绝对链接(如 <a href="https://example.com/about">)。

  • 适用场景: 提取全文后必不可少,否则在 RSS 阅读器中查看时链接会失效。

使用文章内容的 FNV-1a 哈希值替换 RSS 条目的 GUID。

  • 适用场景: 某些订阅源在内容未变更的情况下频繁更改 GUID,导致阅读器中出现重复的未读条目。此原子可基于内容稳定 GUID。

使用 LLM 重新格式化文章,修复排版错误,去除广告,并标准化 Markdown 格式,最后转换回干净的 HTML。

  • 参数:
    • prompt: 设定“编辑”角色的指令。

使用大语言模型改写、增强或筛查内容。

将文章标题翻译为你的目标语言。

  • 参数:
    • prompt: 自定义提示词。默认使用标准翻译提示词。支持 {{.TargetLang}} 占位符。

翻译整篇文章内容,替换原文。

  • 参数:
    • prompt: 自定义提示词。支持 {{.TargetLang}}

translate-content-immersive (沉浸式翻译)

Section titled “translate-content-immersive (沉浸式翻译)”

双语翻译模式。在每一段原文后面追加翻译后的内容。

  • 参数:
    • prompt: 自定义提示词。

生成文章摘要并将其添加到正文开头。

  • 参数:
    • prompt: 用于生成摘要的自定义提示词。

为文章生成简短的介绍或导语。

  • 参数:
    • prompt: 自定义提示词。

根据自定义规则使用大语言模型处理文章内容,并将生成结果插入到指定位置。

  • 参数:
    • rule (必填): 针对每篇文章内容的处理指令。例如:“总结文章的关键观点并列出行动建议”。
    • extra-payload (默认: article_content): 逗号分隔的附加信息列表,可发送给 LLM。支持:article_summary (AI 生成的摘要), article_content (文章内容), article_date (文章日期), raw_rss_item (原始 RSS 节点数据)。
    • placement (默认: prepend): 生成内容的写入位置。支持:prepend (在原文前追加), replace (替换原文), append (在原文后追加)。

使用 LLM 检测文章是否为软文或广告(综合评估标题和内容),并将其移除。

  • 参数:
    • prompt-for-exclude: 如果文章是广告,应返回 true 的提示词。

控制最终订阅源保留哪些条目,包括关键词、时间和语义过滤。

根据标题或内容中的关键词进行过滤。

  • 参数:
    • keywords: 逗号分隔的关键词列表(子串匹配,区分大小写)。例如:ad,sell,SALE
    • mode: include (保留匹配项,默认) 或 exclude (移除匹配项)。
    • scope: title (标题), content (内容), 或 all (全部,默认)。

限制 Feed 中的条目数量。

  • 参数:
    • num (默认: 10): 保留的最大条目数。

过滤掉超过指定天数的条目。

  • 参数:
    • days (默认: 7): 文章保留的最大天数。

通用的 LLM 过滤器。你可以定义排除条件。LLM 会结合文章标题和内容进行评估。

  • 参数:
    • filter_condition: 自然语言描述的条件。如果 LLM 回答 “yes” (true),则该条目会被移除
    • 示例: “这篇文章是关于体育的吗?” (移除体育类文章)。

基于 Embedding 模型的语义主题过滤器。它不会让聊天模型逐条判断文章,而是把“主题锚点”和文章内容都转换成向量,再用余弦相似度判断是否匹配。

推荐单独配置 Embedding 服务:

Terminal window
FC_EMBEDDING_API_TYPE=openai
FC_EMBEDDING_API_BASE=https://api.openai.com/v1
FC_EMBEDDING_API_KEY=sk-your-api-key
FC_EMBEDDING_API_MODEL=text-embedding-3-small # 必填
FC_EMBEDDING_BATCH_SIZE=5
FC_EMBEDDING_MAX_INPUT_CHARS=8000

FC_EMBEDDING_API_TYPE 支持:

  • openai: OpenAI 或 OpenAI 兼容的 Embedding 接口。
  • gemini: 通过 Gemini 的 OpenAI 兼容 Embedding 接口调用。请显式设置 FC_EMBEDDING_API_BASEFC_EMBEDDING_API_MODEL
  • ollama: 本地 Ollama Embedding 模型。请设置 FC_EMBEDDING_API_BASE,例如 http://localhost:11434,并使用 nomic-embed-textbge-m3 这类 Embedding 模型。

如果 FC_EMBEDDING_API_TYPEFC_EMBEDDING_API_BASEFC_EMBEDDING_API_KEY 都没有设置,FeedCraft 会回退到对应的 FC_LLM_API_TYPEFC_LLM_API_BASEFC_LLM_API_KEY。Embedding 模型名是独立的:你必须显式设置 FC_EMBEDDING_API_MODEL 为有效的 Embedding 模型。 FeedCraft 不再提供默认 Embedding 模型,也不会复用 FC_LLM_API_MODEL,因为它通常是聊天模型。

FC_EMBEDDING_MAX_INPUT_CHARS 是发送给 Embedding 服务前的最终安全上限,包含 instruction 前缀。它是字符预算,不是精确的 tokenizer token 数。建议按模型 token 窗口设置保守值,例如 8k token 的 Embedding 模型可从 8000 开始。

  • anchors (必填): 每行一个主题锚点。锚点应描述你想匹配的主题,例如:

    人工智能基础设施
    机器学习研究
    大语言模型部署
  • threshold (默认: 0.6): 余弦相似度阈值,范围 01。值越高越严格。建议从 0.6 开始;漏掉相关文章时调低,混入无关文章时调高。

  • mode (默认: include): include 保留匹配项;exclude 移除匹配项。

  • max_content_length (默认: 2000): 当前 AtomCraft 使用的文章正文最大字符数;最终发送前还会受 FC_EMBEDDING_MAX_INPUT_CHARS 保护。

  • instruction (可选): 会作为文本前缀拼接到每条 Embedding 输入前。除非你的模型确实需要固定任务前缀,否则建议留空。

  1. 打开 工作台 → Feed 源处理 → 原子工艺
  2. 新建一个 AtomCraft,例如 ai-news-only
  3. 模板选择 embedding-filter
  4. anchors 中每行填写一个主题。
  5. 使用 mode=include 保留匹配文章,或切换到 exclude 移除匹配文章。
  6. 保存 AtomCraft。
  7. 在 FlowCraft、Recipe、Feed Compare 中使用它,或直接访问:
/craft/ai-news-only?input_url=https%3A%2F%2Fexample.com%2Ffeed.xml
  • “anchors parameter is required”: anchors 至少需要一行非空内容。
  • “FC_EMBEDDING_API_MODEL must be set”: 请配置单个 Embedding 模型。聊天模型不适合这个功能。
  • 所有文章都被移除: 降低 threshold,增加更宽泛的锚点,或增大 max_content_length
  • 无关文章仍然保留: 提高 threshold,让锚点更具体,或用代表性短语替代宽泛分类名。
  • 服务商提示输入过长: 降低 FC_EMBEDDING_MAX_INPUT_CHARS,降低 max_content_length,或缩短 instruction

透传代理。HTML / JSON / 搜索转 RSS 见功能指南与系统工具。

简单的订阅源代理。

  • 适用场景: 当你只想转发原始 Feed 而不做修改,或者将 FeedCraft 作为中心网关使用时。

FeedCraft v3.2.0