Skip to main content

支付宝 Copilot 3.0 — Multi-Agent Planning 的 GRPO 训练实战

原文:Multi-Agent 的灵活编排之路 | 作者:穆辰、锡亮、初影(阿里云开发者公众号)

这篇文章基于阿里云开发者社区原文深度扩写。我以第一视角重新梳理了支付宝商家经营助手 Copilot 3.0 中 Planning 模块从 CoT 到 GRPO 的完整迭代过程——三个核心难点、7 维复合奖励函数、SFT+GRPO 两阶段训练、以及那个让推理长度降 61%、准确率升 7.4 个百分点的实战结果。


这篇文章说了什么

支付宝商家经营助手 Copilot 从 2.0 升级到 3.0,核心变化是从单一 LLM 架构升级为 Multi-Agent 架构。其中最关键的模块是 Planning——一个负责理解用户问题、把问题拆解并分配合适 Agent 来处理的大脑。

Planning 不是一个简单的分类器。它要同时做改写、拆解、分配、排序——本质上是一道复杂的排列组合题。之前用短 CoT 效果不错,但有两个尖锐问题:

  1. 复杂问题思考太长:一思考就刹不住车,输出卡住、成本飙升
  2. 简单问题也反复验证:模型养成了"过度思考"的习惯,简单问题也说车轱辘话

解决方案:SFT + GRPO 两阶段训练。SFT 教模型"格式",GRPO 教模型"该快就快、该慢就慢"。

结果:

  • 推理长度均值从 240 降到 93 token(降幅 61.2%
  • 准确率从 78.7% 提升到 86.1%(+7.4 个百分点
  • 推理长度标准差从 77 降到 26(波动性大幅改善

核心结论:GRPO 不一定让模型"思考更多",也可以让模型"思考更精准"。关键是奖励函数里要有思考长度约束。


有效的实验就这几招

方法做了什么效果
先 SFT 再 GRPOSFT 阶段用 DeepSeek R1 生成的合成数据学格式,GRPO 阶段用人工标注数据优化策略直接 GRPO 收敛到 0.5-0.6,SFT+GRPO 收敛到 0.9
7 维复合奖励函数格式完整性(0.1) + JSON 有效性(0.1) + 思考长度(0.1) + 思考质量(0.1) + 改写准确率(0.2) + 专家分配准确率(0.3) + 规划准确率(0.1)多目标约束,防止模型走捷径
思考长度 S 形曲线惩罚不是一刀切截断,而是用 S 形平滑过渡太短或太长的思考都有惩罚,但允许自然波动
混合历史数据训练业务迭代加新 Agent 时,新老数据混合训练,不改历史数据GRPO 泛化能力够强,老 Prompt 没新 Agent 就没必要改
有思考过程 vs 无思考过程对比两组完全相同的实验条件,只差有没有 <think> 标签有思考过程的模型在改写和规划上表现显著更优

一、业务背景:支付宝商家经营助手

1.1 什么是 Copilot

支付宝商家经营助手是一个面向商家的 AI 助手,主要功能:

  • 基础业务:商家入驻、产品签约、运营工具使用
  • 运营服务:对账结算、数据分析、策略推荐
  • 智能优化:关键词配置、banner 生成、商品图片优化

用户可以在支付宝 APP 搜索"支付宝商家助手"小程序直接体验。

1.2 从 2.0 到 3.0 的架构变化

Copilot 2.0 是一个单一 LLM 架构——所有问题都丢给一个大模型,让它自己判断是回答、是调工具、还是做分析。

问题:

  • 单一 LLM 很难同时平衡"闲聊能力"和"专业分析能力"
  • 意图识别、query 改写、任务规划三个子模块能力受限
  • 面对复杂 query 时处理效能不足

Copilot 3.0 改成了 Multi-Agent 架构

  • 一个 Planning 模型 负责调度
  • 多个 专家 Agent(全网搜索、数据分析、策略推荐、图片生成、人群运营等)负责执行

1.3 Planning 的角色

Planning 要做的事本质上是一道复杂的排列组合题

在充分理解用户问题后,把问题分配给合适的一个或多个专家,同时包括改写、拆解、分配、生成执行顺序等多个环节。

举个例子——假设有 3 个 Agent(a、b、c),理论上分配方案至少有 15 种。再加上每个 Agent 要处理的具体子问题不同,方案空间非常大。

这跟之前用 Intention Classification 做路由有本质不同:

  • 意图分类:只判断"这是什么问题"→ 映射到 1 个 Agent
  • Planning:判断"这个问题需要谁来解决、按什么顺序、子问题是什么"

二、三个核心难点

2.1 鱼和熊掌:复杂问题 vs 简单问题

DeepSeek R1 的用户都懂:模型一思考就刹不住车。简单问题也翻来覆去验证,翻来覆去说车轱辘话。

这是 CoT(Chain of Thought)训练天生的副作用——模型学会了"多想几步",但不知道什么时候该停下来。

Planning 场景里这个问题更尖锐:

  • 复杂问题(比如"帮我分析一下上个月的营收,并推荐 3 个优化策略"):需要拆成数据分析 + 策略推荐,两步走,思考过程要完整
  • 简单问题(比如"今日资讯"):直接交给全网搜索 Agent 就行,不需要深思考

GRPO 的训练必须同时优化这两个目标:复杂问题准确率高 + 简单问题思考短

2.2 思考过程怎么标注

让运营写带思考过程的标准答案,几乎是不可行的——写一段有逻辑的思考过程耗时长、验收成本高、而且质量参差不齐。

他们的解法:先用大模型生成合成数据,再人工校验。SFT 阶段用的数据是 DeepSeek R1 生成的思考过程 + 规划结果,筛选长度较短的样本;GRPO 阶段数据是人工标注合成的(只标注规划结果,思考过程不要求人工写)。

2.3 业务迭代时历史数据怎么办

今天 5 个 Agent,下个月变成 8 个,之前标注的数据怎么处理?

答案是:不改历史数据,直接混合训练

因为 GRPO 学到了"在给定的 Agent 列表里做最优选择"的能力。历史的 Prompt 里没有新 Agent(比如《人群运营 Agent》),那在历史数据里《策略 Agent》就是当时的最优选择——没必要改。

推理时,只要用最新的 Prompt(包含新 Agent 列表),模型就能自动处理新场景。


三、解决方案:SFT + GRPO 两阶段训练

3.1 数据构造

输入维度

  • 历史上下文窗口(动态滑动窗口,N 轮对话)
  • 当前可用的专家列表
  • 数据分析工具列表
  • 产品服务列表

输出格式

<think>
好的,我现在需要处理用户的问题:"查看经营周报"。
首先,根据提供的工具列表,用户问题属于其中的一项。因此,这个问题应该由数据分析专家来处理。
接下来,检查是否有其他相关的子问题需要拆解,但用户的问题很明确,所以不需要进一步拆解。
最后,确认是否需要其他专家介入,但这里只需数据分析专家即可。
</think>

<answer>
{
"补全后的问题": "查看经营周报",
"plan": [{
"专家": "数据分析专家",
"处理问题": ["查看经营周报"]
}]
}
</answer>

冷启动数据:用 DeepSeek R1 生成合成数据(思考过程 + 规划结果),筛选出长度较短的样本,用于 SFT 训练。

人工标注数据:人工标注合成数据(只标注规划结果),用于 GRPO 训练。

3.2 SFT:教模型"格式"

SFT 阶段的目标很明确——让模型学会按照特定格式输出:

  • <think>...</think> 包裹思考过程
  • <answer>...</answer> 包裹规划结果(JSON)

SFT 只是应试教育:教会模型"格式",但没教"什么样的思考是好的"。

3.3 GRPO:教模型"策略"

GRPO 是素质教育:不给定标准答案,而是给一个范围让模型探索,然后从更优的回答中找准迭代方向。

训练配置:

参数
基座模型QwQ-32B
GPU3 机 24 卡 A100
训练框架ModelScope ms-swift
关键超参lrbeta(KL 散度权重)

lrbeta 设得越大,收敛原则上越快,但训练也越不稳定。实际训练中需要根据是否出现震荡来调整。


四、7 维复合奖励函数

这是这篇文章最有价值的部分。奖励函数从三个方向展开,共 7 个维度:

Reward = 0.1 * StrictFormatReward
+ 0.1 * JSONValidReward
+ 0.1 * ThinkLengthReward
+ 0.1 * ThinkQualityReward
+ 0.2 * CorrectnessReward
+ 0.3 * ExpertValidationReward
+ 0.1 * ProcessingQualityReward

4.1 格式完整性评估(StrictFormatReward + JSONValidReward)

class StrictFormatReward:
_pattern = re.compile(
r"^<think>\n.*?\n</think>\n\n<answer>\n.*?\n</answer>$",
re.DOTALL
)

def __call__(self, completions, **kwargs):
return [1.0 if self._pattern.match(c) else 0.0 for c in completions]

为什么格式奖励放在 GRPO 阶段:因为纯 GRPO(不带 SFT)的格式 reward 是从很低的值开始震荡的(0-0.3),模型需要花大量步数学格式。而先 SFT 再 GRPO,格式奖励一开始就接近 1.0,模型可以把所有步数花在优化内容上。

4.2 思考过程评估(ThinkLengthReward + ThinkQualityReward)

ThinkLengthReward 是整个奖励函数里最精妙的设计:

class ThinkLengthReward:
def __call__(self, completions, **kwargs):
rewards = []
for c in completions:
length = len(c.think)
if min_length <= length <= max_length:
rewards.append(1.0)
else:
# S形曲线计算惩罚
deviation = abs(length - mid) / eps
reward = 1.0 / (1.0 + np.exp(5 * (deviation - 0.5)))
rewards.append(float(reward))
return rewards

不是一刀切截断,而是 S 形平滑过渡

  • 长度在理想范围内 → 满分
  • 稍微超出 → 少量扣分
  • 严重超出 → 接近 0 分
  • 太短(没思考)→ 同样扣分

这个设计的精妙之处:它不要求"所有问题都用同样的思考长度",只是惩罚极端情况。复杂问题的思考自然长一些、简单问题的思考自然短一些——只要都在合理范围内,都能拿满分。

ThinkQualityReward:关键词过滤,检查思考过程中是否出现了不应该有的内容(如敏感词等)。

4.3 答案准确性评估(CorrectnessReward + ExpertValidationReward + ProcessingQualityReward)

三个维度覆盖 Planning 输出的所有方面:

奖励权重评估什么怎么算
CorrectnessReward0.2query 改写对不对语义相似度 + 覆盖度
ExpertValidationReward0.3Agent 分配对不对跟标准答案的专家列表比对
ProcessingQualityReward0.1规划对不对语义相似度 + 覆盖度 + 多样性

权重最高的维度是 ExpertValidationReward(0.3)——因为对 Planning 来说,Agent 选错了意味着整个问题解决流程走错路,这是最致命的错误。


五、训练结果

5.1 先 SFT 再 GRPO 的收敛曲线

四条关键 curve:

  1. 格式遵循 + 答案质量:一开始就很高(SFT 的功劳),随着训练继续提升
  2. 改写、专家选择、规划 reward:都持续提高
  3. 思考长度:显著下降!从 ~240 token 降到 ~150 token 并收敛
  4. 总 reward:最终收敛在 0.9 左右

对比:直接 GRPO(不先 SFT)

  • 所有 reward function 都从很低开始震荡
  • 最终收敛在 0.5-0.6 之间
  • 差距显著——SFT 是 GRPO 的必要前置

5.2 无思考过程 vs 有思考过程

同样先 SFT 再 GRPO,对比有 <think> 标签和无 <think> 标签的版本:

维度有思考过程无思考过程
GRPO 后 reward0.90.6-0.7
平均输出长度93 token100 token
改写能力一直很弱
专家选择尚可

结论:思考过程不是锦上添花,是 Planning 能力的基石。没有思考过程的模型,改写(把用户模糊的话翻译成标准表述)能力一直上不去。

5.3 实测效果

指标GRPO 前GRPO 后变化
推理长度均值240.2993.28-61.2%
推理长度标准差77.3026.11波动大幅改善
准确率78.7%86.1%+7.4pp (相对 +9.4%)

在保证模型准确率提升的同时,把推理长度砍掉 60%——这是 GRPO 在 Planning 场景最亮眼的结果。


六、工程启示

6.1 SFT 是 GRPO 的必要前置

直接 GRPO 训练 Planning 模型 = 花大量步数学格式、收敛慢、最终效果差。先 SFT 教会格式,再 GRPO 优化内容——各司其职,效果翻倍。

6.2 思考长度奖励是双刃剑

用 S 形平滑函数而不是 hard cutoff,给了模型足够的灵活性。如果一刀切——"超过 200 token 就是 0 分"——模型可能会为了压缩长度而牺牲推理质量。

6.3 多任务混合训练是 GRPO 的天然优势

业务迭代加新 Agent 时,不需要改历史数据。GRPO 学到的是"在给定列表里选最优"的能力,而不是"记住正确答案"的能力。这是 RL 相比 SFT 最大的优势之一——泛化到新组合。

6.4 复合奖励函数 ≠ 堆奖励

7 个维度不是随便堆的。权重的分配反映了业务优先级:

  • 专家选择(0.3)最重要——选错 Agent 整个流程崩盘
  • 改写准确率(0.2)次重要——query 理解偏差导致后续全错
  • 格式 + 思考 + 规划(各 0.1)——锦上添花,但不能为零

七、跟其他 GRPO Agent 项目的对比

维度本文 (Copilot Planning)基金助手投标 AgentSageMaker RLVR
Agent 类型Multi-Agent 调度SubAgent 工具选择8 Agent 协作单 Agent 多工具
输出格式think + JSON planthought + action + plantrajectoryTOOLCALL tags
奖励维度7 维复合6 维规则多阶段规则三层分级
思考控制S 形长度惩罚(最核心创新)逻辑关键词奖励--
训练阶段SFT → GRPO纯 GRPOSFT → DPO → RL纯 RLVR

最独特的贡献:用 GRPO 让模型学会"该快就快、该慢就慢"——这在所有 GRPO Agent 笔记里可能是唯一一个有系统化思考长度控制的案例。