所有文章
产品设计2026-04-0714 分钟

KnowMine 的 Reward 系统为什么拒绝 streak 计数:主题聚集 + 复现钩子的设计

Duolingo 的 streak 是留存利器,但对知识库是毒药。KnowMine 用主题聚集 + Agent 行动钩子重新设计了即时奖励反馈,让 AI 对话中存知识这件事真正开始复利。附完整设计推导和实战验证。

KnowMineReward 系统知识库MCPAI Agent产品设计Hooked 模型自我决定论

如果你过去两年用过任何"AI 笔记 / 第二大脑 / 个人知识库"产品,你大概率见过这种东西:

🔥 今日第 3 条 · 连续 12 天 · 本周新增 17 条

这是 streak 模式。Duolingo 用它把语言学习留住了上亿用户,GitHub 用它的草地把开发者留在了平台上。它是经过验证的留存利器。

但认真对比一下"知识库"和"学外语 / 写代码"三件事的本质差别,就会发现 streak 在知识库场景里是有毒的。KnowMine 重写 Reward 系统时,我们花了很久才下定决心把它否掉。这篇把整个设计推导写下来,包括最终选的方案、为什么这么选,以及上线后一个出乎意料的发现。

如果你也在做 AI 时代的知识工具,这套思路值得借鉴。

问题:Reward 系统还差最后一公里

KnowMine 是 AI 原生的个人知识库。核心场景是:你在 Claude / ChatGPT / Cursor 里聊天的时候,通过 MCP 协议直接调一个叫 save_memory 的工具,把对话里值得保留的判断、决策、经验存进知识库。AI 帮你提取标题、打标签、自动归类、向量化、自动关联到旧知识。

底层零件早就造好了:

  • 365 天热力图组件 ✅
  • 成长报告服务 ✅
  • 主题聚类 / 关联发现 ✅
  • 一个独立的 get_growth_summary MCP 工具 ✅

但中间有一个致命断点:用户在 AI 对话里调 save_memory 那一刻,工具响应里没有任何 Reward 信号。它只返回三个字段:

{
  "action": "created",
  "memoryId": "xxx",
  "message": "记忆已保存 → 文件夹: 未分类"
}

用户必须主动去调 get_growth_summary,或者切到网页 dashboard,才能看到自己的成长。这相当于把 Reward 系统的最后一公里完全丢给用户主动触发。结果就是大部分用户存完就走,永远感觉不到知识库在长大

端到端 Reward 系统的"端",就缺这最后一段。

直觉答案:加一个 streak 计数器,对吧?

第一反应是抄 Duolingo / GitHub / Strava 那一套,在 message 末尾加一行:

🔥 今日第 3 条 · 连续 12 天 · 本周新增 17 条

工程量极小,用户立刻有数字反馈,行业最佳实践。准备开干。

我停下来把这个方案过了一遍五个专家视角,结果全部反对

下面是这五个视角各自看到了什么。

视角 1:Hooked 模型——钩子的核心是随机奖励(variable reward)

Nir Eyal 在《Hooked》里反复强调一件事:可预测的奖励会迅速消耗多巴胺,变成噪音

今日第 3 条 · 连续 12 天 是典型的固定奖励 (fixed reward):每次都是同样的格式、同样的句式、同样的字段。用户大脑在两周内就会学会自动过滤这一行字。它会从"奖励"退化成"页脚"。

Instagram 不告诉你"这是你今天第 5 个赞"。它给你的是你不知道下一秒会出现什么。这才是随机奖励的力量。

视角 2:自我决定论(SDT)——胜任感不是数量感

心理学里讲内驱的 SDT 理论有三根支柱:自主(Autonomy)、胜任(Competence)、联结(Relatedness)。

今日第 3 条 这种数字属于数量反馈,它激发的不是胜任感,而是焦虑:"我今天还差几条?""我的连续天数会不会断?"

真正激发胜任感的反馈不是"你做了多少",而是"你做的事情产生了影响"。

这时我突然意识到:KnowMine 已经在做这件事了——save_memory 现有响应里有"自动关联到 X、Y 两条旧知识"。这才是真正的胜任感信号。它告诉用户:你刚存的这条不是孤立的,它在你的知识网络里找到了位置

这是一座被低估的金矿。之前居然没意识到。

视角 3:Duolingo streak 的甜蜜陷阱

streak 这个机制有一个很少被讨论的副作用:它会让用户为了不断 streak 而做形式化、低质量的打卡

Duolingo 用户圈里流传一个梗——"streak 救星":那些为了不断 streak 而在零点前 5 分钟点开 app 随便做一道题的人。

对 Duolingo 来说这没问题,他们的产品本质是"每天接触一点外语",低质量打卡也有学习效果

但 KnowMine 是个知识库。如果用户为了不断 streak,每天硬塞一条无意义的笔记呢?会让知识库腐烂得更快。垃圾进,垃圾出,向量空间被噪声污染,主题聚类失效,Soul 画像被稀释。

这是结构性冲突。KnowMine 的产品本质和 streak 机制不兼容。

视角 4:MCP 工具响应的双重读者

这一条最被忽视,也最有意思。

save_memory 工具 message 字段不只是给"人"看的。它会被 AI Agent 读进去,变成对话上下文继续展开。

如果往里塞一段 🔥 今日第 3 条 · 连续 12 天,Claude 在下一轮对话里很可能复述这个数字给用户:"你今天已经存了 3 条了,状态不错!"

这听起来人畜无害,但想象一下用户连续 30 天看同样的 AI 复述——它会越来越机器味,越来越尴尬。

而如果往里塞的是一段带行动钩子的文本呢?比如"这让你对 'MCP-first' 主题已经有 5 条笔记了——要不要我帮你生成一份小综述?"

Agent 看到这句话会自然接话:"好啊,我帮你总结一下。"——然后它真的会去调 get_related_knowledge,聚合那 5 条笔记,生成综述。Reward 直接转化成下一个工具调用。

这是双向钩子。在 MCP 时代,每一段 AI 工具的响应文本都是潜在的 Agent 行为引导。Reward 不只是用户感知层的事,它是 Agent 行为层的事。

视角 5:标杆产品对比

产品模式是否适合 KnowMine
GitHub 贡献图被动可见,从不打断写作✅ 可借鉴
Strava KudosReward 来自他人社交确认✅ 启发了"复现"思路
Readwise Daily Review把存的东西重新呈现给你看✅ 直接启发了我们的方案
Beeminder每天逼你完成数字目标❌ 反例,只对自虐型用户有效
Duolingo Streak强 streak + 推送❌ 与知识库本质冲突

KnowMine 的目标用户不是 Beeminder 那一群。是 GitHub 贡献图 + Readwise 那一群。

最终选的方案:主题聚集 + 复现钩子

五个视角拷问下来,原方案全被否决。重新设计的方案叫:主题聚集 + 复现钩子 (Topic Cluster + Recall Hook)。

具体效果:

记忆已保存 → 文件夹: 个人学习和思考笔记
🔗 自动关联到 2 条相关知识:
  · Karpathy LLM Wiki 生态竞品全景图
  · KnowMine Reward 系统五项核心设计决策
💡 这让你对 "Karpathy 生态" 主题已经有 5 条相关笔记了——要不要我帮你生成一份小综述?

核心设计原则:

原则实现
不做数量统计不用 streak / 计数器,用主题聚集感知
不做固定模板count >= 3 / >= 5 / >= 10 三档不同语气
不做单向通知每段 reward 都带一个明确的下一动作钩子
利用 Agent 上下文钩子是问句,Agent 会自然接话
不打扰原则count < 3 / 无 tag / reinforced 路径都不触发

streak 类信号完全不进 MCP 响应,只放在网页 dashboard 上,做 GitHub 贡献图式的被动可见。

上线后的意外发现

代码上线后我跑了一次实测,存了一条新知识。结果出现了超出预期的现象。

Claude 拿到 reward 文本后,自发做了进一步加工、接话、并提议下一动作。代码里写死的文案是:

💡 "MCP-first" 主题在你的知识库里开始成形了(3 条)——要不要看看它们之间的关联?

但 Claude 实际给用户的回复是:

附带一个观察:系统提示 "MCP-first" 主题在你库里已经有 3 条成形了。要不要我跑一次 get_related_knowledge 把这条洞察的关联网拉出来看看?可能有几条之前的判断现在该升级或合并了。

最后那一句"可能有几条之前的判断现在该升级或合并了",完全是 Claude 自己加的。这句话是 KnowMine"知识复利"叙事的延伸,比代码里的固定文案更有产品味。

视角 4 的预测被验证了:"reward 文本 = Agent 上下文"不是理论,是真实可观测的产品杠杆。MCP 时代每一段工具响应文本都是潜在的 Agent 行为引导,应该把"给 Agent 看"放到和"给人看"同等重要的位置。

给同行的几条建议

如果你也在做 AI 时代的知识工具或 Agent 工具,这套思路里有几条可以直接拿走:

  1. 慎用 streak。先问自己:"我的产品本质是拼数量还是拼质量?"如果是后者,streak 是毒药。
  2. 找出产品里被低估的'隐性 reward'。KnowMine 的"自动关联发现"原本只是个系统行为,重新包装一下就成了 Reward 信号。
  3. 每段工具响应都要为 Agent 设计,不只是为人设计。MCP 工具的 message 字段是 Agent 的下一步行为种子。
  4. Reward 必须能转化成下一个动作。最好的 reward 不是让用户停下来欣赏数字,而是让用户和 Agent 自然进入下一个有价值的操作。
  5. 不打扰原则。新用户、边缘场景、非关键路径都不要发 reward。少即是多。

写在最后

KnowMine 在 knowmine.ai 已上线,11 个 MCP 工具、有免费额度,可以直接接到 Claude / ChatGPT / Cursor / Claude Code 上。想感受 reward 钩子的实际效果,存几条知识就能看到——尤其是存到第 3 条同主题笔记的时候,Reward 会自动出现,并把你引向"生成综述"这个动作。

如果你在做类似的产品决策,欢迎在评论区聊。Reward 设计是个深坑,行业里很少有人写这类决策推导,希望这篇对你有帮助。


本文记录了 KnowMine v2.54.0 的 Reward 系统设计。完整 changelog 见 CHANGELOG.md,相关代码见 src/lib/services/reward-hook.ts

开始构建你的 AI 原生知识库

免费开始使用,连接 Claude、ChatGPT 等多种 AI

免费开始
KnowMine 的 Reward 系统为什么拒绝 streak 计数:主题聚集 + 复现钩子的设计 - KnowMine Blog