抖音推送改成自触发闭环:系统自定下次触发时刻,算力省 79%

A Self-Triggered Agentic Push Recommendation System

Zhao-Yu Zhang, Qingying Chen, Chunyuan Zheng, Jing Zhou, Jian Sun, Siqi Chen, Leiying Chen, Chuan Zhou, Huiyou Jiang, Xin Tao, Haoxuan Li, Zhouchen Lin

cs.IR

2026-08-03

字节把抖音推送重写成自触发闭环:系统既定是否发推送、又定下次何时唤醒自己,活跃天数升 0.28%、关推送率降 1.9%、算力省 79%。

这篇在解决什么

推送通知是推荐系统里少有的「主动出击」场景:用户没打开 App,系统也能把消息推到锁屏。难点不在「推什么」,而在「推不推、什么时候推」。抖音这种亿级平台没法每秒把每个用户重排一遍,现有方案分两类:一类是离线先把每个用户当天的推送时刻算好(基于 uplift 建模加整数规划),到点就发,完全不看实时状态;另一类是每隔几分钟轮询一次实时判断,轮询太密烧算力,太疏又错过最佳时机。两类都是多阶段流程,各自卡在局部最优。

方法

STEPS 把推送决策重新定义成一个自触发的闭环:系统被唤醒时同时做两件事,执行代理决定「现在发不发」,规划代理决定「下次隔多久再唤醒自己」。两个代理都基于 decision transformer(DT,一种把强化学习变成序列预测的方法,给定目标回报就生成对应动作)。

规划代理要输出一个连续的时间间隔,直接回归不稳定,作者把它改成序数回归:把 0 到 24 小时切成 100 个等频桶,预测落在哪个桶。为了让目标回报信号不被高维状态特征淹没,他们用门控乘法(RTG 过一层 MLP 再和状态逐元素相乘)替代直接拼接,训练时把正负回报的权衡系数 λ 从均匀分布里采样,这样上线后能不重训就调权衡。

执行代理是二分类(发或不发),核心改进是用 Bellman 方程估 Q 值,而不是直接回归离线日志里观测到的回报,因为日志里的动作本身可能是次优的。第三个轻量过滤代理是从执行代理蒸馏出来的三层 MLP,故意不带物品特征,这样不会触发后面那套昂贵的物品排序管线(成本约 10 倍),能在低价值请求进入重计算前就砍掉。

结果

14 天在线 A/B,对比抖音现网的离线预排程基线:

指标STEPS固定间隔触发
活跃天数+0.2843%−0.0670%
关推送权限率−1.9089%+0.0205%
算力开销−79.42%+6.548%

固定间隔触发在算力对齐后甚至比基线还差。消融显示活跃天数的提升主要来自规划代理,而 79% 的算力节省几乎全是过滤代理贡献的(单独砍掉 74.88%)。两次推送的间隔分布也更健康:20 分钟内的密集推送减少 35.93%,3 到 6 小时的合理间隔增加 179.84%。

为什么重要

对亿级平台,0.28% 的活跃天数提升折算成绝对量很大,而它同时把关推送率和算力都压下去,意味着这是个「提质还省钱」的改动。真正可借鉴的不是某个数字,而是这个范式:把「何时再次调用自己」也当成模型要学的动作,系统就从被动轮询变成主动规划。论文标题里的 agentic 要打折扣,它其实是 decision transformer,不是基于 LLM 的 agent,但这反而让它能在亿级流量上实时跑。

局限与存疑

0.28% 这种相对提升只有放在亿级用户里才显眼,论文里全是相对百分比,没有绝对口径,外部很难判断实际收益规模。所有评测都在抖音内部数据上,没有公开基线可复现。安全机制靠一批写死的分钟级硬阈值兜底(推送成功后、用户自然活跃后都锁一段窗口),说明学习出来的策略还不敢完全放权。过滤代理蒸馏自执行代理,指标上有轻微让步,作者承认换掉了这部分精度。

术语

原文与代码

社区讨论

相关论文

全部论文解读