让模型写完初稿,再问它哪里需要改,最后根据意见重写。这已经是很常见的用法。2023 年 NeurIPS 论文《Self-Refine》把这个过程整理成了一个循环。同一个模型先生成结果,然后给自己写反馈,再带着反馈修订,直到达到停止条件。

这个办法不需要为一次任务重新训练模型,也不需要另外准备强化学习。它把初稿提示、反馈提示和修订提示接在推理阶段。作者项目页还强调反馈要能定位问题,并给出可执行的修改方向。只说“还能更好”,下一轮并不知道该动哪里。

改稿循环要有明确标准

论文在七类任务上做了评估,范围从对话回复到数学推理。作者报告的平均绝对改善约为 20%,项目页列出的不同任务改善范围从 5% 到 40% 以上。这些数字同时混合了人工偏好与任务专用指标,并不等于任何业务的错误率都会下降两成。

七类任务里还有评论改写、缩写词生成、故事生成、代码改写、受约束生成和有害内容去除。它们对“更好”的定义差别很大。故事可以交给人比较,代码可以运行,格式可以机械检查。把这些结果平均在一起能说明方法有广度,却不能替某个新任务选好验收标准。

一段文字是否符合语气,可以通过修订变得更好。算式是否正确,靠同一模型再看一遍就没那么稳。另一项关于推理自我纠错的研究发现,没有外部反馈时,模型难以稳定修正推理答案,有时还会把原来的答案改差。

同一个盲点可以连续出现

初稿和反馈都来自同一模型。它若没有识别某个事实错误,反馈可能只会改掉措辞。它若把“更像高分答案”当成目标,多轮修改还可能越来越迎合评分器。有研究在文章修改任务中观察到,反复自我修正可以让模型评分和人类判断分离。

循环还会把历史内容不断追加进提示。作者项目把先前输出与反馈保留下来,让下一轮知道已经改过什么。这能减少重复犯同一种错,也会增加上下文长度。轮次多了以后,旧反馈可能与新稿不再对应。保留多少历史、何时停止,都会变成实际成本。

停止条件也不能只写成“模型觉得够好”。作者公开的伪代码把停止判断留给具体任务。软件代码可以跑测试,数字可以用计算器复核,引用可以回到原文。客观的外部结果比第三次“我已检查”更有用。

实际使用可以限制一次或两次修改,每轮保留初稿、反馈和新稿,比较外部检查结果。新稿没有变好,就回到上一版。这样的循环有出口,也能看出模型究竟改对了什么。

反馈最好写成能复核的差异。比如少了一个必填字段,引用链接打不开,函数没有通过某条测试。风格类要求也要尽量给出目标样例。若反馈只能重复“更专业、更完整”,多跑几轮通常只会把句子越写越满。

参考资料