| 字段 |
类型 |
描述 |
默认值 |
是否必需 |
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) |
| 字段 |
类型 |
描述 |
默认值 |
是否必需 |
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 同时设置。 |
|
否 (使用 match 或 match_re) |
...rewrites[].match_re |
string |
用于匹配 (转换后) 文本的正则表达式。 |
.* (匹配所有) |
否 (使用 match 或 match_re) |
...rewrites[].action |
string |
匹配时执行的操作: create_or_update_label (使用匹配/转换后的文本添加/更新标签), drop_feed (完全丢弃该 Feed)。 |
create_or_update_label |
否 |
...rewrites[].label |
string |
要创建或更新的 Feed 标签名称。 |
|
是 (如果 action 是 create_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 |
仅当 type 为 prompt 时有效。 用于转换的 LLM 名称 (来自 llms 部分)。如果未指定,将使用在 llms 部分中标记为 default: true 的 LLM。 |
llms 部分中的默认 LLM |
否 |
...to_text.prompt |
string |
仅当 type 为 prompt 时有效。 用于转换的 Prompt。源文本将被注入。可以使用 Go 模板语法引用内置 Prompt: {{ .summary }}, {{ .category }}, {{ .tags }}, {{ .score }}, {{ .comment_confucius }}, {{ .summary_html_snippet }}, {{ .summary_html_snippet_for_small_model }}。 |
|
是 (如果 type 是 prompt) |
重写规则转换为播客配置 (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 部分)。注意:目前仅支持 provider 为 gemini 的 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_day 或 watch_interval) |
scheduls.rules[].watch_interval |
time.Duration |
运行查询的频率。例如 10m。不能与 every_day 同时设置。 |
10m |
否 (使用 every_day 或 watch_interval) |
通知配置 (notify)
| 字段 |
类型 |
描述 |
默认值 |
是否必需 |
notify.route |
object |
主通知路由配置。详见下方的 通知路由配置。 |
(见具体字段) |
是 |
notify.receivers |
对象列表 |
定义通知接收者 (例如电子邮件地址)。详见下方的 通知接收者配置。 |
[] |
是 (至少一个) |
notify.channels |
object |
配置通知渠道 (例如电子邮件 SMTP 设置)。详见下方的 通知渠道配置。 |
(见具体字段) |
是 (如果使用渠道) |
通知路由配置 (notify.route 及 notify.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 标签。 |
|
否 |