反思与自我修正

一次生成的答案往往不够好。反思(Reflection)是让智能体"回头检查自己的输出并改正",从"写完就交"升级为"写完、自查、改对再交"。它是提升回答质量、减少返工的低成本手段。

Self-Refine:生成—反思—修正循环

Self-Refine 是一种经典结构:先生成初稿,再让模型(可同一模型)批评初稿,然后按批评修正,可迭代多轮:

  1. 生成初始回答;
  2. 模型对回答提出批评与改进点;
  3. 依据批评生成修正版;
  4. 重复 2~3 直到满意或达轮次上限。
draft = llm(prompt)
for _ in range(2):                      # 最多迭代两轮
    feedback = llm("批评下面回答的错误与不足:\n" + draft)
    revised = llm("根据反馈改进回答:\n" + draft + "\n反馈:" + feedback)
    if score(revised) > score(draft):   # 变好才采纳
        draft = revised

Critic-Actor:批评者与行动者分工

让两个角色各司其职:Actor 负责产出,Critic 负责挑错。Critic 用独立提示词甚至独立模型,避免"自己检查自己"的盲区。Critic 的输出要具体(指出哪句错、缺什么),不能只说"不够好"。

LLM-as-Judge:让大模型当裁判

没有标准答案时(摘要是否流畅、方案是否合理),可以用另一个大模型当裁判打分。它是评测与反思共用的底座:裁判给分数和理由,Critic 按理由改,形成闭环:

verdict = judge("对以下方案打分(0-10)并给出改进理由:\n" + plan)
# 输出示例:7 分,理由:缺少回滚方案,建议补充失败处理

评估—修正循环示例

把上面串成通用循环,注意"评估通过才停":

MAX_ROUNDS = 3
for i in range(MAX_ROUNDS):
    output = actor.generate(task)          # 行动者产出
    report = critic.evaluate(task, output) # 批评者评估
    if report.passed:
        return output                      # 达标即返回
    output = actor.revise(output, report)  # 按意见修正
return output  # 达上限:返回最后一版并打日志

反思的成本提示

  • 反思每轮都增加额外请求,成本约翻倍,务必设轮次上限(2~3 轮足够);
  • 反思适合"可复查"任务(代码、文本润色);对需要外部事实的任务,反思不如直接检索求证;
  • 可只对低置信度回答触发反思(先让模型自评置信度),而不是每次都反思。

小结

反思 = 生成 + 批评 + 修正的循环。Self-Refine 最简,Critic-Actor 通过角色分离减少盲区,LLM-as-Judge 提供无标准答案时的裁判。控制轮次与触发条件,反思就是性价比极高的质量杠杆。

笔记加载中…