本文介绍了OpenAI的Agent RFT(强化微调)技术,这是一种让AI Agent通过自我试错学习的新方法。不同于传统的Prompt工程和监督微调,RFT通过奖励信号让Agent自主探索最优策略,而非人工指导。文章详细解析了RFT的训练原理、评估器设计关键原则、适用场景及实际案例效果,展示了其在提高Agent效率和性能上的显著优势。最后提供了工作流程建议和API使用指南,帮助开发者实践这一技术。

前排提示,文末有大模型AGI-CSDN独家资料包哦!

做过 Agent 开发的朋友应该都有体会,调 Prompt 真是个细活儿。有时候就改了几个词,模型的表现就可能天差地别。工具描述写得不够清楚,工具数量一多,模型就不知道该怎么选择了。任务定义稍微含糊一点,输出就开始极不稳定。这也是为什么很多 Agent 产品发布都很惊艳,但实际场景一上手就完全是另外一回事了。

最近看到 OpenAI 在 Build Hour 上聊了个新东西,叫 Agent RFT,强化微调。走的是另外一条完全不同的路,也就是不再人工调优,而是让 Agent 自己去实际任务里试错,做对了就奖励,做错了就惩罚,这样 Agent 自己就可以找到最优的道路。本文是 Agent RFT 视频的一些学习笔记,推荐观看原视频 https://www.youtube.com/watch?v=1s_7RMG4O4U。

NotebookLM生成的原理图

Agent 的本质

Agent 的本质是工具调用循环,它能够和外部世界互动,独立完成任务,不需要总是等着人工介入。

为了把事情做好,Agent 就必须能访问工具。编程 Agent 需要访问终端、代码解释器,甚至整个代码库。客服 Agent 可能需要访问内部软件,查找客户记录、管理退款,或者决定要不要升级给人工处理。

Agent 与外部世界的所有交互都会流回它的上下文窗口。Agent 根据工具的输入输出进行推理,进而再调用另一个工具,周而复始,直到完成整个循环。

传统 Agent 优化方法

当 Agent 性能不够好时,大家通常会尝试三板斧:

1

Prompt 工程:优化提示词,引导模型更好地完成任务。

2

工具优化:增减工具,改进工具本身,调整工具的描述和命名。

3

任务简化:简化任务,添加护栏,提高成功率。

这三板斧在很多场景下确实有用。但当你把它们都用完了,性能还是不够好怎么办?

OpenAI 给出的新答案就是 Agent RFT。它能够端到端地训练 Agent,根据用户指定的奖励信号来改变模型的权重。奖励信号教会模型哪些是好的行为,哪些是不够好的行为。

Agent RFT

Agent RFT 的核心是强化学习,其核心思想很简单:Agent 尝试做某件事,环境给出奖励或惩罚,Agent 根据反馈调整策略。这就像训练小狗。不需要你告诉它每个动作细节,只需要在它做对时给奖励,做错时不给。经过无数次尝试后,小狗自然就学会了。

RFT = 强化学习 + 微调。具体来说:

1

模型会对同一个问题生成多个不同的答案;

2

你定义的评估器会给答案打分;

3

训练算法会强化高分答案对应的推理路径,抑制低分答案的路径;

4

经过多轮迭代,模型逐渐学会生成高分答案。

与 SFT 的区别

传统的监督微调(SFT)是什么样的?你给模型一堆“问题-答案”对,让它死记硬背。

而 RFT 完全不同。它不告诉模型“正确答案是什么”,而是告诉模型“什么是好的行为”。

这种差异也就导致:

SFT:模型学会了在特定场景下输出特定答案,但举一反三能力有限。

RFT:模型学会了如何更好地使用工具、如何更高效地推理,能力可以迁移到类似任务。

Will 和 Theo 在分享里提到一个特别好的观点:SFT 就像让学生死记硬背教科书,而 Agent RFT 则是让学生进入实验室,允许他们犯错,尝试不同的解题路径,最后根据结果来打分。

RFT 的训练过程

OpenAI 把 RFT 的训练过程比喻成登山,特别贴切。

假如你在一个完全被迷雾笼罩的山上,看不见山顶,也不知道自己在哪。你唯一能感知的,就是脚下的地形——每走一步,能判断自己的位置升高了还是降低了。

你会怎么做?往不同方向试探性地走几步,感受哪个方向让位置升高,然后继续朝那个方向走。不断重复,无数次试探后,自然就会站在山顶上。

RFT 的训练过程就是这样。模型不知道“最优策略”是什么,但它知道每次尝试能拿多少分。它会尝试不同的工具调用顺序,看看哪种顺序得分高,然后逐渐倾向于使用高分策略。经过无数次迭代,找到最优解。

RFT 的效果

OpenAI 团队为了展示 RFT 的实际效果,选择了极具挑战的 FinQA 基准测试,并故意把任务改得更难:不给模型任何财务报告,只给问题,让模型自己在 2800 份财务报告中搜索,还必须在 10 次工具调用内找到答案。

RFT 训练仅 10 个步骤后,平均奖励就从 0.59 提升到 0.63(提高 7%),工具调用次数从 8-9 次降到 4.2 次(减少 53%),平均延迟减少 10%,Token 数减少 40%。也就是说,在没有人教它顺序的情况下,RFT 训练让模型后学会了“精准搜索→确认路径→读取内容”的最高效组合。

除了 FinQA 基准,OpenAI 一些客户公司的案例同样也很精彩:

Cognition 的 Devin AI 工程师通过 RFT 学会了并行操作,规划阶段的交互次数从 8-10 次降到 4 次。

Ambience 用 RFT 优化 ICD-10 医疗编码任务,F1 分数提升 10%,响应时间减少 18%。

GenSpark 通过设计同时评判内容和视觉的评估器,让幻灯片创建 Agent 的性能在不良案例中提升了 88%。

MAKO 用仅仅 100 个 PyTorch 提示就让 GPT-4o 学会为新硬件编写 GPU 内核,性能超越现有技术 72%。

Rogo 遇到了奖励欺骗问题——模型发现了评估器的漏洞疯狂刷分,修复后核心性能提高 21%,这个教训告诉我们:做 RFT 的核心不是训练模型,而是设计好评估器。

评估器设计

通过前面的案例,可以看到,评估器的设计是 RFT 成功的关键

OpenAI 团队总结了评估器设计的几个核心原则:

1. 提供梯度奖励

反例(二元评分):0/1 评分方式会让模型困惑:“我明明很接近了,为什么还是零分?”

正确做法(梯度奖励):0-1 浮点分,让模型知道怎么做会拿更高的分。

2. 评估器要能抵抗欺骗

评估器必须能抵抗“奖励欺骗”,比如要能防范下面这些常见的欺骗方式:

输出特定格式骗取高分(Rogo 遇到的问题)

通过运气猜对答案,但推理过程是错的

输出大量信息,把正确答案淹没在其中

设计技巧

使用 Model Grader 而不是简单的字符串匹配

检查推理过程,而不只是最终答案

对“幸运猜对”给予低分

设计多维度评分(如 GenSpark 同时评判内容和视觉)

3. 符合领域知识

评估器的评判标准必须与人类专家保持一致。检验方法:

让人类专家评判一批样本

让评估器评判同样的样本

计算两者的一致性(如 Cohen’s Kappa)

如果一致性低,说明评估器的标准有问题,需要调整。

4. 明确评分维度

对于复杂任务,最好使用多维度评分。OpenAI 提供了 Multi-Grader 配置:

{  "type": "multi",  "graders": {    "accuracy": {      "type": "score_model",      "weight": 0.5    },    "efficiency": {      "type": "string_check",      "weight": 0.3    },    "format": {      "type": "text_similarity",      "weight": 0.2    }  },  "calculate_output": "0.5 * accuracy + 0.3 * efficiency + 0.2 * format"}

这样可以同时优化多个目标。

5. 考虑效率因素

除了准确性,RFT 还可以优化效率。方法是在奖励函数中添加效率惩罚:

reward = accuracy_score - 0.01 * num_tool_calls - 0.001 * num_tokens

这种设计会鼓励模型:

用更少的工具调用

生成更简洁的推理过程

在保持准确率的前提下提升效率

这就是为什么 FinQA 案例中,模型自发地减少了工具调用次数。

什么时候适合用 RFT

RFT 虽然强大,但不是万能的。什么时候该考虑使用 RFT 呢?OpenAI 给出了四个关键信号:

1. 任务明确且受约束

任务需要具备领域知识或审美方面的共识。

好的例子

医疗编码:有明确的 ICD10 标准

数学问题:有确定的正确答案

代码正确性:可以通过测试验证

不好的例子

创意写作:没有绝对的正确答案

情感分析:主观性太强

开放式头脑风暴:目标不明确

2. 有非零的基线性能

模型必须有时能做对。如果基线成功率是 0%,RFT 也无能为力。

检验方法

对每个样本运行多次(如 3-5 次)

看看"最佳轨迹"的平均性能

如果最佳轨迹的准确率 > 20%,RFT 有戏

3. 有足够的方差

如果模型每次运行的结果都一样,RFT 没有空间去学习“什么是好的”。

理想情况

同一个问题,模型多次运行会有不同表现

有些运行能得高分,有些得低分

RFT 会推动所有运行向高分运行看齐

4. 你需要优化效率,不只是准确率

如果你只是想提高准确率,传统的 SFT 可能就够了。

但如果你还想:

减少工具调用次数

降低延迟

减少 Token 消耗

那 RFT 就是理想选择。

RFT 不适用的场景

以下情况不建议使用 RFT:

任务太简单:单次 LLM 调用就能搞定的任务,没必要 RFT

没有评判标准:无法定义"什么是好的"

基线性能为零:模型完全不会做任务

数据太少且质量差:虽然 RFT 样本高效,但也需要一定的数据量

工作流建议

OpenAI 给出的优化流程是:

1

构建高质量数据集:确保训练集和评估集紧密匹配你的生产流量。

2

建立基线:运行评估,了解基线性能。

3

非 RFT 优化:先尝试 Prompt 工程、工具优化等简单方法。

4

转向 RFT:当简单方法到瓶颈时,再使用 RFT。

记住:只有在明确改善结果时,才应该增加复杂性。

动手试试:API 使用指南

OpenAI 已经把示例代码放到了 Github 上,你可以到 https://github.com/openai/build-hours/tree/main/20-agent-rft 下载尝试。

基本配置

创建 RFT 任务需要:

1

训练数据和测试数据文件 ID

2

定义评估器

3

基础模型(比如 gpt-5-2025-08-07)

4

可选:JSON Schema(如果使用 Structured Outputs)

5

可选:超参数配置

简单示例

1. 上传训练和测试数据

from openai import OpenAIclient = OpenAI()training_file = client.files.create(    file=open("training_data.jsonl", "rb"),    purpose="fine-tune")validation_file = client.files.create(    file=open("validation_data.jsonl", "rb"),    purpose="fine-tune")

2. 定义评估器

GRADER_OBJECT: dict = {   "type": "score_model",   "name": "gpt41_score_model_1",   "input": [        {            "role": "system",            "content": """## System Prompt — Numerical GraderYou will be provided with the following information:- the Reference Answer- a value containing the Model's Answer.Your job is to score the Model's Answer.### Scoring RulesReturn a score of 1 if both are true:- Model's Answer contains only the final numeric answer (no extra words)- The numeric value matches the Reference Answer within slight unit differencesUnit/format variations that still count as correct:- Currency symbols (e.g., $, USD)- Magnitude suffixes (e.g., M, million, K)- Percent formats (e.g., 7% vs 0.07)- Commas and whitespace differencesReturn a score of 0.5 if the Model's Answer is very close to the Reference Answer, but is off by a tenth of a percent or less or appears to be a true rounding error.Return a score of 0 in all other cases.Please only return the numerical score, and nothing else."""        },        {            "role": "user",            "content": """- Reference Answer: {{item.reference_answer}}.- Model's Answer: {{sample.output_text}}."""        }   ],   "pass_threshold": 0.75,   "model": "gpt-4.1-2025-04-14",   "range": [0, 1],   "sampling_params": {       "temperature": 0,   },}

3. 创建 RFT 任务

model = "gpt-5-2025-08-07"reasoning_effort = "medium"n_epochs = 1seed = 42grader = GRADER_OBJECTresponse_format = Nonecompute_multiplier = 1eval_samples = 2eval_interval = 5batch_size = 16max_episode_steps = 50suffix = f"{project}-max_episode_steps_{max_episode_steps}"job = client.fine_tuning.jobs.create(    training_file=training_file.id,    validation_file=validation_file.id,    model=model,    suffix=suffix,    method=dict(        type="reinforcement",        reinforcement=dict(            tools=JOB_LEVEL_TOOLS,            grader=GRADER_OBJECT,            response_format=RESPONSE_FORMAT_COMPLETIONS,            max_episode_steps = max_episode_steps,            hyperparameters=dict(                compute_multiplier=compute_multiplier,                eval_samples=eval_samples,                eval_interval=eval_interval,                n_epochs=n_epochs,                reasoning_effort=reasoning_effort,                batch_size=batch_size            )        )    ),    seed=seed)print(f"RFT Job ID: {job.id}")

4. 监控训练

# 获取任务状态job_status = client.fine_tuning.jobs.retrieve(job.id)print(f"Status: {job_status.status}")# 获取训练指标events = client.fine_tuning.jobs.list_events(    fine_tuning_job_id=job.id,    limit=10)for event in events.data:    if event.type == "metrics":        print(f"Step {event.data['step']}")        print(f"Train Reward: {event.data['train_reward_mean']}")        print(f"Valid Reward: {event.data['full_valid_mean_reward']}")

5. 使用微调后的模型

# 训练完成后,使用微调模型response = client.chat.completions.create(    model="ft:o4-mini-2025-04-16:org:custom:job-id",    messages=[        {"role": "user", "content": "你的问题"}    ])print(response.choices[0].message.content)

写在最后

RFT 的核心启发是:有时候,最好的优化来自放手让模型自己探索。我们习惯把 Agent 的每一步都规定好,生怕它走错路。但 RFT 告诉我们,只要给它一个明确的目标(奖励函数)和足够的工具,它可能会找到你想不到的优化策略。

如果你想尝试 RFT,建议:

1

从小规模开始:几十到几百个样本就够了。

2

把精力投在评估器上:这比优化 Prompt 重要得多。

3

同时优化准确性和效率:用多维度评分。

4

定期检查奖励欺骗:模型可能会钻评估器的漏洞。

最后一点很重要:不是所有场景都需要 RFT,先尝试上下文工程、工具优化、任务优化这些传统方法,达到一定瓶颈之后才需要 RFT。

相关链接:

视频:https://www.youtube.com/watch?v=1s_7RMG4O4U

Agentic RFT 示例代码:https://github.com/openai/build-hours/tree/main/20-agent-rft


好了,今天就聊到这儿。如果你也在探索 AI 工具和云原生技术,欢迎关注 Feisky 公众号,我会定期分享实践中的发现和踩坑经验。

读者福利:倘若大家对大模型感兴趣,那么这套大模型学习资料一定对你有用。

针对0基础小白:

如果你是零基础小白,快速入门大模型是可行的。
大模型学习流程较短,学习内容全面,需要理论与实践结合
学习计划和方向能根据资料进行归纳总结

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

请添加图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

这里我们能提供零基础学习书籍和视频。作为最快捷也是最有效的方式之一,跟着老师的思路,由浅入深,从理论到实操,其实大模型并不难

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐