Enhancing LLM Planning Capabilities through Intrinsic Self-Critique

0 阅读3分钟

现有方法不足

以往通过self-critique来增强LLM的方法往往表现不尽如人意,文章认为主要是因为缺少足够的自我评估的能力,所以导致结果高FP、漏掉几乎所有TN(例如,模型经常会对结果给出过于乐观的评估)。

所以之前的迭代计划优化工作往往利用外部反馈,例如借助oracle的验证或者依赖人类输入,但这种优化方法代价太大,实际应用中不现实。

本文contributions

本文提出了一种使用zero-shot或few-shot prompt来完成有效自我批判的方法,无需使用外部的验证器。

提高自我批判准确性的三个核心机制(降低 FP 并有效识别 TN):

  1. 模拟形式化验证器的提示词设计 (Prompt Design Simulating a Validator)

前人工作:直接问 LLM “这个计划对不对”,缺乏具体的验证依据❌

这篇文章:强迫 LLM 扮演一个“规则执行器”的角色,而非简单的“评论员”。

  • 引入领域定义 (Domain Definition): 自我批判的 Prompt 中包含完整的 PDDL 定义(动作Actions、先决条件Preconditions和效果Effects),作为LLM 的验证标准

    • 逐步状态验证 (Step-by-Step State Verification): 不让模型直接给出最终结论,要求模型对计划中的每一个步骤进行验证:

      • 提取当前动作及其先决条件。
      • 验证当前状态是否满足这些先决条件。
      • 应用动作的效果,推导出新的状态(Resulting State)。

类似“思维链”(Chain-of-Thought)的强制推理过程,“睁眼说瞎话”❌。

如果一个计划是错误的(即真阴性 TN),在逐步推演中必然会在某一步不满足先决条件,从而迫使模型识别出错误,降低漏判率。

  1. 自洽性机制 (Self-Consistency)
  • 多次采样投票: 自我批判阶段生成 N 个评估样本(例如 5 次)通过多数投票(Majority Voting)来决定最终的评估结果。

单次生成的批判可能存在幻觉或随机错误,但通过集体的投票,可以显著过滤掉偶然的判断失误。

实验数据显示,加上自洽性后,准确率进一步提升,非常接近使用外部验证器(Oracle)的效果。

  1. 迭代式的反馈闭环 (Iterative Feedback Loop)

文章不仅仅是一次性批判,而是将批判嵌入到一个迭代循环中。

  • 利用错误历史: 如果自我批判判定计划是错误的,它不会直接放弃,而是将错误的计划批判的具体内容(指出哪一步错了、为什么错)作为上下文(Context),再次输入给生成器。

这种机制让模型能够“吸取教训”。生成的 Critique 不仅仅是判断对错,还提供了具体的错误定位,帮助模型在下一轮生成中规避之前的错误,从而逐步逼近正确答案。

总结

前人的工作只是问 LLM:“这个计划好吗?”,导致 LLM 倾向于奉承或产生幻觉(高 FP)。

这篇文章通过 “给出规则书 -> 逐步推演状态 -> 多个人(多次采样)投票确认 -> 错了就把教训记在小本本上重来 ” 这一整套流程,让 LLM 的自我批判具备了类似程序化验证器的严谨性,从而实现了高精度的自我纠错。

这个算法的精髓在于:

  1. 闭环反馈:不需要外部的 Python 脚本或 PDDL 验证器,LLM 自己既是“执行者”也是“裁判”。
  2. 从错误中学习 (In-Context Learning) :通过不断累积 τ\tau,模型在同一个会话中通过上下文获得了“短期记忆”,逐步逼近正确答案。
  3. 稳健性 (Robustness) :在批判阶段引入 NN 次采样(Self-Consistency),解决了 LLM 经常无法准确判断自己错误的问题。

感兴趣的可以看附录D中的示例,很详细。

附录E通过Mystery Blocksworld实验,证明模型不是在死记硬背。