| 字段 | 类型 | 描述 | 默认值 | 是否必需 | | :---------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------- | :------------- | | `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](https://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://docs.rsshub.app/guide/instances))。例如 `https://rsshub.app`。 | | 是 (如果使用了 `rsshub_route_path`) | | `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` 同时设置。 | | 否 (使用 `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` | 转换的类型。可选值: