基于 X 开源推荐算法代码分析,所有策略均有代码依据
https://github.com/xai-org/x-algorithm
候选召回 → 硬过滤 → 多目标预测 → 加权合分 → 多样性衰减 → TopK选取 → 安全过滤
决定推荐的三个关卡:
- 能否进入候选池(in-network 优势巨大)
- 会否被硬过滤(过期/违规/已看等)
- engagement 加权总分高低
| 层级 |
信号类型 |
触发动作 |
代码位置 |
| S级 |
深度互动 |
Reply(回复)、Quote(引用)、Retweet(转发) |
weighted_scorer.rs:49 |
| A级 |
轻度互动 |
Like(点赞)、FollowAuthor(关注作者) |
weighted_scorer.rs:49 |
| A级 |
传播行为 |
Share、ShareViaDM、ShareViaCopyLink |
weighted_scorer.rs:49 |
| B级 |
注意力 |
Dwell(停留)、DwellTime(停留时长) |
weighted_scorer.rs:49 |
| B级 |
点击行为 |
Click、ProfileClick、PhotoExpand |
weighted_scorer.rs:52 |
| B级 |
视频完播 |
VQV(需满足最小时长门槛) |
weighted_scorer.rs:72 |
| 信号 |
后果 |
代码位置 |
| NotInterested |
降权 |
weighted_scorer.rs:64 |
| BlockAuthor |
降权 + 对该用户不再推送 |
author_socialgraph_filter.rs:6 |
| MuteAuthor |
降权 + 对该用户不再推送 |
author_socialgraph_filter.rs:6 |
| Report |
严重降权 |
weighted_scorer.rs:64 |
| VF审核不通过 |
直接下架 |
vf_filter.rs:25 |
✅ 推荐结构:
- 争议观点开头:"大多数人都错了..."
- 数据/事实开头:"90%的人不知道..."
- 问题开头:"为什么 X 比 Y 更难..."
- 反直觉开头:"我曾经也这么认为,直到..."
❌ 避免:
- 泛泛而谈的开头
- 需要翻页才能看到价值的内容
- 纯表情/表情包开头
✅ 推荐:
- 分段清晰,每段 2-3 行
- 使用列表/编号
- 关键信息加粗或用 emoji 标记
- 结尾有明确的行动召唤
❌ 避免:
- 大段文字堆砌
- 没有视觉断点
- 信息密度过低
模板1:观点对撞
"A 还是 B?我选 A,理由是..."
"你们觉得 X 应该怎么做?"
模板2:经验征集
"做 XX 最容易踩的坑是什么?我先说一个..."
"你遇到过最离谱的 XX 是什么?"
模板3:争议话题
"为什么我认为 XX 是错的..."
"大家都在说 XX 好,但我不同意..."
模板1:可复用信息
"XX 的完整清单(收藏备用)"
"一图看懂 XX"
"XX 速查表"
模板2:总结类
"2024年 XX 领域最重要的 10 个变化"
"我花了 X 年总结的 XX 经验"
模板3:资源分享
"XX 个免费工具推荐"
"XX 学习路径全攻略"
模板1:实用工具
"这个方法帮我省了 XX 小时"
"XX 问题的终极解决方案"
模板2:私密感内容
"很少有人知道的 XX"
"这个技巧我只告诉过 XX 人"
✅ 推荐(触发 PhotoExpand):
- 信息图/流程图
- 对比图(before/after)
- 数据可视化
- 截图+标注
- 高清细节图
❌ 避免:
- 无信息量的配图
- 纯装饰性图片
- 低分辨率图片
✅ 推荐(触发 VQV):
- 时长 > 最小门槛(建议 > 15秒)
- 前3秒有强钩子
- 有字幕/文字说明
- 教程/演示类
❌ 避免:
- 超短无意义视频(<3秒)
- 需要外跳才能理解的视频
- 纯音乐/无信息视频
⚠️ 注意:对话去重机制会让同一 thread 只保留一条
代码位置:dedup_conversation_filter.rs:7
策略:
- 第一条必须是最强钩子
- 每条都要有独立价值
- 不要把核心信息放在中间
- 结尾加"关注获取更多"
⚠️ 同作者多样性衰减机制
代码位置:author_diversity_scorer.rs:29
同一作者在单次推荐请求中出现越多,后续内容衰减越严重
✅ 推荐频率:
- 日常:1-2 条/天
- 活跃期:最多 3-4 条/天
- 间隔:至少 2-4 小时
❌ 避免:
- 短时间内连续发布(刷屏)
- 一天发布 5+ 条
- 集中发布后长期沉默
原则:根据目标用户活跃时间发布
通用建议(需根据实际数据调整):
- 工作日:8-9am, 12-1pm, 6-8pm
- 周末:10-11am, 3-5pm
⚠️ 注意:
- 内容有过期时间窗口(age_filter.rs:8)
- 在网召回按时间倒序(thunder_service.rs:333)
- 新鲜内容天然有优势
| 星期 |
内容类型 |
目标信号 |
示例 |
| 周一 |
干货长文 |
Dwell + Reply |
行业分析/经验总结 |
| 周二 |
争议观点 |
Reply + Quote |
”为什么我认为…” |
| 周三 |
实用资源 |
Retweet + Share |
工具推荐/清单 |
| 周四 |
互动帖 |
Reply |
问题征集/投票 |
| 周五 |
轻松内容 |
Like + Retweet |
梗图/段子/周末推荐 |
| 周六 |
深度内容 |
Dwell |
长篇教程/案例分析 |
| 周日 |
复盘/预告 |
Reply + Follow |
本周总结/下周预告 |
代码依据:
- out-of-network 内容会被 OON_WEIGHT_FACTOR 降权
位置:oon_scorer.rs:20
- in-network(关注列表)内容天然优势巨大
结论:再好的内容,如果用户没关注你,推荐权重就会被打折
1. 创作可复用/高传播内容
2. 被 Retweet/Quote 扩散到出网用户
3. 出网用户通过 ProfileClick 访问主页
4. 主页内容吸引 → Follow
1. 在大V内容下高质量评论
2. 引发好奇 → ProfileClick
3. 主页内容吸引 → Follow
1. 其他平台(公众号/知乎/B站)提及 X 账号
2. 用户主动搜索关注
□ 头像:清晰、有辨识度
□ 名称:易记、与领域相关
□ Bio:3秒说清"我是谁+我能提供什么"
□ 置顶推文:最能代表你价值的内容
□ 最近内容:保持更新频率
□ 链接:其他平台/作品集(可选)
代码依据:
- Phoenix 模型需要 user_action_sequence
位置:phoenix_source.rs:24
- 无历史数据时模型无法工作
- 新用户 For You 更依赖 in-network
结论:新账号的推荐几乎完全依赖"别人关注你"
目标:积累初始关注者和互动数据
行动:
- 每天发布 1 条高质量内容
- 主动关注领域内活跃用户
- 在相关话题下高质量评论(非spam)
- 引导已有社交关系关注
目标:通过传播内容获得出网曝光
行动:
- 发布 2-3 条"可复用型"内容
- 参与热门话题讨论
- 与已关注的活跃用户互动
目标:建立稳定的内容节奏
行动:
- 执行标准周内容排期
- 分析数据,优化内容方向
- 逐步减少"求关注"动作
| 行为 |
触发机制 |
代码位置 |
| 违反平台规则 |
VF 安全审核 drop |
vf_filter.rs:25 |
| 内容过期 |
超过时间窗口 |
age_filter.rs:8 |
| 被用户 block/mute |
对该用户不再推送 |
author_socialgraph_filter.rs:6 |
| 命中 muted keywords |
对该用户不再推送 |
muted_keyword_filter.rs:47 |
| 重复内容 |
去重过滤 |
drop_duplicates_filter.rs:7 |
| 已被看过 |
已看过滤 |
previously_seen_posts_filter.rs:8 |
| 行为 |
触发机制 |
代码位置 |
| 用户点”不感兴趣” |
负向信号权重 |
weighted_scorer.rs:64 |
| 被举报 |
负向信号权重 |
weighted_scorer.rs:64 |
| 短时间刷屏 |
多样性衰减 |
author_diversity_scorer.rs:29 |
| 出网推送 |
OON 降权因子 |
oon_scorer.rs:20 |
❌ 误区1:疯狂发帖 = 更多曝光
→ 实际:多样性衰减会让后续内容权重下降
❌ 误区2:转发热门内容 = 蹭流量
→ 实际:转推去重只保留一条(retweet_deduplication_filter.rs:23)
❌ 误区3:订阅内容用于拉新
→ 实际:非订阅用户看不到(ineligible_subscription_filter.rs:27)
❌ 误区4:反复推送给同一批人
→ 实际:已看/已推送会被过滤
❌ 误区5:只关注点赞数
→ 实际:Reply/Retweet/Quote/Dwell 可能权重更高
| 指标 |
对应信号 |
健康标准 |
优化方向 |
| 展示量 |
进入候选池 |
稳定/增长 |
涨粉、提高内容质量 |
| 互动率 |
综合engagement |
>3% |
优化内容结构 |
| 回复数 |
Reply |
有稳定回复 |
增加互动型内容 |
| 转发数 |
Retweet |
有自然传播 |
增加可复用内容 |
| 引用数 |
Quote |
有观点讨论 |
增加争议性内容 |
| 主页访问 |
ProfileClick |
稳定 |
优化内容钩子 |
| 新增关注 |
FollowAuthor |
持续增长 |
优化主页+内容 |
| 指标 |
预警阈值 |
可能原因 |
解决方案 |
| 展示量骤降 |
环比 -30% |
内容质量/频率问题 |
检查最近内容质量 |
| 取关增加 |
环比 +50% |
内容与预期不符 |
重新审视内容定位 |
| 举报增加 |
任何增加 |
内容违规/争议 |
立即审查内容 |
| 互动率下降 |
环比 -20% |
内容吸引力下降 |
测试新内容形式 |
目标:账号基础优化 + 内容节奏建立
任务清单:
□ 完成主页优化(头像/bio/置顶)
□ 确定内容定位和风格
□ 建立内容素材库
□ 开始每日 1 条内容发布
□ 建立数据监控表格
目标:测试内容类型,找到高效模式
任务清单:
□ 测试不同内容类型(干货/互动/资源)
□ 测试不同发布时间
□ 分析数据,识别高效模式
□ 逐步增加发布频率至 1-2 条/天
□ 开始主动互动(评论大V内容)
目标:放大有效模式,加速增长
任务清单:
□ 聚焦验证有效的内容类型
□ 执行完整周内容排期
□ 建立互动社群/话题参与
□ 尝试跨平台引流
□ 周度数据复盘
目标:建立可持续的运营节奏
任务清单:
□ 固化内容生产流程
□ 建立内容日历
□ 月度策略复盘
□ 持续优化迭代
| 策略点 |
代码位置 |
说明 |
| 排序信号 |
weighted_scorer.rs:49 |
定义了所有参与加权的 engagement 类型 |
| 负向信号 |
weighted_scorer.rs:64 |
负反馈进入加权合分 |
| 视频时长门槛 |
weighted_scorer.rs:72 |
VQV 需满足最小时长 |
| 出网降权 |
oon_scorer.rs:20 |
OON_WEIGHT_FACTOR |
| 多样性衰减 |
author_diversity_scorer.rs:29 |
同作者重复出现衰减 |
| 时间过滤 |
age_filter.rs:8 |
超过时间窗口直接过滤 |
| 在网时间排序 |
thunder_service.rs:333 |
按 created_at 倒序 |
| VF 过滤 |
vf_filter.rs:25 |
安全审核不通过直接 drop |
| 去重 |
drop_duplicates_filter.rs:7 |
重复内容过滤 |
| 转推去重 |
retweet_deduplication_filter.rs:23 |
同原帖只留一条 |
| 已看过滤 |
previously_seen_posts_filter.rs:8 |
已看内容不再推送 |
| 订阅过滤 |
ineligible_subscription_filter.rs:27 |
订阅内容只推给订阅者 |
| Block/Mute |
author_socialgraph_filter.rs:6 |
被 block/mute 不再推送 |
| Muted 关键词 |
muted_keyword_filter.rs:47 |
命中关键词过滤 |
| 对话去重 |
dedup_conversation_filter.rs:7 |
同 thread 只保留一条 |
| 冷启动 |
phoenix_source.rs:24 |
无历史数据时模型失效 |
本方案基于 X 开源推荐算法代码分析生成
注意:home-mixer/params 模块未开源,具体权重数值无法确认