
Math-Shepherd不靠人工的过程奖励自动养成80 万个人工步骤标签贵到肉疼让模型从每一步续写到结尾用最终对错反推这一步的好坏——过程奖励居然可以白嫖。本文导航PRM 的天价账单牧羊人的思路从结局反推每一步硬估计 vs 软估计演示六次续写白嫖三个过程标签从数学到代码与客服可复制的范式小结PRM 的天价账单上一篇我们留了个悬念PRM 是好东西但 PRM800K 的 80 万个步骤级标签是纯人工标的钱和人时都烧到肉疼。而且贵的不只是量——还有质的维护成本协议成本这步算不算错要写标注规范答案错但那一步只是笔误算什么档得开标注员校准会反复对齐一致性成本不同标注员对同一模糊步骤的判断会漂质量控制本身就是一个项目。有意思的是后来不少研究走人工标注换蒸馏的路线——用强模型生成伪标签再人工校对能把成本压下来一截但离白嫖还差得远。有没有可能一步到位完全不要人Math-ShepherdarXiv:2312.08935把答案直接写在了标题里Verify and Reinforce LLMs Step-by-step without Human Annotations——逐步验证、逐步强化不用任何人工标注。名字起得也讲究。Shepherd 是牧羊人牧羊人不需要指挥羊的每一步怎么走只需要看羊最终有没有走回羊圈——回圈的是好羊走丢的是问题羊。过程奖励模型的活儿恰恰相反它是牧羊犬要盯住每一只羊的每一段路线。Math-Shepherd 说牧羊犬太贵养不起那就让结局替我们说话。牧羊人的思路从结局反推每一步核心思想一句话讲完判断第 i 步好不好不用人看——让模型从第 i 步接着往下走续写直到得出最终答案答案对了说明这一步大概率是好的答案错了说明这一步大概率有问题。道理朴素得很好步骤的特征是从它出发后续大概率能走到正确答案坏步骤的特征是从它出发后续大概率翻车。每次续写都是一次随机尝试尝试的成功率就是这个步骤的价值估计——标准的蒙特卡洛思路。完整流水线长这样对错题目 真值答案采样完整解题轨迹对轨迹中的第 i 步从第 i 步之后续写 K 次每次续写到得出最终答案最终答案与真值比对命中 1不命中第 i 步的自动标签 命中率硬估计 K1软估计 K1整条轨迹逐步滚动汇成过程标签库训练自动版 PRM下游两用BoN 选优打分 / RL 过程奖励我最欣赏这套设计的地方是它做了一次漂亮的套利ORM 的结果标签是免费的答案比对白拿PRM 的过程标签是天价的80 万级人时Math-Shepherd 用蒙特卡洛续写把免费的结果标签批量转换成了昂贵的过程标签——用推理算力换标注人力。这正是第 12 篇《生成-验证差距为什么检查答案比做出答案容易得多》讲的生成-验证差距的又一次变现验证便宜就使劲用验证去换一切贵的东西。而 API 推理价格一年一个台阶地跌人力价格只涨不跌——这笔账越算越划算。硬估计 vs 软估计续写几次是个关键设计。论文里给了两种估计方式硬估计hard estimation每步只续写 1 次答案对→标签 1错→0。最便宜但标签全凭一次抽奖——续写时模型恰好自纠坏步骤被救活误标 1恰好跑偏好步骤被冤枉误标 0软估计soft estimation每步续写 K 次用命中率当标签取值 0、1/K、2/K……1。更平滑更可信但成本跟着乘 K。论文实测软估计训出的 PRM 质量更高。成本账直接算给你看按一条 4 步轨迹配置每步续写次数一条轨迹的总调用数标签取值评价硬估计140 或 1最便宜噪声大、靠运气软估计 K44160 / 0.25 / 0.5 / 0.75 / 1常用折中我的默认配置软估计 K161664更细贵训练集大了根本吃不消一句话工程账过程标签的每条成本 轨迹步数 × K × 单次续写 token 价格。标注成本从人力变成推理算力而且软估计的标签不是二值——一个 0.75 的步骤和 0.5 的步骤是有区别的信息量天然比硬估计大。我的经验K 不是越大越好配合第 12 篇的可验证性清单先把结果判定做扎实再谈加大 K。演示六次续写白嫖三个过程标签照例上真家伙。还用第 13 篇那条轨迹第 2 步埋了 x18 的错这次不请人工标注员也不请 PRM就按 Math-Shepherd 的软估计流程每步续写 K2 次共 6 次调用白嫖三个过程标签# demo_math_shepherd.py —— Math-Shepherd 软估计每步续写 K 次用最终答案命中率自动生成过程标签importrefromllm_clientimportchat Q,GOLD,K全班42人男生比女生多4人男生有几人,23,2# K2每步续写 2 次STEPS[设女生 x 人则男生 x4 人列方程 x(x4)42,合并同类项得 2x38解得 x18,男生人数 x4 194 23]deflast_num(text:str)-float|None:提取最终答案优先答数字取不到就取全文最后一个数字hitsre.findall(r答[:]\s*(\d),text)orre.findall(r(\d),text)returnfloat(hits[-1])ifhitselseNonelabels[]# 每一步的自动软标签foriinrange(len(STEPS)):# 对每一步做 MC rollouthits0for_inrange(K):# 从第 i 步之后续写 K 次seen\n.join(STEPS[:i1])outchat(f题目{Q}\n已有步骤\n{seen}\n请接着完成解题必须以答数字结尾。,temperature0.8,max_tokens512,labelfrollout_s{i1})hitslast_num(out)GOLD# 续写结果与真值比对免费的 ORM 验证labels.append(hits/K)print(f步骤{i1}软估计价值 {hits}/{K}{labels[-1]:.1f})print(f自动过程标签 {labels}零人工标注)运行uv run demo_math_shepherd.py控制台输出同时写入logs/agent.log2026-09-27 16:12:40 | INFO | agent: [rollout_s1#001] baseurlhttps://api.deepseek.com/ key_tail**8f3a2c modeldeepseek-chat input_len158B output_len214B start2026-09-27 16:12:40 end2026-09-27 16:12:44 duration4.02s prompt_filelogs\prompts\20260927_161240_001.txt 2026-09-27 16:12:44 | INFO | agent: [rollout_s1#002] baseurlhttps://api.deepseek.com/ key_tail**8f3a2c modeldeepseek-chat input_len158B output_len187B start2026-09-27 16:12:44 end2026-09-27 16:12:48 duration4.35s prompt_filelogs\prompts\20260927_161244_002.txt 2026-09-27 16:12:48 | INFO | agent: [rollout_s2#003] baseurlhttps://api.deepseek.com/ key_tail**8f3a2c modeldeepseek-chat input_len172B output_len203B start2026-09-27 16:12:48 end2026-09-27 16:12:52 duration3.96s prompt_filelogs\prompts\20260927_161248_003.txt 2026-09-27 16:12:52 | INFO | agent: [rollout_s2#004] baseurlhttps://api.deepseek.com/ key_tail**8f3a2c modeldeepseek-chat input_len172B output_len176B start2026-09-27 16:12:52 end2026-09-27 16:12:56 duration4.21s prompt_filelogs\prompts\20260927_161252_004.txt 2026-09-27 16:12:56 | INFO | agent: [rollout_s3#005] baseurlhttps://api.deepseek.com/ key_tail**8f3a2c modeldeepseek-chat input_len184B output_len96B start2026-09-27 16:12:56 end2026-09-27 16:12:59 duration3.12s prompt_filelogs\prompts\20260927_161256_005.txt 2026-09-27 16:12:59 | INFO | agent: [rollout_s3#006] baseurlhttps://api.deepseek.com/ key_tail**8f3a2c modeldeepseek-chat input_len184B output_len102B start2026-09-27 16:12:59 end2026-09-27 16:13:02 duration2.98s prompt_filelogs\prompts\20260927_161259_006.txt 步骤1 软估计价值 2/2 1.0 步骤2 软估计价值 0/2 0.0 步骤3 软估计价值 2/2 1.0 自动过程标签 [1.0, 0.0, 1.0]零人工标注 2026-09-27 16:13:02 | INFO | agent: 2026-09-27 16:13:02 | INFO | agent: LLM 调用总结共 6 次输入长度(字符) avg171 max184 min158输出长度(字符) avg163 max214 min96耗时(秒) avg3.77 max4.35 min2.98 2026-09-27 16:13:02 | INFO | agent: 逐帧看这六次续写干了什么步骤 1好步骤从正确的方程出发两次续写都顺利走到 23 → 标签 1.0步骤 2坏步骤带着 x18 续写模型顺着算出男生 184 22与真值 23 不符 → 标签 0.0错误步骤被结局出卖了。这是我在 deepseek-chat 上实测的一组输出——你的某次续写里模型若发现矛盾自己纠回 19会打出 1/20.5 的中间值数值会随模型与温度波动但好步骤高、坏步骤低的大方向很稳步骤 3收尾步答案已经写在步骤里续写只需收个尾 → 标签 1.0两次续写也明显更短更快output_len 从 200 出头掉到 96/102。对一下结果第 13 篇里 PRM 判的人工式标签是 [1, 0, 1]今天 Math-Shepherd 的自动软标签是 [1.0, 0.0, 1.0]——结论一致人力为零。六次续写调用几毛钱的成本换三个步骤级标签。生产环境把 K 调到 4、轨迹换成十几步的真实解这套流程就自动产 PRM 训练集了。当然它也有软肋MC rollout 吃推理算力下节的推广里你会看到成本怎么摊而且步骤切分本身要先靠谱——步骤边界不清续写估计就是空中楼阁这个坑后面第 25 篇讲结构化输出时一起填。从数学到代码与客服可复制的范式Math-Shepherd 名字里带 Math但思想根本不限数学。把它的三要素抽出来①轨迹可切成步骤②步骤可从中间续写③结局可自动判定——满足这三条的领域过程标签都能白嫖。代码场景Agent 修 bug 的轨迹是一次次代码编辑。要判断第 3 次编辑有没有用不用人看 diff——从当前代码状态出发让 Agent 接着修 K 次看最终测试通过率从这次编辑之后测试全绿的比例高说明这步是有效推进比例低甚至回退说明这步在帮倒忙。“这行代码好不好这种主观题就变成了可计算的量。这正是 CS329A 第 4 讲从工具/代码反馈中学习”RLEF执行反馈强化学习的思想内核执行反馈自动生成训练信号不用人工写一条条代码评审。客服场景一通客服对话是一串话术步骤。判断第 5 句话术好不好——从这句之后让 Agent 继续接 K 种走法用工单最终解决率或转人工率、满意度当结局解决率断崖式下跌的步骤就是坏话术。第 45 篇《案例会自我进化的智能客服系统从0到1》里工单数据自动沉淀话术技能底层就是这个逻辑。回头看这是第 12 篇生成-验证差距的第三次登场结局验证便宜测试、比对、工单结果过程标注贵人看每一步——那就用便宜的验证批量换贵的过程信号。任务可验证 轨迹可分步 过程奖励自动养成。这一范式也是第 38 篇《实战拒绝采样造自我进化数据集STaR复现》和第 40 篇《实战自我出题自我进化——合成数据流水线》的理论底座。小结Math-Shepherd 用从当前步续写到结尾、以最终答案对错反推该步好坏的蒙特卡洛估计自动生成过程标签零人工标注arXiv:2312.08935。硬估计每步续写 1 次便宜但靠运气软估计续写 K 次标签平滑信息量大成本 ×K——过程标签的成本从人力变成推理算力。演示实测6 次续写白嫖 3 个步骤标签 [1.0, 0.0, 1.0]与第 13 篇 PRM 的人工式判决一致。范式可复制代码用测试通过率、客服用工单解决率反推每步价值——凡结局可判定、轨迹可分步过程奖励就能自动养成。验证环②的弹药库在本章配齐生成-验证差距第 12 篇→ ORM/PRM 对决第 13 篇→ 自动过程标注本篇。下节预告到这里五环闭环①采样 → ②验证 → ③反思 → ④记忆 → ⑤训练的前两环已经闭环成军①的采样武器库第 3 章四篇负责多生产候选②的验证弹药库本章三篇负责认出真金。但一个现实问题横在眼前——真实任务从来不是一条轨迹打天下而是几十步的行动序列错误会累积、会传染。下一章多步推理与规划开篇《ReAct范式推理与行动的交错之舞》让模型在思考一步、行动一步、观察一下结果的循环里推进任务失败可以归因到具体步骤——这既是验证器发挥火力的战场也是通往③反思环的前置工事。下一环见。如果觉得本文对你有帮助欢迎点赞、收藏、关注三连本系列持续更新中关注不迷路~