这条科技新闻凭什么拿 8 分?Horizon tech-news 评分体系完整拆解
【免费下载链接】Horizon📡 Your own AI-powered news radar. Generates daily briefings in English & Chinese. | 用 AI 构建你专属的新闻雷达项目地址: https://gitcode.com/gh_mirrors/horizon39/Horizon
为什么这条新闻被打了 8 分,而那条只有 3 分?它凭什么能进你的日报?Horizon 是一个用 AI 构建的新闻雷达,会把 GitHub、Hacker News、RSS、Reddit 等来源抓来的内容逐条打分、筛选,最终生成中英文日报。而决定一条内容"生死"的,就是它内置的tech-news(科技新闻)画像的评分体系。
先给结论:tech-news用 0–10 分给"及时的科技新闻"定级,分数由 AI 按一套固定量表打出;再对照你在配置里设的阈值(示例配置默认 7.0)决定放行与否。关键数字一次看全:
| 项目 | 默认值 / 取值 | 在哪 |
|---|---|---|
| 分数档位 | 9–10 开创性,7–8 高价值,5–6 有趣,3–4 低优先级,0–2 噪音 | profiles/tech-news/analysis.md |
过滤阈值threshold | 0–10 的数字,null表示只评分不过滤;示例配置为 7.0 | data/config.example.json |
画像内主题去重topic_dedup | 默认开启 | 同上 |
| 标签数量 | 3–5 个具体主题标签 | analysis.md |
| 进入评分模型的正文窗口 | 约 1000 字符(可配 500–100000) | src/processing/profiles.py |
这条新闻该不该由 tech-news 来打分
打分之前先有个前置问题:这条内容到底适不适合用tech-news来评?规则写在 profiles/tech-news/match.md 里,思路很直白:
- 适用:软件工程、AI/机器学习、计算机系统、硬件、开源与科技行业的"及时进展"——实质性版本发布、研究突破、安全事件、行业公告、绑定近期事件的技术分析。
- 不适用:完整长文论证、逐步教程、整篇学术论文(这类走
tech-blog);金融/市场视角优先的内容(走finance-news);例行更新和纯推广。
你可以把它理解成一道分诊台:新闻是"事件驱动"的,博客是"论述驱动"的。所以同一条消息,如果是"vLLM 发布了 0.4 大版本",进tech-news;如果是"vLLM 调度器原理深度剖析",就该进tech-blog。每个来源在配置里可以显式指定profile,不指定时 AI 会用各画像的 match 规则自动归类,归类失败则回落到默认画像tech-news。
评分对象也由此定死:它评的是"对软件工程师、AI/ML 从业者、硬件与开源圈读者而言,这条新闻有多重要"。注意关键词是"重要性",不是"热度"——这是整个体系的锚点。
一条新闻怎么从内容走到某个分数
评分量表就五档,analysis.md 里的原文语义如下:
| 分数 | 档位 | 什么样的内容 |
|---|---|---|
| 9–10 | 开创性 | 重大突破、范式转移、广泛使用技术的大版本、行业级公告 |
| 7–8 | 高价值 | 值得立刻关注的进展:技术深析、新颖方法、有价值的工具 |
| 5–6 | 有趣 | 渐进式改进、实用教程、中等社区关注——值得知道但不急 |
| 3–4 | 低优先级 | 例行更新、常识复述、浅尝辄止、推广为主 |
| 0–2 | 噪音 | 垃圾信息、离题、琐碎更新、纯宣传 |
拿一张真实日报走一遍(就是开头那张截图):
- "Cloudflare 和 OpenAI 发布面向企业 AI agent 部署的 Agent Cloud(GPT-5.4)"——9 分。这是改变行业格局的平台级公告,命中 9–10 档的"行业级公告"。
- "GitHub 推出 stacked PRs 管理依赖型 Pull Request"——8 分。不是范式转移,但对你日常工作方式有直接改变,属于"值得立即关注的重要进展"。
- 一条普通的 patch release 或"XX 框架更新日志"——大概率落在 3–4 分:例行更新,没有增量信息。
分数怎么定,AI 会综合看七个方面:技术深度、新颖性、潜在影响、来源质量(官方公告/代码仓库/论文,还是二手转述)、与软件工程及 AI 系统的相关性、有没有可核验的具体细节(版本号、数字、兼容性),以及社区讨论——但最后这条有明确限制:实质性争论算额外证据,热度本身不算技术重要性,夸大标题一律不加分。换句话说,一篇 10 万赞的标题党推文不会因此多拿一分。
两个实操细节值得知道:
- 模型看到的不是全文。正文按画像配置的窗口截取(
tech-news约 1000 字符,默认取开头部分;长文也可配成"开头+中间+结尾"三段采样),评论另截最多 1500 字符,外加点赞/评论数等互动元数据,一起拼成评分输入。这是控制成本和延迟的关键设计,评分本质上是"受控采样下的判断"。 - 输出是强契约。AI 必须返回一个 JSON:
score(0–10)、reason、一句话summary、3–5 个tags。契约定义在 src/ai/prompting/analysis.py,tags会参与后续的分类分组与去重,所以要求"具体"——ai-agent-deployment这种粒度,而不是宽泛的tech。
分数出来之后:阈值、去重与四个增强板块
分数本身不直接决定结果,它要过三道关卡。
第一道:阈值。在processing.profile_settings里给tech-news设threshold,score >= threshold的条目才继续往下走,否则丢弃。示例配置是 7.0(data/config.example.json),docs/scoring.md 里另有一个 8.0 的更严示例。阈值怎么设才不丢好内容?一个实用判断:7.0 会放进"高价值"档的全部内容(深度技术文、新工具);8.0 则只留 8 分及以上,日报更精但会漏掉不少优质 7 分项。设null或整个省略,就只评分不过滤。
第二道:去重。topic_dedup默认开启,同一主题在画像内只保留最有代表性的一条——否则一个热点事件可能以五个来源的形态霸屏。
第三道:增强。活下来的条目按 profiles/tech-news/enrichment.md 加工成日报条目,profile.json声明了四个板块:
| 板块 | 可否用工具 | 必填? | 干什么 |
|---|---|---|---|
summary | 无 | 必填(主体) | 2–4 句讲清"发生了什么、对谁有影响",含版本、数字、可用性等关键细节 |
background | history_search、web_search | 必填 | 1–3 句前置背景,解释读懂这条新闻所需的上下文 |
impact | web_search | 可选 | 一条有证据支撑的具体后果,没有就整个省略 |
community_discussion | 无 | 可选 | 1–2 句概括评论里有价值的分歧或一手经验 |
评分规则在这里被"执行"了一遍:summary要求区分"厂商宣布"和"实测结果",对应评分时看"来源质量";impact必须有证据,对应"热度不等于重要性";工具也只能在板块声明的范围内使用,不能越权。
这些规则怎么保证真的被执行
评分体系最怕的是"文档说一套、代码跑一套"。Horizon 用测试和数据结构把契约钉死了,核心在 tests/test_profiles.py:
- 加载即校验:
ProfileRegistry.load以tech-news为默认画像加载全部内置画像,match、analysis、enrichment三份提示词必须非空;impact板块必须声明为可选。 - 数值边界:数据模型 src/models.py 中
ContentAnalysis的score被约束在 0–10 且禁止 NaN/Inf;配置侧-0.1和10.1的阈值直接抛校验错误,改错配置会在启动阶段被发现,而不是跑到一半。 - 非法输入全拒绝:候选画像列表为空、重复、混入
auto、指向未知画像,逐一测试覆盖;提示词文件指向画像目录之外会被"路径逃逸"检查拦下。 - 运行时兜底:src/ai/analyzer.py 里,模型首次输出若不符合 JSON 契约,会用 temperature=0 自动重试一次修复;仍失败则该条以空分数落库并记录告警,而不是让整个日报崩溃。AI 调用本身还套了指数退避重试(最多 3 次)。
换句话说:你改 analysis.md 里的量表,管线行为会随提示词同步变化;你写错任何配置,加载阶段就会报错。
上手三步
- 先跑默认配置:复制 data/config.example.json 为本地配置,
threshold: 7.0+topic_dedup: true是稳妥起点。跑一两天日报,看被 7 分线拦掉的内容里有没有你其实想看的,再决定是否降到 6.0 或升到 8.0。 - 按来源微调画像路由:在
sources里给每个来源显式指定profile(示例配置里 RSS 已按站点分别指给tech-news/tech-blog/finance-news),比依赖自动归类更可控。 - 改规则前先想边界:想调松评分标准,改 profiles/tech-news/analysis.md 的量表措辞即可;但改完建议跑一遍 tests/test_profiles.py 确认加载与板块声明没被破坏——它正是为此而写的。
完整机制叙述可参阅 docs/scoring.md,画像整体 schema 见 docs/profiles.md。
【免费下载链接】Horizon📡 Your own AI-powered news radar. Generates daily briefings in English & Chinese. | 用 AI 构建你专属的新闻雷达项目地址: https://gitcode.com/gh_mirrors/horizon39/Horizon
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考