斯坦福的 CS 329Z 课程把 Agent 系统的优化方法画成了一张选型图。第 9 讲给出的判断顺序很直接:先看数据、系统、指标这三根支柱是否齐备,再决定从上下文、权重还是让 agent 自己动手。
课程开场用了一个投票例子说明措辞的分量。在 PaLM 2 上,“Take a deep breath and work on this problem step-by-step” 的准确率是 80.2%,而 “Let's think step by step” 是 71.8%。同一类提示,换个说法就差出明显距离,靠人手调很难找到最优解。
优化的前提
课程把前提拆成三样,缺一不可:
- 数据:训练数据、轨迹、示范、人类反馈;
- 系统:模型、工作流、agent;
- 指标:通过率、LLM 评判、成本和延迟。
优化解决的是“最后一公里”问题。模型给的是通用能力,优化让它贴合具体场景。有些需求很难用 prompt 写清楚,用示例和评估反而更能表达意图。收益包括更可靠、适配特定领域、用更小的模型或更短的 prompt 降低成本,以及把成功和失败的经验沉淀下来。
先动上下文,再动权重
一般先做上下文优化,也就是 prompt 和 few-shots,因为便宜、快、省样本。少样本示例的排序会影响结果(Lu et al. 2022),用探测集上的熵来选排序,可以接近穷举所有排序后的最优效果。
自举推理是另一条路。STaR 用拒绝采样挖出正确的推理过程;DSPy 不需要微调,直接保留指标得分高的推理轨迹当示例,再搜索最佳组合,这种方式有时比人工写的推理或标准答案还好。
反思式优化里,OPRO 把历史 prompt 和对应得分给 LLM 看,让它写出新的 prompt,“Take a deep breath”就是这样被找到的。MIPROv2 分三步:先自举出示例;再结合程序结构、数据特征、成功轨迹和写作技巧生成多条候选指令;最后用贝叶斯代理模型在小批量数据上搜索“指令 + 示例”的最优组合。TextGrad 让 LLM 对输出提改进意见,像梯度一样沿系统里的各个 prompt 反向传递。GEPA 基于反思做 prompt 进化,并保留帕累托前沿上的候选,讲义称它在多个任务上优于基线,而且比 RL 省样本得多。
上下文优化不够用、想把能力蒸馏到小模型、或者 prompt 越写越长时,再改权重。SFT 的做法是用强教师模型跑 agent 任务,把轨迹拿来训练学生模型,也可以先验证结果、只保留正确的。FireAct 用 GPT-4 的轨迹微调 Llama2-13B,效果超过了直接 prompt 的 GPT-3.5,关键在于任务和环境要足够多样。
RL 让学生模型自己跑任务,按任务是否完成给奖励,前提是结果可验证。讲义对比了 PPO 和 GRPO:PPO 要在内存中保留 4 个模型、每步训练 2 个;GRPO 只需 3 个、每步训练 1 个,优势值直接用组内奖励的 z-score 计算,DeepSeek-R1 用的就是 GRPO。
On-policy 蒸馏则是学生模型自己采样生成,教师逐 token 打分,好比“复盘自己下过的棋”。讲义引用的 Thinking Machines 结果是,它比 RL 更高效,训出的模型也更好。
让 agent 自己优化
Darwin Gödel Machine 让 agent 修改自己的代码。选哪个版本当“父代”时,表现越好越优先,已有子代越多越靠后。消融实验显示,“自我修改”和“回到早期版本重新探索”这两点都不可或缺。Meta-Harness 让一个元 agent 看到全部历史经验,由它决定下一步改什么,逐步改出更好的 harness。autoresearch(karpathy)给 agent 一个代码仓库,它自己提想法、改代码、跑实验,指标变好就保留,变差就回退,并把结果记下来。讲义还引用了 Cerebras 关于“如何防止这类循环作弊”的文章。
课程给出的总结是:agent 已经是不错的优化器,因此评估指标成了最需要把控的环节。
怎么选
适合上下文优化的情况:只能通过 API 调用、无法微调的强模型;需要频繁、快速地重新优化;环境交互成本高,需要省样本。
适合权重优化的情况:上下文优化不起作用,尤其是指令遵循能力弱的小模型;手上有强教师模型,想换成更便宜的模型;prompt 已经膨胀得太长。权重优化更吃数据,但能随数千、上万条样本持续提升(OpenThoughts-Agent)。
组合使用也有讲究。BetterTogether 指出,有时最好的顺序是先优化 prompt,再优化权重,最后再回头优化一次 prompt。
热门跟贴