Overview
CharacterFlywheel: Scaling Iterative Improvement of Engaging and Steerable LLMs in Production 讨论的是一个比“把模型离线训好再上线”更接近真实工业场景的问题:当目标不再只是通用问答能力,而是社交聊天里的参与度、角色一致性和可控性时,怎样在大规模真实流量中持续迭代模型,同时避免把模型推向奖励黑洞。
这篇技术报告来自 Meta,研究对象是部署在 Instagram、WhatsApp 和 Messenger 上的社交聊天大模型。论文的核心贡献在于把整条生产链路系统化:数据筛选、偏好标注、奖励模型(Reward Model)训练、拒绝采样(Rejection Sampling)、监督微调(Supervised Fine-Tuning,SFT)、直接偏好优化(Direct Preference Optimization,DPO)、在线强化学习(Reinforcement Learning,RL)、离线评测和线上 A/B 测试(A/B Test)被组织成一个持续滚动的优化飞轮。
论文给出的结果也非常直接。从 2024 年 7 月到 2025 年 4 月,8 个新部署版本里有 7 个在真实线上流量中取得正向提升;最好的版本在广度参与度(Engagement Breadth)上提升 8.8%,在深度参与度(Engagement Depth)上提升 19.4%。与此同时,角色可控性也明显增强,指令违反率从 26.6% 降到 5.8%。
这篇论文最值得关注的点不在于“又一种更强的后训练配方”,而在于它把一个常被视为主观、噪声大、难以稳定优化的目标,拆成了一套可以持续迭代、持续观测、持续纠偏的工程系统。
Motivation
这篇论文的动机可以拆成三个层面。
第一,社交聊天模型和通用助手模型的优化目标并不相同。通用助手更强调正确性、帮助性和安全性,而社交聊天模型更关注“用户是否愿意继续聊下去”“角色是否稳定”“语气是否自然”。这些目标很难直接由标准基准测试覆盖,也很难通过单一离线标签完整描述。
第二,线上核心指标本身不可微。论文希望直接提升的是广度参与度(Engagement Breadth)和深度参与度(Engagement Depth)这类基于真实用户行为统计出来的指标,但这类指标只能在部署后通过 A/B 测试观察,不能像交叉熵那样直接反向传播。因此,必须先构造一组可微的代理目标,再让这些代理目标尽量贴近线上真实指标。
第三,生产环境中的优化很容易过拟合。论文反复强调一个现象:如果只盯着奖励模型分数往上推,策略可能会进入奖励模型不可靠的区域,离线分数升高,但真实线上参与度反而下降。论文中的 V12 版本就是这个问题的典型案例:用户流量上的奖励模型胜率冲到 70.7%,但线上深度参与度却下降了 2.9%。
因此,论文真正要解决的问题可以概括为:
- 如何把不可微的线上参与度目标映射成可训练的代理目标;
- 如何让这些代理目标在真实生产流量中持续刷新,而不是停留在静态数据集;
- 如何在持续优化的同时,监控并抑制奖励黑客(Reward Hacking)和风格过拟合。
Methodology
Problem Setup
论文把整个模型迭代过程描述成在一个未知奖励地形上的连续爬山。真正想优化的是线上用户参与度,但这个地形既不可解析,也无法直接求梯度。因此,CharacterFlywheel 的核心思路是:
- 先从当前策略附近采样数据;
- 再用偏好标注和用户行为信号训练奖励模型,估计局部“地形”;
- 然后用这些奖励模型去指导下一轮监督微调、直接偏好优化和在线强化学习;
- 最后通过离线评测和线上 A/B 测试验证这一轮更新是否真的向上移动。
对应到工程链路上,这个飞轮是:
已部署模型 -> 真实流量与内部流量采集 -> 数据清洗与标注 -> 奖励模型训练 -> 拒绝采样数据构建 -> 监督微调/直接偏好优化/在线强化学习 -> 候选模型评测 -> 新模型部署
这条链路里最关键的难点有两个:
- 奖励信号来自哪里;
- 如何判断优化是否已经偏离真实目标。
前者由偏好模型和用户行为模型负责,后者由离线评测、线上 A/B 测试和奖励模型胜率阈值共同约束。
Reward Modeling
论文把奖励模型(Reward Model)分成两类:
- 偏好模型(Preference Model)
- 用户信号模型(User Signal Model)
其中偏好模型是主奖励,用户信号模型是辅助奖励。这样设计的原因很明确:真实用户行为虽然规模大,但噪声很高;人工偏好数据虽然贵,但更可控、更接近“这条回复是否更好”的判断。
偏好模型又分成两种形式:
- 点式(Pointwise)模型:分别给每个回复打一个标量分数;
- 成对(Pairwise)模型:把两个回复一起输入,直接判断谁更好。
点式模型的训练目标是:
其中:
- $x$ 是输入上下文,包含系统提示词(System Prompt)、角色描述和历史对话;
- $y^c$ 是被选中的回复;
- $y^r$ 是被拒绝的回复;
- $r_\theta(x,y)$ 是点式奖励模型输出的标量分数;
- $\sigma(\cdot)$ 是 sigmoid 函数(S 形函数)。
这里可以把公式一步一步展开。按照布拉德利-特里模型(Bradley-Terry Model),给定同一个上下文 $x$,回复 $y^c$ 优于 $y^r$ 的概率写成:
sigmoid 函数(S 形函数)的定义是:
把 $z=r_\theta(x,y^c)-r_\theta(x,y^r)$ 代入,可以得到:
再把分子分母同时乘上 $\exp(r_\theta(x,y^c))$,就得到更直观的形式:
这一步说明点式模型学习的是可比较的潜在效用,而不是孤立的“绝对质量”分数。分数差越大,被选中回复的胜率越高。对这个概率做负对数似然,就得到上面的 $\mathcal{L}_{\text{pointwise}}$。
成对模型则直接学习二分类:
其中 $t \in {0,1}$ 表示哪一个回复更优。点式模型主要用于在线强化学习(Reinforcement Learning,RL)阶段的奖励打分,而离线评测时同时看点式和成对模型的胜率。这样做的目的,是降低模型对单一奖励模型的投机空间。
除了偏好模型,论文还训练了一组用户信号模型,例如:
- 继续对话概率
p(continue); - 点赞概率
p(thumb up); - 点踩概率
p(thumb down); - 明确反馈概率
p(feedback)。
这些模型的训练本质上是二分类,形式可以统一写成:
其中 $s \in {0,1}$ 表示某个用户行为是否发生。
论文最终没有把这些用户信号模型直接作为在线强化学习(Reinforcement Learning,RL)的核心奖励,而主要把 p(continue) 和 p(thumb up) 用在拒绝采样阶段。这一点非常关键,因为后面的实验表明,直接优化用户行为模型很容易把模型推向一些表面上“更讨喜”、但实际上并不更好的风格。
Rejection Sampling and Alignment
在正式进入在线强化学习之前,论文先用拒绝采样(Rejection Sampling)构建一批高质量监督数据。
具体做法是:对每个提示词(Prompt),从候选策略池中挑一个最合适的模型,采样出 $k$ 个候选回复,然后用奖励模型给每个候选打分,选出得分最高的那个;只有当最高分超过阈值 $\tau$ 时,这个样本才被纳入拒绝采样数据集。
如果把每个提示词记成 $X_i$,每个候选回复记成 $Y_{i,1},\ldots,Y_{i,k}$,那么被选中的回复索引是:
对应的最高奖励为:
只有当 $r_{\max}\ge \tau$ 时,$(X_i,Y_{i,j^\ast})$ 才进入训练集。
这一阶段的作用可以从两个角度理解。
第一,它把当前奖励模型认为“明显更好的回复”直接蒸馏成监督学习样本,减少纯在线强化学习(Reinforcement Learning,RL)的不稳定性。
第二,它让监督微调(Supervised Fine-Tuning,SFT)的数据分布始终跟着最新流量更新,而不是停留在很久以前的静态数据集。论文特别强调,虽然拒绝采样本质上还是离策略(Off-policy)过程,但只要数据更新足够快,就能近似当前策略附近的分布,从而为后续在线强化学习提供更好的起点。
在此基础上,CharacterFlywheel 的训练顺序是:
- 先做监督微调(Supervised Fine-Tuning,SFT),混合内部交互数据、用户流量拒绝采样数据、安全数据、工具调用数据和一部分 Llama 3.1 后训练数据;
- 再做少量直接偏好优化(Direct Preference Optimization,DPO),主要用于快速修补安全和风格问题;
- 最后把在线强化学习(Reinforcement Learning,RL)用在真正和参与度相关的优化上。
这里的分工很清楚:监督微调负责打底,直接偏好优化负责小修补,在线强化学习负责真正的参与度爬坡。
Online Reinforcement Learning
论文在在线强化学习阶段比较了 Online DPO(在线直接偏好优化)和 GRPO(组相对策略优化)两种损失,后来切换到 GRPO。文中的 GRPO 目标写成:
这条式子可以按三个部分理解。
第一部分是重要性采样修正项:
这里 $\pi_{\text{gen}}$ 是实际收集数据时使用的行为策略,$\pi_{\theta_{\text{old}}}$ 是更新前策略。由于分布式训练和数据收集并不总是严格同步,这个比值用于纠正“数据不是严格由当前旧策略生成”的偏差。
第二部分是标准策略比值与裁剪项:
和
这两项的最小值就是近端策略优化(Proximal Policy Optimization,PPO)家族常见的保守更新机制。其含义是:如果优势函数 $A_t$ 为正,就希望提高当前样本的概率;如果 $A_t$ 为负,就希望降低其概率;但无论如何,更新幅度都不能太大。
论文在这里还有两个非常重要的工程判断。
第一,只优化最后一轮回复,而不是端到端模拟整个多轮对话。这样做牺牲了一部分严格的在线性,但显著降低了训练复杂度。
第二,在线强化学习阶段的提示词会优先选两类样本,而不是做均匀抽样:
- 奖励模型均值很低的样本;
- 同一个提示词下,多个候选回复分数方差很高的样本。
论文后面证明,第二类样本其实更重要,因为“低均值”常常只是风格偏差,而“高方差”更接近真正的困难样本。
Online Evaluation Metrics
CharacterFlywheel 的另一个关键点,在于论文把线上评测写成了明确的统计量,而不是只停留在“看 A/B 结果”的描述层面。
先看广度参与度。设实验单元 $i$ 属于组别 $g \in {\text{test},\text{control}}$,观察窗口中的时间片为 $d \in \mathcal{D}$,并设 $Y_{i,d}\in{0,1}$ 表示该单元在该时间片是否发生参与行为。则单元级平均参与度是:
这一步先把“一个用户在一周里多天是否发生参与行为”的二元序列压缩成一个平均值。然后再对组内求均值,就得到广度参与度的组级估计量:
因此,广度参与度本质上是在看“平均有多少实验单元在观察窗口内发生参与行为”。
再看深度参与度。设 $S_i \ge 0$ 是实验单元 $i$ 在观察窗口中的累计参与强度,$A_i=\mathbf{1}(S_i>0)$ 表示该单元是否至少发生过一次参与行为。那么深度参与度的经验估计量是:
这条式子可以一步一步理解。
首先,$\sum_i S_i$ 是组内所有发生的总参与强度。
其次,$\sum_i A_i$ 是组内至少发生过一次参与行为的单元数。
所以二者相除得到的是“在发生参与行为的那部分单元里,平均参与有多深”。这和广度参与度的区别非常重要:
- 广度参与度衡量覆盖面;
- 深度参与度衡量发生之后的强度。
最后,实验的 lift 定义为测试组相对于对照组的相对变化:
这条式子说明论文关注的是相对提升比例。对于产品迭代来说,这种定义更容易横向比较不同版本和不同实验。
Experiments
Quality and Engagement
论文的实验横跨 15 个版本,时间从 2024 年 1 月到 2025 年 4 月,可以分成上线前和上线后两段。
上线前是 V1 到 V7。这一阶段主要依赖离线评测和小规模在线验证。论文报告,和 GPT-4o 对比的人类胜率从 V3 的 37.4% 逐步提升到 V7 的 46.2%;而和前一版本相比,无论是人工胜率还是奖励模型胜率都稳定高于 50%,说明每一轮迭代基本都在往前推。
真正更有说服力的是上线后的 V8 到 V15。论文在真实生产流量上对每个新版本做 7 天 A/B 测试,并同时看广度参与度、深度参与度和奖励模型胜率三组信号。结果是:
- 8 个新部署版本里有 7 个取得正向参与度提升;
- V11 在广度参与度上提升 4.47%,在深度参与度上提升 18.2%;
- V14 在广度参与度上提升 8.8%,在深度参与度上提升 11.2%;
- V12 失败,广度参与度只有 0.05%,深度参与度下降 2.9%。
这个结果说明飞轮式迭代体现的是持续有效的累计改进,而不只是单点成功;同时论文也没有回避失败案例,V12 被明确当作过拟合边界的实证证据。
论文还给出了一个很重要的经验规则:用户流量上的奖励模型胜率不应长期超过 65%,理想区间大约是 60%。因为一旦奖励模型胜率过高,通常意味着策略已经被推到奖励模型非常自信、但未必真实可靠的区域。
General Capability and Steerability
CharacterFlywheel 虽然主要优化社交参与度,但论文还是报告了标准基准测试和角色可控性结果。
在通用基准测试(Benchmark)上,CharacterFlywheel V7 相比 Llama 3.1 70B 有一定退化,但没有出现灾难性崩塌。例如:
- MMLU 为 79.5,而 Llama 3 70B 为 83.6;
- IFEval 为 84.8,而基线为 87.5;
- GSM8K 为 92.3,而基线为 95.1;
- MATH 降到 50.5,退化更明显。
这组结果说明论文选择的是“保留足够通用能力,同时把优化重心放在社交聊天”,而不是追求通用基准测试的最优。
比这些通用基准测试更重要的是角色可控性。论文把指令违反率(Instruction Violation)作为关键指标,在交互式聊天场景里用 LLM-as-a-judge(大语言模型充当评审)评估模型是否违背角色描述。结果显示,指令违反率从 V2 的 26.6% 一路降到 V8 的 5.8%,相对下降约 78%。
这说明 CharacterFlywheel 并不是通过牺牲角色一致性换取参与度,相反,角色稳定性本身也是参与度提升的一部分来源。
Ablations and Discussion
论文的分析部分给出了几条非常有价值的经验结论。
GRPO 优于 Online DPO。
在同一起始检查点(Checkpoint)和同一训练数据下,用 GRPO 训练的模型相对 Online DPO 取得了 +1.52% 的广度参与度提升。论文给出的解释是,GRPO 能利用所有生成回复的奖励分数,因此监督粒度更细。
近策略数据明显优于离策略数据。
当在线强化学习使用的提示词来自最新模型流量时,相比来自更早版本流量,线上 A/B 结果多出 +10.6% 的深度参与度提升和 +1.6% 的广度参与度提升。这一点和论文在方法部分的“局部爬山”比喻完全一致:梯度必须来自当前策略附近,才更接近真实地形。
困难样本筛选应该看方差,而不是只看均值。
论文发现,按奖励模型均值最低去抽样,会把长对话、角色扮演、恋爱类提示词过度采样,因为这些类别在风格上天然更容易被打低分。相比之下,同一提示词下多个候选回复分数的方差更能反映“这个提示词是否真的难”。高方差意味着模型在这个提示词上既能生成好回复,也能生成坏回复,因此更值得用来做在线纠偏。
用户信号模型不适合直接做在线强化学习主奖励。
论文列出了四类偏差:
- 延迟反馈偏差:用户往往不在澄清轮点赞,而在最终回答轮点赞;
- 结束偏差:对话快结束时更容易出现“谢谢”“晚安”式高情绪表达;
- 不同任务类别的正负样本比例不一致;
- 历史上下文会污染最后一轮质量判断。
这四类偏差意味着,用户行为模型更适合参与拒绝采样排序,而不适合直接驱动在线强化学习。
V12 失败是论文最重要的实验结果之一。
如果只看“最好版本有多强”,这篇论文的价值会被低估。V12 展示了一个生产级事实:离线奖励优化和线上真实参与度之间始终存在错位风险。因此,CharacterFlywheel 的核心可以概括为:
- 让奖励模型持续刷新;
- 让离线评测与线上 A/B 测试相互校验;
- 在奖励模型胜率、风格指标和真实参与度之间建立多重护栏。
References
[1] Nie et al. “CharacterFlywheel: Scaling Iterative Improvement of Engaging and Steerable LLMs in Production” arXiv preprint arXiv:2603.01973 (2026).
[2] Meta. “Meta AI Studio” product page.
[3] Dubey et al. “The Llama 3 Herd of Models” arXiv preprint arXiv:2407.21783 (2024).
[4] Ouyang et al. “Training Language Models to Follow Instructions with Human Feedback” NeurIPS 2022.
[5] Shao et al. “DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models” arXiv preprint arXiv:2402.03300 (2024).