理解大模型训练中的PRM(过程奖励模型)训练

奖励建模(Reward Modeling)实现人类对智能体的反馈 人类反馈作为一种重要的教育资源,可用于指导智能体尤其是其中包含的大语言模型进行学习和改进,进而使得智能体在处理复杂任务时能够更准确地模拟人类智慧,并产生更为人性化和实用的交互效果。在实践中,这种结合已应用于诸如聊天机器人、虚拟助手、自动写作助手等多种场景。 这样,通过不断迭代和学习,大语言模型就能更好地适应和满足人类的沟通需求和价值观,从而展现出更强的交互能力和更好的表现。 阅读详情
AI摘要

本文聚焦ORM奖励模型,介绍其在LLM研发中的作用,如在RLHF中是关键一环、用于拒绝采样与SFT、作为业务场景的Verifier。还基于OpenRLHF源码,从样本数据、数据处理、模型结构、Loss函数等方面详细解读了ORM的训练过程。

作者:姜富春
原文:https://zhuanlan.zhihu.com/p/14993645091

导语

LLM Post-Training过程中,会出现较多使用Reward Model的场景。那么LLM中Reward Model是什么?其实简单说就是按照人的偏好制定的一种奖励规则。比如在文创场景:

  • • 场景1:创作的内容越丰富,越有层次的结果认为是好结果,奖励分会高,相反奖励分就低。

  • • 场景2:创作的内容越通俗易懂越好,奖励分高,越阳春白雪越差,奖励分越低

所以从上面的场景可以看出,Reward Model是按业务自定义的规则做的偏好打分,有比较强的主观性。

当前Reward Model 有两种主流的范式:

  • • ORM(Outcome Reward Model): 在生成模型中,通常是对生成的结果整体做一个打分。

  • • PRM (Process Reward Model):在生成的过程,分步骤,对每一步进行打分,是更细粒度的奖励模型。在CloseAI推出O1之后,PRM逐渐成为业界研究的新宠 。

由于两种范式有较大的区别,本文只聚焦讲解ORM。(PRM后续会单独整理一文)

我们在了解RM的训练过程之前,先聊聊RM在LLM研发中到底有啥用?

1.LLM场景中RM的作用

在LLM研发范式中,RM的作用真的是大大地!毫不夸张地说,有了一个好的RM模型,你的业务才能起飞,形成真正的迭代的飞轮。

下面列举几个RM的使用场景,看看他的作用。

1.1. RLHF中的关键一环

当年openAI 还真的open的时候,让我们学会了RLHF的新研发范式,其中step2就是训练一个RM,如下图1所示。(paper链接[1]),有了RM后RLHF才能转起来。RLHF是训LLM的大杀器,随着LLM模型能力从一个文科生(GPT-4) -> 理科生(openAI O1)的演进,Reinforce Learning的角色越来越重要,RM又是RL中不可或缺的部分。

图片

图1、OpenAI instructGPT RLHF架构图

1.2. 拒绝采样 + SFT

我们仔细看看真OpenAI(Mata)的Llama3.1的paper(paper地址[3])。post-training阶段的训练流程,如下图2所示。这是一个飞轮迭代的过程,Llama转了6轮。

图片

图2、Llama3 post-training 框图

我们来看看Llama做Post-training的飞轮过程:

1.持续通过人工标注或机造方式富集偏好pair样本,训练Reward Model

2.基于当前能力最好的模型,随机采集一批,每个Prompt拿最好的模型做  次数据生成采样,每个Prompt就得到条  数据

3.拒绝采样:对第2步采样 个数据,用Reward Model打分,并从中选取打分最高 topN 条样本。作为指令微调的精选样本,训练SFT Model。

4.训完SFT Model,再通过持续收集的偏好对样本(同步骤1)做对齐学习(Llama使用的是DPO)。最终得到了一个比当前模型更好的模型

5.持续做步骤1~步骤4,飞轮迭代优化模型。

拒绝采样是我们自动化做样本工程的非常重要方法,这里面Reward Model 是最关键的角色。

我个人理解,拒绝采样也是一种对齐学习的方法,本质上跟PPO和DPO发挥的作用是一样的,只是一个是直接在SFT阶段做对齐,一个是在SFT后做对齐。

1.3. 业务场景的Verifier

我们总说LLM在应用场景落地时,会有幻觉问题、有安全控制等问题,当然这些能力都能在训练中模型优化。但总有些恶意攻击者,或总有些不经意的场景会突破模型的能力范畴,模型会给出智障的回答。在这种场景下,模型后面可以接一个判别器(Verifier),对结果做个校验,满足判别阈值之上的结果才输出,不满足判别条件的做再生成或兜底降级处理。Reward Model就是就可以充当这个判别器的角色,可以对LLM的结果做一层校验控制,以输出更可靠的结果,如图3所示。(当然也有Reward Model失控的场景,这属于Reward Hacking范畴,这是一个比较深刻的话题,本人当前涉及比较浅薄,暂不讨论这块)

图片

图3、业务落地Reward Model作为判别器控制生成结果

相信通过上面的介绍,我们了解了Reward Model,也意识到了Reward Model的重要性。我们可以结合自己的场景,好好想想、也该好好搞搞Reward Model吧。标注样本的时候想想Reward Model的样本怎么采集、怎么标注,别一股脑上来就是SFT,到项目干完还是SFT,完全飞轮不起来。(才思泉涌,说跑偏了......)

我们回到正题~

本文接下来主要基于OpenRLHF源码,详细讲解下ORM(Outcome Reward Model)的训练过程。(注:为方便阅读,本文后面统一将ORM称为Reward Model, 简写RM)

2.源码解读Reward Model训练过程

RM训练的入口函数详见:train_rm.py。接下来我从样本、数据处理、模型结构、loss几个方面详细讲解下RM的训练过程

2.1. 样本数据

训Reward Model的样本数据一般是一个pairwise的训练数据。典型的样本格式是个三元组

一条question样本,带着两个answer,一条正例、一条负例。对于生成模型的RM的样本,通常会对这个三元组称做

也可以表述成另一种二元组的形式:

把prompt 拼接上每个回答,构成一个完整的问答对,pair前一项 prompt + chosen 表示一个好的问答对;后一项  表示一个差的问答对。

本文以huggingface的一个Reward样本数据为例(地址:preference_dataset_mixture2_and_safe_pku[4]),看下具体的样本格式。如下图:

图片

图4、偏好样本数据图例

数据共有四列,除了上面描述的 chosen 和 rejected 两列(这两列是拼接了prompt的格式),还有两列chosen_score 和 rejected_score,表示样本的置信度,可以按该打分的绝对值和差值做些样本筛选处理。

我们展开一条样本看下:

图片

图5、一条偏好pair样本

上面这条样本是个chat格式的,这是NLP领域处理会话任务的一种较通用的格式。上面一条样本中chosen 和 rejected内部都有两轮对话。每条对话有角色(role)和内容(content)两部分组成。在该样本中,user角色的会话相当于prompt,assistant角色的会话相当于模型生成的结果。

注:
1. 上面的样本格式是处理成公式(3)表述的二元组的格式,chosen 和 rejected 都拼接了一样的prompt。
2. 这种样本格式只是一种for对话场景的一种特殊格式。可根据业务场景灵活处理成格式不一样<chosen,rejected> pair。

下面我们来看看对这样的明文的样本数据,如何转成训练数据feed给模型的。

2.2. 数据处理

我们知道最终喂给生成模型的数据是扁平的字符串做tokenizer处理后的token_id序列,那如何从上面的json格式的对话数据,转成扁平的字符串。可能我们自然的会想到用json.dumps()处理成字符串。但json里面有大量的『转义双引号』。对于模型学习,这些格式化分割符都是影响会话连贯的噪声。

为了把chat格式数据转成扁平字符串格式,huggingface在Tokenizer类中提供了一个通用的转换方法,如下方法所示。详见:huggingface chat_templating文档[5]

tokenizer.apply_chat_template(chat, tokenize=False)

通过上面方法操作,会对会话数据加上特殊的token标记来扁平化处理好样本数据。在去掉结构化的同时,保留样本的可读性。以上面图5的样本中的chosen部分为例,处理前后的样本格式,如下图6所示:

图片

图6、chat_templating处理数据过程

从图中我们可以看到,对于结构化的数据,通过增加<|user|> 、<|assistant|> 特殊token来标记会话,将数据扁平化。

注:这里的<|user|> 、<|assistant|>是能根据自己的业务需求定制化开发的,不是固定不变的token,详见官方文档[6]。

源码中数据处理的核心逻辑封装在RewardDataset中,详见:reward_dataset.py[7]。样本数据处理逻辑比较清晰,我们图示化出处理过程,如图7所示。

图片

图7、数据做转置处理

数据处理过程中,将一个 的样本除了做chat_templating、token化等处理。还把每条样本的chosen 和 rejected部分拆开,变成两条样本,最终组成了一个 长度的样本,并且所有的chosen样本排在前 行,所有的rejected样本排在后 行。

至此我们理解了Reward Model样本处理的过程。接下来就是模型训练了。我们先看下RewardModel的模型结构。

2.3. Reward 模型结构

模型结构就是生成模型(LLM)之上,加了一个regression head,然后获取每条样本的最后token(eos)位置的打分作为该条样本的整体得分,如图8所示。

图片

图8、Reward 模型结果

还记得我们上面处理样本,如图7所示,前Batch条chosen样本,后Batch条rejected样本,所以模型预估输出打分后,又对前后两半数据做了分片处理,抽取出chosen_rewards和rejected_rewards。如下操作:

# 源码: https://github.com/OpenRLHF/OpenRLHF/blob/main/openrlhf/trainer/rm_trainer.py#L355C5-L355C45
def packed_samples_forward(self, model, ...)
    all_values = model(...)
    ################
    # 参考图7数据处理的过程,就理解下面的操作了~
    ################ 
    half_len = len(packed_seq_lens) // 2
    chosen_rewards = all_values[:half_len]
    rejected_rewards = all_values[half_len:]

接下来我们再看看有个chosen_rewards和rejected_rewards后的loss计算过程。

2.4. Loss 函数

源码中提供了两种loss,分别是PairWiseLoss和LogExpLoss,具体实现如下:

class PairWiseLoss(nn.Module):
    '''
    Pairwise Loss for Reward Model
    '''
    def forward(self, chosen_reward, reject_reward, margin):
        if margin is not None:
            loss = -F.logsigmoid(chosen_reward - reject_reward - margin)
        else:
            loss = -F.logsigmoid(chosen_reward - reject_reward)
        return loss.mean()


classLogExpLoss(nn.Module):
    '''
    Pairwise Loss for Reward Model
    Details: https://arxiv.org/abs/2204.05862
    '''
    def forward(self, chosen_reward, reject_reward, margin):
        loss = torch.log(1 + torch.exp(reject_reward - chosen_reward)).mean()
        return loss

乍一看两个loss完全不一样,但单简推导下,其实是一个东西,如下推导:

我们再看下PairWiseLoss的曲线图,如图9所示。当  时loss急剧上升,表示正例样本的得分小于负例样本的得分,产出较大的loss, 回传产生较大梯度更新模型。当 基本趋近于0,表示正例得分大于负例的得分是合理的,不产生loss。我们也可以看到PairWiseLoss有个良好的属性:自带margin效果。 因为在0附近也会产生一定的loss,来更新模型,拉大正负例的差距。

图片

图9、PairWiseLoss函数曲线图

至此,我们基于OpenRLHF源码,完整描述了Reward Model训练过程。回头看看,其实Reward Model训练就是传统的机器学习PairWise训练过程。搞清楚Reward Model的正负样本数据和格式,无他~

3.总结

本文描述了ORM (Outcome Reward Model)的定义和作用。并基于OpenRLHF源码详细解读了ORM的训练过程。在RM的研发范式中,还有最近比较火热的PRM(Process Reward Model)。

引用链接

[1] paper链接:https://arxiv.org/pdf/2203.02155
[2]姜富春:OpenRLHF源码解读:1.理解PPO单机训练:https://zhuanlan.zhihu.com/p/13043187674
[3]paper地址:https://arxiv.org/pdf/2407.21783
[4]preference_dataset_mixture2_and_safe_pku:https://huggingface.co/datasets/weqweasdas/preference_dataset_mixture2_and_safe_pku
[5]huggingface chat_templating文档:https://huggingface.co/docs/transformers/main/chat_templating
[6]官方文档:https://huggingface.co/docs/transformers/main/chat_templating

RM奖励模型 本篇将介绍InstructGPT的RM过程,也就是reward model的训练,废话不多说,直接上干货。 阅读详情

相关推荐

人工智能LLM模型: 奖励模型的探究

奖励模型是强化学习的一种机制,它为智能体的每个行为提供“评分”。这些评分起到了类似奖励和惩罚的作用,以帮助智能体在任务中逐渐选择最优的行为策略。与人类一样,智能体也需要反馈来改善行为,而奖励模型的分数就成了它们“如何做得更好”的依据。在自然语言处理(NLP)等领域,奖励模型常用于人类反馈强化学习(RLHF),例如指导聊天机器人更自然地回应、生成更连贯的文本,或提升机器翻译的准确性。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 605

彻底搞懂大模型 LLM的构建流程(二)奖励建模(Reward Modeling)、强化学习(Reinforcement Learning)

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

m0_56255097的博客 5711

01. VBA从入门到精通——录制宏、窗口、快捷键

excel表功能区右击→常用→选择显示开发工具选项→确定Visual Basic:打开VBA窗口宏:查看要录制的宏录制宏:准备录制宏使用相对引用:录制宏的时候对单元格的引用做一个设置宏安全性:对宏的使用做安全设置,一般设置为禁用所有宏,并发出通知,此时打开带有宏代码的工作薄时会出现警告标记,如果宏可信就选择启动。

weixin_43812198的博客 1696

OpenAI o1 复现——过程奖励模型(PRM)

o1 作为 OpenAI 在推理领域的最新模型,大幅度提升了 GPT-4o 在推理任务上的表现,甚至超过了平均人类水平。o1 背后的技术到底是什么?o1 隐藏的长思维链是如何生成的?

xx_nm98的博客 6170

别再只画版图了!用ADS RFPro的Circuit模型,快速评估滤波器加电容后的性能变化

本文详细介绍了如何利用ADS RFPro的Circuit模型功能,实现射频滤波器设计中版图与集总元器件的高效协同仿真。通过混合仿真技术,工程师可以快速评估滤波器加电容后的性能变化,大幅缩短设计迭代周期,提升工作效率。文章还提供了实战案例和高级技巧,帮助读者掌握这一创新设计方法。

weixin_28559803的博客 257

算法设计与分析 0-1背包问题 动态规划解法【超详细】

0-1背包问题 问题描述 给定i个物品和一个容量为的背包,物品的重量是Wi,其价值为Vi 物品个数为i,背包容量为C。 如何选择装入背包内的物品,使得装入背包中的物品的总价值最大? 其中,每种物品只有全部装入背包或不装入背包两种选择。 物品不能分割,不能重复使用。 动态规划算法思路 首先建立一个数组B[i][c],最上面一行表示背包容量,最左边一列表示物品编号,中间填充的数值表示当当前背包容量为C...

寒泉 4万+

聊聊PRM(过程奖励模型)

随着OpenAI O1、O3陆续推出,包括国内的一些大模型公司也相继推出, .....,让我们看到了大模型能力渐渐从一个只会"舞文弄墨的文科生"渐渐演变成了"逻辑缜密的理科生"。大家对O1的新的研发范式的各种猜想也层出不穷。也涌现出越来越多「新名词」:MCTS,RFT,......。前面提到O1是一种新的研发范式,那为什么说是新的研发范式?

AI生成曾小健3 1781

emir分析RC corner如何选择

power analysis阶段 RC corner的选择

weixin_61954252的博客 3592

PRM vs ORM:大模型训练中的奖励信号博弈论

本文探讨了大模型训练中过程奖励模型(PRM)与结果奖励模型(ORM)的技术差异与应用场景。PRM通过逐步骤评估显著提升复杂推理任务的准确性,尤其在数学证明和逻辑分析中表现突出,但计算成本较高;ORM则更适合短文本生成等简单任务。文章对比了两者在反馈粒度、训练需求和适用场景等方面的优劣,为AI模型训练提供了实用指导。

algae的博客 843

当AI学会自我验证:Chain-of-Verification如何杜绝错误决策?

2025年,大模型"幻觉"问题已成为企业落地AI的最大障碍之一——金融风控中1.2%的误判率可能导致千万级损失,医疗诊断中3%的错误可能危及生命,法律文书中5%的事实偏差可能引发合规风险。MetaAI与Google联合提出的**Chain-of-Verification(CoVe,验证链)**技术,让AI具备"自我审视"能力,通过结构化验证流程将幻觉率降低68%+,在复杂决策场景准确率提升至95%+。本文系统拆解CoVe的技术原理、实施路径与行业实战,为企业提供AI决策可靠性保障的完整方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1080

【思考模型框架】采用双钻模型:发散(桌面研究/用户访谈)→收敛(需求归类/优先级排序),输出需求规格书、追踪矩阵及产品待办清单。

设计思维双钻模型是一种以用户为中心的需求管理方法,通过"发散-收敛"的双循环确保问题定位准确、方案切实可行。第一钻石(探索→定义)聚焦"找对问题",运用用户访谈、田野调查等方法挖掘真实需求;第二钻石(开发→交付)解决"做对方案",通过原型测试、A/B测试验证可行性。该模型强调低保真验证、多团队协作和真实用户测试,避免资源浪费与伪需求开发。典型应用场景包括产品功能优化、用户体验提升等需要精准落地的需求场景。核心价值在于建立从用户痛点到解决方案的可控闭

奶爸的编程之路,也就一周冷个三天 318

大语言模型中的过程奖励模型 (PRM)

引言大型语言模型 (LLM) 在各种任务中表现出色,但复杂的推理任务,如数学问题求解或代码生成,仍然是 LLM 面临的重大挑战。传统的评估方法,例如最佳 N 个结果 (Best-of-N) 策略,通常无法捕捉推理过程的复杂性。为了解决这个问题,研究人员提出了过程奖励模型 (PRM),它通过评估中间步骤的正确性来提供详细的监...

cnzzs的博客 1277

RK3399外设驱动之MIPI

RK3399外设驱动之MIPI 文章目录RK3399外设驱动之MIPIMIPI命令解析入口代码mipi显示配置实例rk3399mipi驱动rk mipi驱动注册过程rk32_mipi_dsi.c解析 内核版本 Linux4.4 平台 rk3399 作者 nineyole MIPI命令解析入口代码 MIPI的入口代码如下:kernel\drivers\video\rockchip\screen\lcd_mipi.c static int __init rk_mipi_screen_in

学无止境 2228

【偏好对齐】通过ORM直接推导出PRM

PRM在强化学习中优于ORM,但训练成本高且数据收集困难。通过ORM直接构造PRM,可避免MCTS的高成本和不准确估计,提供更精确的奖励值。

bqw的博客 1759

innovus获取mem pin shape box脚本

innovus mem 的pin shae只能通过attitude editor看属性获取其pin shape的box,但是想用脚本处理一定box时,没有别的办法能直接获取box属性。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1108

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

大模型论文 | 突破80%准确率!首个医学AI推理验证模型Med-PRM开源发布

大型语言模型在回答医学问题方面正在不断改进。然而,它们仍然难以发现和纠正自身推理中的错误。这在医学领域是一个重大问题,因为医学关乎生命,任何步骤的错误都可能带来严重后果。为了解决这一问题,论文推出了,这是一个过程奖励模型,能够,并基于临床指南和高质量医学资源进行判断。在7个基准测试中,Med-PRM将准确率提升了高达+13.5%,使首个开源80亿参数模型在MedQA上突破了80%的成绩。论文希望这项工作能推动该领域朝着可信赖且经过验证的医学大语言模型方向迈进一步。为什么这很重要?

star_nwe的博客 1199

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

过程奖励模型(PRM)vs 结果奖励模型(ORM)深度解析:从 Monte Carlo 标注到推理验证的 LLM 推理能力训练新范式

给定问题qqq和推理步骤序列ss1s2ldotssnss1​s2​ldotssn​,ORM 仅对最终答案asna = s_nasn​给出奖励RmathrmORMqsmathbb1mathrmverifyaa∗RmathrmORM​qsmathbb1mathrmverifyaa∗)]其中a∗a^*a∗。

我的博客 216

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

层次化多步奖励模型:增强大模型推理能力的新探索

随着大模型在各类生成任务中的表现不断提升,如何进一步改进它们在多步推理任务中的能力,特别是数学和逻辑推理方面,已成为大家的关注点。本文通过引入层次化评估和高效的数据增强策略,有效提升了模型在多步推理任务中的表现,尤其在模型需要识别并纠正前序错误的场景中表现突出。

m0_59235945的博客 1479

阿里Qwen团队发布全新的过程奖励模型PRM,并且开源

大模型(LLM)是一种人工智能模型,旨在理解和生成人类语言。它们在大量的文本数据上进行训练,可以执行广泛的任务,包括文本总结、翻译、情感分析等等。LLM的特点是规模庞大,包含数十亿的参数,帮助它们学习语言数据中的复杂模式。这些模型通常基于深度学习架构,如转化器,这有助于它们在各种NLP任务上取得令人印象深刻的表现。

AI_Conf的博客 1003

如何免费激活 Win11 和 Office:MAS 激活脚本完整指南

新装的 Windows 11 右下角一直显示「未激活」,Office 打开也是灰底提示——别慌,这正是 **MAS(Microsoft Activation Scripts)** 要解决的问题:一个开源的 Windows 和 Office 激活器,把 **HWID、Ohook、TSforge、在线 KMS** 四种激活方式收进一个彩色菜单里,**免费、不要密钥**,选个编号就能跑。下面用问答的方式

gitblog_01000的博客 110

【偏好对齐】PRM应该奖励单个步骤的正确性吗?

​策略模型与问题求解。给定一个数学问题x∈Xx∈X,策略模型π\piπ从集合YY从采样应答y∼π⋅∣xy∼π⋅∣x,应答yyy通常是由多个推理步骤构成,每个步骤会使用一个换行进行分隔,即ya1a2aHya1​a2​aH​。最终的目标是如何优化π\piπ,使得其生成正确的yyy。​自回归采样与马尔科夫过程。当前LLM都是自回归的模型。因此,求解过程中的每个步骤可以看作是策略π\piπ。

bqw的博客 1345

GenPRM:思维链+代码验证,通过生成式推理的过程奖励让大模型推理准确率显著提升

过程奖励模型(PRMs)作为验证机制在提升大型语言模型(LLMs)性能方面展现出显著潜力。而当前PRMs框架面临三个核心技术挑战:过程监督和泛化能力受限、未充分利用LLM生成能力而仅依赖标量值预测,以及在测试时计算无法有效扩展。针对上述局限,这篇论文提出了GenPRM,一种创新性的生成式过程奖励模型。该模型在评估每个推理步骤前,先执行显式的思维链(Chain-of-Thought, CoT)推理并实施代码验证,从而实现对推理过程的深度理解与评估。

deephub 1万+
上一篇: 一篇Agentic RAG全栈技术最新综述
下一篇: 大学老师的期末改卷,是一场大型“海底捞”现场
AIBigModel
博客等级 码龄2年 5358粉丝 706原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值