信号评分流水线:确定性知识分诊
大多数知识管理靠的是感觉。你保存一条笔记是因为它”感觉很重要”。六个月后你有了7,000条笔记,却不知道哪些真正重要。我构建了一个确定性评分流水线来告诉我答案。
这个系统是733行 Python 代码。它对每条传入信号从四个加权维度进行评分,计算综合得分,然后将信号路由到12个领域文件夹之一、收件箱待人工审核、或者直接丢弃。无需手动打标签。没有永远不会发生的”稍后审核”。算法说了算。
摘要
一个加权综合评分(相关性35%、可操作性30%、深度20%、权威性15%)为每条信号生成0.0-1.0的评级。路由使用三个阈值:>= 0.55自动写入领域文件夹,>= 0.30排队等待人工审核,< 0.30静默跳过。14个月内处理了7,700+条笔记,其中开发(2,837)和设计(1,709)主导了分布。最有趣的缺陷:深度维度衡量的是元数据丰富度,而非内容质量——因此一条关于花朵照片的、标签完善的推文也能得到0.85分。
凭感觉的问题
我使用 Obsidian 作为知识库。信号来源于 RSS 订阅、Twitter 书签、GitHub star、电子报和手动采集。在流水线建立之前,每条信号都进入同一个收件箱文件夹。两个月内就积累了400+条未处理的笔记。
标准建议(”每周回顾,随手打标签,使用文件夹体系”)假设回顾真的会发生。然而并不会。收件箱变成了只写的:条目进得去却出不来。你已捕获的知识在功能上与你从未捕获的知识毫无区别。Clay Shirky 精确地定义了这个问题:”这不是信息过载,而是过滤失败。”8
我需要一个系统,能比我阅读更快地评估7,700+条笔记,使用我只需定义一次并统一应用的标准。不是推荐引擎,而是评分算法。
综合评分
评分公式是四个维度的加权线性组合,这是多准则决策分析(MCDA)中的标准方法:9
composite = (
relevance * 0.35 +
actionability * 0.30 +
depth * 0.20 +
authority * 0.15
)
每个维度产生一个介于0.0和1.0之间的浮点数。公式将综合分四舍五入到三位小数。权重反映了一个刻意的优先级顺序:与我相关的(相关性)优先于我能用的(可操作性),后者优先于元数据有多丰富(深度),深度又优先于来源有多可信(权威性)。1
四个维度
相关性(35%):兴趣匹配
相关性使用一个手工整理的关键词词典,包含40+个条目,每个条目的评分从0.15(nft)到1.0(claude code、swiftui)不等。评分混合了最佳匹配与所有匹配的平均值:
# 60% best match, 40% average of all matches
return min(1.0, best_score * 0.6 + avg_score * 0.4)
零匹配项获得0.25的基线分,而非0.0。系统对未知主题的惩罚比对不相关主题更轻。基线是最常调优的参数:设太高则不相关内容涌入收件箱,设太低则真正的新兴趣在我看到之前就被过滤掉了。2
可操作性(30%):学习潜力
可操作性匹配22个面向行动的关键词:tutorial、guide、how-to、build、github.com。URL 会得到特殊处理:
if "github.com" in url:
hits += 2 # Repositories are inherently actionable
if "/docs" in url or "/tutorial" in url:
hits += 1
评分基于阶梯函数而非线性:0命中 → 0.10,1命中 → 0.40,2命中 → 0.60,3+命中 → min(1.0, 0.70 + hits * 0.05)。阶梯函数奖励可操作性信号的存在而非其数量。一个教程链接的价值远大于三个关键词和四个关键词之间的差异。3
深度(20%):元数据丰富度
深度是纯结构性的。它衡量字段的存在与长度,而非内容质量:
| 信号 | 分数 |
|---|---|
| 有标题 | +0.20 |
| 有描述 | +0.20 |
| 描述 > 50字符 | +0.15 |
| 描述 > 150字符 | +0.15 |
| 有标签 | +0.15 |
| 有3+个标签 | +0.10 |
| 有 URL | +0.05 |
| 最高分 | 1.00 |
深度是我最不信任的维度。一条关于花朵照片的推文,如果有完整描述和四个标签,深度分可达0.85。丰富的元数据,不相关的内容。深度代表的是”来源提供了结构化数据”,这与质量相关但并不等同。4
权威性(15%):来源可信度
权威性从0.40的基线开始,按来源类型调整:
if source in ("twitter", "x"): score = 0.50
elif source in ("blog", "newsletter"): score = 0.60
elif source in ("github", "docs"): score = 0.70
域名白名单只会向上覆盖(绝不向下):github.com、anthropic.com、apple.com、arxiv.org、docs.python.org 等将权威性设置为至少0.75。白名单编码了一个判断:这些来源默认值得更高的信任。
阈值路由
三个路由区间决定了每条已评分信号的去向:
THRESHOLD_AUTO_WRITE = 0.55 # → domain folder
THRESHOLD_INBOX = 0.30 # → 00-Inbox (manual review)
# Below 0.30 → silently skipped
流水线将评分 >= 0.55的信号直接写入12个领域文件夹之一,领域通过标签和标题匹配推断。中等范围的信号(0.30-0.55)进入收件箱等待人工审核。低于0.30的信号永远不会进入知识库。
0.30-0.55的范围是”模糊区”,系统在此区间的置信度最低。可选的 --llm-triage 标志会将这些信号发送给 Claude 进行评估,Claude 可以将综合分调整最多±0.20,从而可能将信号推过自动写入阈值。Claude 只看到模糊信号,从不处理高分或低分信号。把 API 开销花在确定性评分器已经处理好的信号上是浪费。5
领域推断使用投票系统。每个标签映射到一个领域,标题中的每个关键词增加一票。得票最多的领域胜出。平票按字典排序打破(实际上是任意的)。默认兜底:”灵感”。
结果
14个月内处理了7,700+条笔记后:
| 领域 | 笔记数 | 占比 |
|---|---|---|
| 开发 | 2,837 | 36.8% |
| 设计 | 1,709 | 22.2% |
| 灵感 | 565 | 7.3% |
| Claude-Code | 414 | 5.4% |
| AI 工具 | 414 | 5.4% |
| 生产力 | 346 | 4.5% |
| 想法 | 296 | 3.8% |
| 科学 | 231 | 3.0% |
| 健康-生活 | 191 | 2.5% |
| 架构 | 142 | 1.8% |
| 创业 | 26 | 0.3% |
| 工具 | 22 | 0.3% |
| 收件箱 | 420 | 5.5% |
分布反映了现实。我消费的开发和设计内容远多于其他类别。收件箱项目(420条)代表了模糊区——算法无法自信地自动路由的信号。6
算法犯的错
深度陷阱
一条粉蝶花照片推文的评分为 综合分 0.36,相关性 0.25,可操作性 0.10,深度 0.85,权威性 0.50。它被路由到收件箱,因为深度(0.85)和权威性(0.50)弥补了近乎为零的相关性和可操作性。丰富的元数据,不相关的内容:一张漂亮的花朵照片。
这个例子揭示了元数据代理评分的根本局限。深度衡量的是”来源提供了结构化数据”,而非”内容有价值”。Twitter 为每条推文都提供完整的描述和标签。一条关于早餐的、标签完善的推文深度分也是0.85。信息检索研究将这种底层矛盾称为精确率/召回率权衡:优化召回率(捕获所有相关项目)不可避免地会放入误报。10
我考虑过但否决的修复方案: 将深度权重从0.20降至0.10会减少来自标签完善但不相关内容的误报,但也会惩罚来自元数据稀疏来源的真正有深度的内容。当前的权重是一种折中。
相关性基线问题
零匹配相关性的0.25基线意味着任何结构良好且来源合理的信号至少得到0.30分,从而进入收件箱。基线制造了一个误报下限:收件箱会积累标签完善、来源合理但与我的兴趣毫无关系的信号。
实际的解决方案: 定期的收件箱审核仍然不可少。流水线将审核面从7,700条缩减到420条(约95%的缩减),但无法消除对模糊区的人工审核。
实现说明
流水线作为 CLI 工具运行。输入是信号的 JSON 数组(来自 RSS、Twitter API 或手动录入)。输出是写入领域文件夹的兼容 Obsidian 的 markdown 文件。
python triage.py --input signals.json --vault ~/obsidian-signals/
python triage.py --input signals.json --vault ~/obsidian-signals/ --llm-triage
python triage.py --input signals.json --min-score 0.60 # Stricter routing
预过滤在评分之前运行:对已有知识库笔记进行 URL 去重、空内容过滤和噪声源黑名单。重复笔记和垃圾来源永远不会进入评分阶段。
评分函数是纯函数:无副作用、无 API 调用、无文件系统访问。每个函数接收一个信号字典并返回一个分数字典。这种纯函数设计使它们可以被独立测试,也可以与 LLM 分诊阶段组合——后者仅在模糊子集上运行。7
核心要点
给构建分诊系统的工程师:
-
确定性评分在规模上优于人工整理。 14个月内7,700条笔记。人工分诊需要50+小时的审核时间。流水线在几分钟内完成处理,自动路由率约95%(仅5.5%需要人工审核)。
-
元数据代理有已知的失效模式。 深度衡量的是结构,而非质量。权威性衡量的是来源,而非准确性。这两个代理在聚合层面有效,但在个体信号层面会产生可预测的误报。承认失效模式比声称算法”有效”更诚实。
给知识管理实践者:
-
加权综合评分暴露了你真实的优先级。 35/30/20/15的权重不是随意的。它们编码了一个具体的判断:相关性比可操作性重要,后者比元数据丰富度重要,元数据丰富度又比来源可信度重要。使权重显式且可调是系统与习惯之间的区别。
-
模糊区是不可消除的。 0.30到0.55之间的信号是真正模糊的:确定性评分器无法解决它们。LLM 分诊有所帮助但不能消除模糊区。对模糊子集的人工审核仍然不可少。
我将这篇文章定位为工程问题,而非生产力技巧。综合评分适用于任何需要确定性路由的领域:工单处理、内容审核、潜在客户评级、异常检测。我的具体权重和阈值编码的是个人优先级,但架构本身是通用的。关于积累的知识如何创造非线性价值,请参阅心智复利。OODA 循环与提示词工程探讨了一个相关模式:结构化观察作为直觉的替代。每个流水线组件(评分、路由、分诊)都独立有用,并与其他组件叠加增效,遵循复合工程模式。
-
我没有通过数学方法推导权重分布。我在六个月的使用中不断调优。初始权重是均等的(25/25/25/25)。在观察到高深度低相关性的信号(标签完善但不相关的内容)涌入收件箱后,相关性提升至35%。在观察到相关性高但无实际应用的理论性内容不断积累后,可操作性提升至30%。 ↩
-
零匹配相关性的0.25基线是一个刻意的设计选择。将其设为0.0意味着任何不在关键词列表中的信号最高只能得到0.65分(0 + 可操作性 + 深度 + 权威性,没有相关性贡献),使得真正的新主题几乎不可能达到自动写入阈值。 ↩
-
我为可操作性选择阶梯函数评分而非线性评分,是因为可操作性更接近布尔值而非连续变量。一个教程是可操作的。一篇关于教程的新闻报道不是。阶梯函数比渐变更好地捕捉了这种二元性质。 ↩
-
我最初将深度维度命名为”质量”,意图衡量内容丰富度。在观察到它实际衡量的是元数据丰富度后,我将其重命名为”深度”以反映其真实行为。这个名称变更是对该指标实际捕获内容的刻意诚实。 ↩
-
LLM 分诊使用 Claude Code CLI(
claude --print --model opus),配合一个结构化提示词来请求分数调整(-0.20到+0.20)和领域分类。作者估计成本:每条信号约$0.02-0.04。对全部7,700条信号运行 LLM 分诊成本为$150-300。仅对420条模糊信号运行成本为$8-17。 ↩ -
作者的领域分布数据截至2026年2月。计数反映自2024年12月以来的累计路由结果。分布自第三个月起趋于稳定,开发和设计始终占已路由信号的55-60%。 ↩
-
我选择纯评分函数是一个刻意的架构决策。替代方案(检查文件系统是否重复或调用 API 进行信息补充的评分函数)会更准确,但在没有 mock 的情况下无法测试。纯函数方法牺牲了一些准确性,换取了可测试性和可组合性。 ↩
-
Clay Shirky,”It’s Not Information Overload. It’s Filter Failure”,Web 2.0 Expo 主题演讲,2008年。youtube.com/watch?v=LabqeJEOQyI。Shirky 的框架直接适用:一个积累了400+条未处理笔记的收件箱不是信息过载,而是过滤的缺失。另见 Alvin Toffler,Future Shock,Random House,1970年,该书提出了”信息过载”概念——指暴露于过多信息时做决策的困难。 ↩
-
加权线性组合是多准则决策分析(MCDA)中的标准技术。此处的方法是简化的加权求和模型(WSM),MCDA 最古老的方法之一。关于推导综合评分权重的经典论述,参见 Saaty, T.L.,The Analytic Hierarchy Process,McGraw-Hill,1980年。关于此处使用的更简单的加法模型,参见 Fishburn, P.C.,”Additive Utilities with Incomplete Product Set”,Journal of Mathematical Psychology,4(1),pp. 104-110,1967年。 ↩
-
精确率/召回率权衡是信息检索中的基本概念。提高召回率(捕获更多相关项目)必然会放入更多不相关项目,降低精确率。深度维度通过奖励任何结构良好的信号来优化召回率,这就是为什么不相关但标签完善的内容也能通过阈值。参见 Manning, C.D.、Raghavan, P. & Schütze, H.,Introduction to Information Retrieval,Cambridge University Press,2008年,第8章。nlp.stanford.edu/IR-book/ ↩