Files
zenfeed/docs/config-zh.md
2025-11-05 14:55:01 +00:00

36 KiB
Raw Blame History

字段 类型 描述 默认值 是否必需
timezone string 应用的时区。例如 Asia/Shanghai 服务器本地时区
telemetry object Telemetry 配置。详见下方的 Telemetry 配置 部分。 (见具体字段)
api object API 配置。详见下方的 API 配置 部分。 (见具体字段)
llms 列表 大语言模型 (LLM) 配置。会被其他配置部分引用。详见下方的 LLM 配置 部分。 [] 是 (至少 1 个)
jina object Jina AI 配置。详见下方的 Jina AI 配置 部分。 (见具体字段)
scrape object 抓取配置。详见下方的 抓取配置 部分。 (见具体字段)
storage object 存储配置。详见下方的 存储配置 部分。 (见具体字段)
scheduls object 用于监控 Feed 的调度配置 (也称为监控规则)。详见下方的 调度配置 部分。 (见具体字段)
notify object 通知配置。它接收来自调度模块的结果,通过路由配置进行分组,并通过通知渠道发送给通知接收者。详见下方的 通知配置, 通知路由, 通知接收者, 通知渠道 部分。 (见具体字段)

Telemetry 配置 (telemetry)

字段 类型 描述 默认值 是否必需
telemetry.address string 暴露 Prometheus 指标 & pprof。 :9090
telemetry.log object Telemetry 相关的日志配置。 (见具体字段)
telemetry.log.level string Telemetry 相关消息的日志级别, 可选值为 debug, info, warn, error 之一。 info

API 配置 (api)

字段 类型 描述 默认值 是否必需
api.http object HTTP API 配置。 (见具体字段)
api.http.address string HTTP API 的地址 ([host]:port)。例如 0.0.0.0:1300。应用运行后不可更改。 :1300
api.mcp object MCP API 配置。 (见具体字段)
api.mcp.address string MCP API 的地址 ([host]:port)。例如 0.0.0.0:1301。应用运行后不可更改。 :1301
api.llm string 用于总结 Feed 的 LLM 名称。例如 my-favorite-gemini-king。引用在 llms 部分定义的 LLM。 llms 部分中的默认 LLM 是 (如果使用总结功能)

LLM 配置 (llms[])

此部分定义了可用的大语言模型列表。至少需要一个 LLM 配置。

字段 类型 描述 默认值 是否必需
llms[].name string LLM 的名称 (或称 'id')。例如 my-favorite-gemini-king。用于在其他配置部分 (如 api.llm, storage.feed.embedding_llm 等) 引用此 LLM。
llms[].default bool 此 LLM 是否为默认 LLM。只能有一个 LLM 是默认的。 false 否 (但如果依赖默认行为,则必须有一个为 true)
llms[].provider string LLM 的提供商, 可选值为 openai, openrouter, deepseek, gemini, volc, siliconflow 之一。例如 openai
llms[].endpoint string LLM 的自定义端点。例如 https://api.openai.com/v1 (提供商特定默认值)
llms[].api_key string LLM 的 API 密钥。
llms[].model string LLM 的模型。例如 gpt-4o-mini。如果用于生成任务 (如总结),则不能为空。如果此 LLM 被使用,则不能与 embedding_model 同时为空。 条件性必需
llms[].embedding_model string LLM 的 Embedding 模型。例如 text-embedding-3-small。如果用于 Embedding则不能为空。如果此 LLM 被使用,则不能与 model 同时为空。注意: 初次使用后请勿直接修改,应添加新的 LLM 配置。 条件性必需
llms[].tts_model string LLM 的文本转语音 (TTS) 模型。
llms[].temperature float32 LLM 的温度 (0-2)。 0.0

Jina AI 配置 (jina)

此部分用于配置 Jina AI Reader API 的相关参数,主要供重写规则中的 crawl_by_jina 类型使用。

字段 类型 描述 默认值 是否必需
jina.token string Jina AI 的 API Token。从 Jina AI API Dashboard 获取。提供 Token 可以获得更高的服务速率限制。如果留空,将以匿名用户身份请求,速率限制较低。

抓取配置 (scrape)

字段 类型 描述 默认值 是否必需
scrape.past time.Duration 抓取 Feed 的回溯时间窗口。例如 1h 表示只抓取过去 1 小时的 Feed。 24h
scrape.interval time.Duration 抓取每个源的频率 (全局默认值)。例如 1h 1h
scrape.rsshub_endpoint string RSSHub 的端点。你可以部署自己的 RSSHub 服务器或使用公共实例 (参见 RSSHub 文档)。例如 https://rsshub.app 是 (如果使用了 rsshub_route_path)
scrape.rsshub_access_key string RSSHub 的访问密钥。用于访问控制。(详情见 RSSHub文档访问控制)
scrape.sources 对象列表 用于抓取 Feed 的源列表。详见下方的 抓取源配置 [] 是 (至少一个)

抓取源配置 (scrape.sources[])

描述每个要抓取的源。

字段 类型 描述 默认值 是否必需
scrape.sources[].interval time.Duration 抓取此特定源的频率。覆盖全局 scrape.interval 全局 interval
scrape.sources[].name string 源的名称。用于标记 Feed。
scrape.sources[].labels map[string]string 附加到此源 Feed 的额外键值标签。 {}
scrape.sources[].rss object 此源的 RSS 配置。详见下方的 抓取源 RSS 配置。每个源只能设置一种类型 (例如 RSS)。 nil 是 (如果源类型是 RSS)

抓取源 RSS 配置 (scrape.sources[].rss)

字段 类型 描述 默认值 是否必需
scrape.sources[].rss.url string RSS Feed 的完整 URL。例如 http://localhost:1200/github/trending/daily/any。如果设置了 rsshub_route_path 则不能设置此项。 是 (除非设置了 rsshub_route_path)
scrape.sources[].rss.rsshub_route_path string RSSHub 路由路径。例如 github/trending/daily/any。将与 scrape.rsshub_endpoint 拼接成最终 URL。如果设置了 url 则不能设置此项。 是 (除非设置了 url, 且需要 rsshub_endpoint)

存储配置 (storage)

字段 类型 描述 默认值 是否必需
storage.dir string 所有存储的基础目录。应用运行后不可更改。 ./data
storage.feed object Feed 存储配置。详见下方的 Feed 存储配置 (见具体字段)
storage.object object 对象存储配置,用于存储播客等文件。详见下方的 对象存储配置 (见具体字段)

Feed 存储配置 (storage.feed)

字段 类型 描述 默认值 是否必需
storage.feed.rewrites 对象列表 在存储每个 Feed 之前如何处理它。受 Prometheus relabeling 启发。详见下方的 重写规则配置 []
storage.feed.flush_interval time.Duration 将 Feed 存储刷新到数据库的频率。更高的值会带来更高的数据丢失风险,但能减少磁盘操作并提高性能。 200ms
storage.feed.embedding_llm string 用于 Feed Embedding 的 LLM 名称 (来自 llms 部分)。显著影响语义搜索的准确性。注意: 如果要切换,请注意保留旧的 LLM 配置,因为过去的数据仍隐式关联它,否则会导致过去的数据无法进行语义搜索。 llms 部分中的默认 LLM
storage.feed.retention time.Duration Feed 的保留时长。 8d
storage.feed.block_duration time.Duration 每个基于时间的 Feed 存储块的保留时长 (类似于 Prometheus TSDB Block)。 25h

对象存储配置 (storage.object)

字段 类型 描述 默认值 是否必需
storage.object.endpoint string 对象存储的端点。 是 (如果使用播客功能)
storage.object.access_key_id string 对象存储的 Access Key ID。 是 (如果使用播客功能)
storage.object.secret_access_key string 对象存储的 Secret Access Key。 是 (如果使用播客功能)
storage.object.bucket string 对象存储的存储桶名称。 是 (如果使用播客功能)
storage.object.bucket_url string 对象存储的桶访问 URL。

重写规则配置 (storage.feed.rewrites[])

定义在存储前处理 Feed 的规则。规则按顺序应用。

字段 类型 描述 默认值 是否必需
...rewrites[].if 字符串列表 用于匹配 Feed 的条件配置。如果未设置,则表示匹配所有 Feed。类似于标签过滤器例如 ["source=github", "title!=xxx"]。如果条件不满足,则跳过此规则。 [] (匹配所有)
...rewrites[].source_label string 用作转换源文本的 Feed 标签。默认标签包括: type, source, title, link, pub_time, content content
...rewrites[].skip_too_short_threshold *int 如果设置,source_label 文本长度低于此阈值的 Feed 将被此规则跳过 (处理将继续进行下一条规则,如果没有更多规则则进行 Feed 存储)。有助于过滤掉过短/信息量不足的 Feed。 300
...rewrites[].transform object 配置如何转换 source_label 文本。详见下方的 重写规则转换配置。如果未设置,则直接使用 source_label 文本进行匹配。 nil
...rewrites[].match string 用于匹配 (转换后) 文本的简单字符串。不能与 match_re 同时设置。 否 (使用 matchmatch_re)
...rewrites[].match_re string 用于匹配 (转换后) 文本的正则表达式。 .* (匹配所有) 否 (使用 matchmatch_re)
...rewrites[].action string 匹配时执行的操作: create_or_update_label (使用匹配/转换后的文本添加/更新标签), drop_feed (完全丢弃该 Feed)。 create_or_update_label
...rewrites[].label string 要创建或更新的 Feed 标签名称。 是 (如果 actioncreate_or_update_label)
...transform.to_text object 使用 LLM 将源文本转换为文本。详见下方的 重写规则转换为文本配置 nil
...transform.to_podcast object 将源文本转换为播客。详见下方的 重写规则转换为播客配置 nil

重写规则转换为文本配置 (storage.feed.rewrites[].transform.to_text)

此配置定义了如何将 source_label 的文本进行转换。

字段 类型 描述 默认值 是否必需
...to_text.type string 转换的类型。可选值:
  • prompt (默认): 使用 LLM 和指定的 Prompt 转换源文本。
  • crawl: 将源文本视为 URL直接抓取该 URL 指向的网页内容,并将其转换为 Markdown 格式。此方式为本地抓取,会尝试遵循 robots.txt
  • crawl_by_jina: 将源文本视为 URL通过 Jina AI Reader API 抓取和处理网页内容,并返回 Markdown。功能可能更强大例如处理动态页面但依赖 Jina AI 服务。
prompt
...to_text.llm string 仅当 typeprompt 时有效。 用于转换的 LLM 名称 (来自 llms 部分)。如果未指定,将使用在 llms 部分中标记为 default: true 的 LLM。 llms 部分中的默认 LLM
...to_text.prompt string 仅当 typeprompt 时有效。 用于转换的 Prompt。源文本将被注入。可以使用 Go 模板语法引用内置 Prompt: {{ .summary }}, {{ .category }}, {{ .tags }}, {{ .score }}, {{ .comment_confucius }}, {{ .summary_html_snippet }}, {{ .summary_html_snippet_for_small_model }} 是 (如果 typeprompt)

重写规则转换为播客配置 (storage.feed.rewrites[].transform.to_podcast)

此配置定义了如何将 source_label 的文本转换为播客。

字段 类型 描述 默认值 是否必需
...to_podcast.llm string 用于生成播客稿件的 LLM 名称 (来自 llms 部分)。 llms 部分中的默认 LLM
...to_podcast.transcript_additional_prompt string 附加到播客稿件生成 Prompt 的额外指令。
...to_podcast.tts_llm string 用于文本转语音 (TTS) 的 LLM 名称 (来自 llms 部分)。注意:目前仅支持 providergemini 的 LLM llms 部分中的默认 LLM
...to_podcast.speakers 对象列表 播客的演讲者列表。详见下方的 演讲者配置 []

演讲者配置 (...to_podcast.speakers[])

字段 类型 描述 默认值 是否必需
...speakers[].name string 演讲者的名字。
...speakers[].role string 演讲者的角色描述 (人设)。
...speakers[].voice string 演讲者的声音。

调度配置 (scheduls)

定义查询和监控 Feed 的规则。

字段 类型 描述 默认值 是否必需
scheduls.rules 对象列表 用于调度 Feed 的规则列表。每个规则的结果 (匹配的 Feed) 将被发送到通知路由。详见下方的 调度规则配置 []

调度规则配置 (scheduls.rules[])

字段 类型 描述 默认值 是否必需
scheduls.rules[].name string 规则的名称。
scheduls.rules[].query string 用于查找相关 Feed 的语义查询。可选。
scheduls.rules[].threshold float32 相关性得分阈值 (0-1),用于过滤语义查询结果。仅在设置了 query 时有效。 0.6
scheduls.rules[].label_filters 字符串列表 基于 Feed 标签的过滤器 (等于或不等于)。例如 ["category=tech", "source!=github"] []
scheduls.rules[].labels map[string]string 附加到此源 Feed 的额外键值标签。 {}
scheduls.rules[].every_day string 相对于每天结束时间的查询范围。格式: start~end (HH:MM)。例如, 00:00~23:59 (今天), -22:00~07:00 (昨天 22:00 到今天 07:00)。不能与 watch_interval 同时设置。 否 (使用 every_daywatch_interval)
scheduls.rules[].watch_interval time.Duration 运行查询的频率。例如 10m。不能与 every_day 同时设置。 10m 否 (使用 every_daywatch_interval)

通知配置 (notify)

字段 类型 描述 默认值 是否必需
notify.route object 主通知路由配置。详见下方的 通知路由配置 (见具体字段)
notify.receivers 对象列表 定义通知接收者 (例如电子邮件地址)。详见下方的 通知接收者配置 [] 是 (至少一个)
notify.channels object 配置通知渠道 (例如电子邮件 SMTP 设置)。详见下方的 通知渠道配置 (见具体字段) 是 (如果使用渠道)

通知路由配置 (notify.routenotify.route.sub_routes[])

此结构可以使用 sub_routes 进行嵌套。Feed 会首先尝试匹配子路由;如果没有子路由匹配,则应用父路由的配置。

字段 类型 描述 默认值 是否必需
...matchers (仅子路由) 字符串列表 标签匹配器,用于确定 Feed 是否属于此子路由。例如 ["category=tech", "source!=github"] [] 是 (仅子路由)
...receivers 字符串列表 接收者的名称列表 (在 notify.receivers 中定义),用于发送匹配此路由的 Feed 的通知。 [] 是 (至少一个)
...group_by 字符串列表 在发送通知前用于对 Feed 进行分组的标签列表。每个分组会产生一个单独的通知。例如 ["source", "category"] [] 是 (至少一个)
...source_label string 从每个 Feed 中提取内容并进行总结的源标签。默认为所有标签。强烈建议设置为 'summary' 以减少上下文长度。 所有标签
...summary_prompt string 用于总结每个分组的 Feed 的 Prompt。
...llm string 使用的 LLM 的名称。默认为 llms 部分中的默认 LLM。建议使用上下文长度较大的 LLM。 llms 部分中的默认 LLM
...compress_by_related_threshold *float32 如果设置,则根据语义相关性压缩分组内高度相似的 Feed仅发送一个代表。阈值 (0-1),越高表示越相似。 0.85
...sub_routes 对象列表 嵌套路由列表。允许定义更具体的路由规则。每个对象遵循 通知路由配置 []

通知接收者配置 (notify.receivers[])

定义接收通知。

字段 类型 描述 默认值 是否必需
notify.receivers[].name string 接收者的唯一名称。在路由中使用。
notify.receivers[].email string 接收者的电子邮件地址。 是 (如果使用 Email)
notify.receivers[].webhook object 接收者的 Webhook 配置。例如: webhook: { "url": "xxx" } 是 (如果使用 Webhook)

通知渠道配置 (notify.channels)

配置通知如何发送。

字段 类型 描述 默认值 是否必需
notify.channels.email object 全局 Email 渠道配置。详见下方的 通知渠道 Email 配置 nil 是 (如果使用 Email)

通知渠道 Email 配置 (notify.channels.email)

字段 类型 描述 默认值 是否必需
...email.smtp_endpoint string SMTP 服务器端点。例如 smtp.gmail.com:587
...email.from string 发件人 Email 地址。
...email.password string 发件人 Email 的应用专用密码。(对于 Gmail, 参见 Google 应用密码)。
...email.feed_markdown_template string 用于在 Email 正文中格式化每个 Feed 的 Markdown 模板。默认渲染 Feed 内容。不能与 feed_html_snippet_template 同时设置。可用的模板变量取决于 Feed 标签。 {{ .content }}
...email.feed_html_snippet_template string 用于格式化每个 Feed 的 HTML 片段模板。不能与 feed_markdown_template 同时设置。可用的模板变量取决于 Feed 标签。