Horizon 完整配置指南:5 步跑通 AI 新闻雷达日报管道

发布时间:2026/11/4 11:11:35
Horizon 完整配置指南:5 步跑通 AI 新闻雷达日报管道

Horizon 完整配置指南:5 步跑通 AI 新闻雷达日报管道

【免费下载链接】Horizon📡 Your own AI-powered news radar. Generates daily briefings in English & Chinese. | 用 AI 构建你专属的新闻雷达项目地址: https://gitcode.com/gh_mirrors/horizon39/Horizon

早上要花一小时刷 20 个网站找行业新闻的,缺的不是时间,是过滤器。Horizon 是一个 AI 新闻雷达:它按你配置的信息源抓取 RSS、Hacker News、Reddit 等内容,交给 AI 模型评分和总结,再按data/config.json里的推送设置,把中英双语日报送到你的邮箱或飞书群。下面按"原理 → 配置拆解 → 跑通步骤 → 调优 → 排错"的顺序讲清楚。

Horizon 工作原理:信息源到日报的生成链路 📡

一次uv run horizon的执行链路是:先按collection.time_window_hours定义的时间窗从各信息源抓取条目;每条内容被路由到一个处理档案(tech-news、tech-blog、finance-news等),由该档案的评分规则打 0–10 分;达到你设定阈值的条目进入下一轮,先做主题去重,再按分类配额选出最终条目;然后 AI 对入选条目做富化总结,按ai.languages生成 Markdown 日报,落到data/summaries/;最后按 email、webhook、wechat 配置推送。理解这条链路后,你就知道每个配置字段卡在哪个环节上。

Horizon config.json 逐项拆解:模型、信息源、过滤与推送

AI 模型与 API 密钥配置

ai段决定用哪个模型来评分和总结。api_key_env填的是环境变量名而不是密钥本身,密钥放在.env里。

"ai": { "provider": "openai", "model": "gpt-4", "api_key_env": "OPENAI_API_KEY", "temperature": 0.3, "throttle_sec": 0 }
  • 支持的 provider 包括openai、anthropic、gemini、azure、minimax、ali(通义)、ollama,各有对应的api_key_env变量名
  • 走代理或私有网关时加base_url字段即可,密钥仍不进 JSON 文件
  • 本地模型用provider: "ollama",api_key_env留空,base_url指向你的 Ollama 地址

添加 RSS、Hacker News 与 Reddit 信息源

信息源全部在sources段下,每种源独立启停,互不影响。以 RSS 为例,一条订阅就是一个对象:

"rss": [ { "name": "My Blog", "url": "https://example.com/feed.xml", "enabled": true, "category": "ai-ml", "profile": "auto" } ]
  • category是你自定义的分类标签,后面digest.category_groups会用它做配额
  • profile指定该源归哪个档案评分;"auto"或省略则交给 AI 匹配
  • Hacker News、Reddit 等结构化源同样支持限流字段,直接控制抓取量:
{ "hackernews": { "enabled": true, "fetch_top_stories": 20, "min_score": 100 }, "reddit": { "enabled": true, "subreddits": [{ "subreddit": "MachineLearning", "sort": "hot", "fetch_limit": 15, "min_score": 50 }] } }

设置 AI 评分阈值与抓取时间窗

评分阈值是整条管道里最像"信息过滤器"的开关:每个档案一个threshold,低于分数的条目不进日报,topic_dedup控制同主题是否合并。

{ "processing": { "default_profile": "tech-news", "profile_settings": { "tech-news": { "threshold": 7.0, "topic_dedup": true } } }, "collection": { "time_window_hours": 24 } }
  • threshold支持 0–10,设为null表示只评分不过滤,适合先观察分数分布
  • 内置档案默认值有差异:tech-news7.0 偏严,tech-blog4.0 偏宽,可按口味覆盖
  • time_window_hours决定只抓最近 N 小时的内容,窗口太大会让评分成本线性上涨

邮件订阅与飞书 Webhook 推送

email段用 SMTP 发日报,用 IMAP 检查订阅/退订邮件,适合团队内部分发:

"email": { "enabled": true, "smtp_server": "smtp.qq.com", "smtp_port": 465, "email_address": "your@email.com", "password_env": "EMAIL_PASSWORD", "sender_name": "Horizon Daily" }
  • password_env同样指向环境变量名,密码写进.env
  • 只发不收的 SMTP 服务商把imap_enabled设为false
  • 收件人通过向email_address发主题含SUBSCRIBE的邮件自助订阅

webhook段把日报推到飞书、钉钉、Slack 等群机器人:

"webhook": { "enabled": true, "url_env": "HORIZON_WEBHOOK_URL", "platform": "feishu", "layout": "collapsible", "languages": ["zh"] }
  • url_env指向存放机器人 URL 的环境变量,密钥类信息不落 JSON
  • 飞书想渲染成折叠卡片就platform: "feishu"+layout: "collapsible";其他平台用layout: "markdown"
  • delivery选summary(一条完整消息)或summary_and_items(总览 + 每条新闻单独一条),后者适合对长消息限制严格的平台
  • languages只作用于 webhook,例如["zh"]只推中文版日报

用环境变量保护敏感值

配置里任何字符串字段都支持${VAR_NAME}语法,运行时从环境变量(含.env)展开。付费 RSS、私有网关地址、webhook 鉴权头都能借此脱敏:

"sources": { "rss": [ { "name": "Paid Feed", "url": "https://example.com/feed?key=${FEED_KEY}", "enabled": true } ] }

对应地,把真实值写进仓库根目录的.env:

OPENAI_API_KEY=sk-YOUR_API_KEY FEED_KEY=YOUR_FEED_KEY HORIZON_WEBHOOK_URL=https://example.com/hook
  • 未设置的变量会原样保留为${NAME},让配置错误显式暴露而不是变成空字符串
  • 这样config.json可以放心提交版本控制,.env加入.gitignore

从零跑通 Horizon 配置流程

  1. 克隆仓库:git clone https://gitcode.com/gh_mirrors/horizon39/Horizon
  2. 生成配置:uv run horizon-wizard(按兴趣问答,自动生成data/config.json;也可手动cp data/config.example.json data/config.json)
  3. 把 API 密钥写入仓库根目录的.env,变量名与api_key_env一致
  4. 打开data/config.json,确认 AI provider 和想启用的信息源,其余源保持enabled: false
  5. 验证:uv run horizon --hours 1

最后一步只抓取最近 1 小时内容,终端会依次输出各源抓取数、AI 评分进度,收尾显示"入选 N / 抓取 M 条",日报 Markdown 落在data/summaries/。看到这条输出,配置就算跑通了。

Horizon 进阶调优:并发限流、双语日报与自定义评分 🔧

并发与限流控制 API 节奏

把ai.throttle_sec改为 4.5(约每分钟 13 次的免费档限速),analysis_concurrency提高到 4,效果是评分吞吐上去了但不会触发 429;配额充足时把throttle_sec改回 0 拿最大速度。

"ai": { "throttle_sec": 4.5, "analysis_concurrency": 4, "enrichment_concurrency": 2 }

双语日报设置

把ai.languages改成["en", "zh"],日报、webhook、wechat 各渠道都会同步生成两种语言版本;只想要单一语言时改成["zh"],或省略它只用默认的["en"]。

"ai": { "languages": ["en", "zh"] }

自定义评分标准

改processing.profile_settings里对应档案的threshold可以快速调松紧;想改"什么算高分"本身,编辑profiles/<档案>/analysis.md中的评分规则(rubric),例如把"工程深度文章"从 7 分档提到 9 分档,当天即生效。

微信渠道长文拆分

开启wechat.enabled: true并设chunk_size: 4000,长日报会按段落边界拆成多条微信消息发送;先用uv run horizon-wechat login扫码绑定机器人。

"wechat": { "enabled": true, "languages": ["zh"], "chunk_size": 4000 }

Horizon 配置排错速查:5 个高频问题

现象原因修复
启动即报 JSON 解析错误config.json多了或少了逗号用任意 JSON 校验工具检查,data/config.example.json是结构基准
AI 评分全部认证失败api_key_env填的是变量名,但.env里没这个变量或名字不一致核对.env中的变量名与配置完全一致后重跑
飞书收到的是纯文本而非卡片platform/layout组合不对设platform: "feishu"且layout: "collapsible"
Twitter 源抓取失败或被限流缺少 cookie 文件或 cookie 过期按docs/twitter-cookies.md导出 cookie 保存为data/x_cookies_1.json,多账号可建多个文件轮询
日报条目少得可怜阈值过高或时间窗太窄调低profile_settings中的threshold(或设null观察分数),同时调大collection.time_window_hours

Horizon 延伸资源:文档与源码目录

  • 完整配置参考 —— 所有字段、provider 示例与推送模板变量
  • 评分体系与管道说明 —— 打分分档、去重与配额执行的顺序
  • 内置处理档案 ——tech-news等档案的match.md/analysis.md/enrichment.md提示词
  • 信息源抓取器源码 —— 每种源的实现,加新源从这里入手
  • AI 分析与总结源码 —— 评分、富化、翻译的调用链

下一步建议:先用 1 个 RSS 源加一个 4.0 的宽阈值跑一轮完整管道,确认日报内容形态符合预期,再逐源开启、逐步收紧threshold。

【免费下载链接】Horizon📡 Your own AI-powered news radar. Generates daily briefings in English & Chinese. | 用 AI 构建你专属的新闻雷达项目地址: https://gitcode.com/gh_mirrors/horizon39/Horizon

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考