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

227 lines
36 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
| 字段 | 类型 | 描述 | 默认值 | 是否必需 |
| :---------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------- | :------------- |
| `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.rsshub_access_key` | `string` | RSSHub 的访问密钥。用于访问控制。(详情见 [RSSHub文档访问控制](https://docs.rsshub.app/deploy/config#access-control-configurations)) | | 否 |
| `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` | 转换的类型。可选值:<ul><li>`prompt` (默认): 使用 LLM 和指定的 Prompt 转换源文本。</li><li>`crawl`: 将源文本视为 URL直接抓取该 URL 指向的网页内容,并将其转换为 Markdown 格式。此方式为本地抓取,会尝试遵循 `robots.txt`。</li><li>`crawl_by_jina`: 将源文本视为 URL通过 [Jina AI Reader API](https://jina.ai/reader/) 抓取和处理网页内容,并返回 Markdown。功能可能更强大例如处理动态页面但依赖 Jina AI 服务。</li></ul> | `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 应用密码](https://support.google.com/mail/answer/185833))。 | | 是 |
| `...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 标签。 | | 否 |