把社区改成了小红书那样,然后我开始担心一件事。
这份幻灯片把那篇口述文章里的主要想法整理出来,再对照 reco / mint / referral 的实际代码,看看每一个增长机制今天真正跑到了哪一步。
以前进社区,看到的全是文字标题——你得靠脑子去读、去判断这条值不值得点开。这次改版换成小红书式的双列瀑布流:封面图直接铺出来,一眼扫过去,吸引人的信息立刻跳出来。
文章聚焦在前两个(发现与排序),后三个是代码里已经在跑的增长机制——合在一起才是完整的飞轮。
双列瀑布流 + 封面图,把「判断值不值得点开」的成本降到一眼。
看的人多、互动多就往前排;新内容靠时间项天然有一段曝光窗口。
读者投币,作者 +2、读者自己 +0.5——双方都有动力,形成双边飞轮。
三层归因(链接 / IP / 剪贴板),作者和新人各得 9 币,同池同价。
写门槛实名、敏感词前置、举报即隐藏——信任是增长能持续的前提。
视觉 + 热度的机制里,认真写但「搞脑子」的内容会被挤到边缘——文章真正担心的事。
图片铺出来之后,「更吸引人的信息」先被看到,发现好内容不再只靠开头几行字。对一个内容还不多的小社区,这直接决定新用户第一屏的留存。
一旦视觉成了主角——没有好图片,基本就等于没有好内容。哪怕写的东西很有价值,只要没配图,在双列瀑布流里就自动占了下风。
文章里说现在靠推荐机制兜底。实际实现是 reco 服务里一条 Hacker News 式的公式——互动加权除以年龄冷却,再做作者打散:
全局同一套顺序,不分用户。没有兴趣画像、没有关注关系、没有个性化——README 自己写明「千人一面」。
reco 挂掉,App 自动回退到纯时间倒序(D1 展示索引直出)。推荐是增强层,不是依赖。
注意 finish(看完)权重 4 > like 的 3——「被读完」已经是对认真内容最硬的一票,只是现在还没人特意讲它。
设计上刻意把两套信号分开:红心是纯质量信号(绝不碰钱),投币是价值分配(铸币入账)。红心能换钱就会被刷——Goodhart 定律。
注意:投币和排序是两套库、两套信号——投币影响的是作者的算力收入,不直接进 feed 排序权重。
设计哲学:真人互助群敞开欢迎——想多赚就得拉更多真人、每人还得真产内容,刷量与增长同向。
发到社区要 Apple / 微信登录;匿名可以看、可以录,但「价值落袋」那一刻才设闸——摩擦精确加在刷子身上。
分享时先扫关键词(Apple 审核 1.2 的前置防线),命中直接拒绝;举报一键隐藏,管理员事后复核。
社区帖只存指针,正文实时从源文章读——作者编辑立即生效,删了源录音帖子自愈清理。真源在 R2,D1 索引可随时重建。
这一层没有一条是「增长功能」,但每一条都决定增长能不能持续:内容可信、身份真实、系统随时可回退。
靠「看的人多」排序,最先被推到边缘的,恰恰是花了很多时间写、但「搞脑子」的内容。大家不愿意费脑子——文章的判断是:这就是用户需求,不该对抗。但满足需求不等于什么都不管。
「在一个视觉优先、又要迎合轻松内容的机制里,怎么给那些认真写、值得读的东西留一个不被淹没的位置。这个我还没想明白。」
| 设计文档(recommendation_system.md) | 状态 | 实际情况 |
|---|---|---|
| 互动加权排序 + 牛顿冷却 | ✅ 已实现 | ranking.js 照抄文档 §3.1 权重,热度即时算、不落盘 |
| 作者打散(防同人刷屏) | ✅ 已实现 | 贪心乘性惩罚,同作者 ×0.5 |
| 行为埋点 | ✅ 简化版 | engagement 表仅 4 种动作、按人去重,非完整流水 |
| 兴趣画像 + 懒衰减 | ❌ 未实现 | 无 user_interests 表、无衰减代码 |
| 四路召回(关注/标签/热门/新鲜) | ❌ 未实现 | feed = 最近 500 条重排;无关注、无标签、无曝光去重 |
| 个性化(千人千面) | ❌ 未实现 | 全局一套顺序;Cron、冷启动选标签页也都没做 |
这个差距不是欠债,是正确的节奏——文档自己写着:「先用规则把闭环跑通、把数据采起来,再逐步模型化。数据和闭环比算法更值钱。」下一步最值得做的三件事:① 给纯文字帖设计专属卡片(回应文章的担心),② 加探索位(防止热度垄断第一屏),③ 攒够 engagement 数据后再上画像。