BAR(25年5月): A Backward Reasoning based Agent for Complex Minecraft Tasks

0 阅读3分钟

引言

在我的世界这种虚拟环境中,要完成一些任务目标是很复杂的,并不能通过单步推理完成,往往需要多步推理。然而,现有的方法往往是正向推理,它们进行到某一步后,就不知道下一步应该怎么做了,就如图中上半部分的例子所示,要获得一把钻石镐,前面的推理过程还可以照常推理下去,然而到了中间的某一步之后,就不知道下一步要干什么了。

image.png

在反向推理的方式中,如图中下半部分,首先是假设自己已经获得了一把钻石镐,那么就会开始思考,要实现这个假设,我应该怎么做。这样一步一步往前推,直到最开始的那一步。

然而,反向推理也不是一个完美的解决方案。

image.png

就如上图所示,反向推理的代理只考虑了要实现的目标,而没有考虑当前🌏世界环境的状态。就如图中的例子所示,当前的史蒂夫是在地面上的,石头只在地面下存在,这就导致了冲突,导致这条推理链失败,导致最后的任务失败

框架

BAR 总共有三个模块
1️⃣:递归目标分解模块(recursive goal decomposition module)
2️⃣:状态一致性维护模块(state consistency maintaining module)
3️⃣:阶段记忆模块(stage memory module)

image.png

递归目标分解模块

  1. 任务目标(Task Goal)
  • 顶层目标Obtain 1 钻石镐(获得 1 把钻石镐)
  • 这是整个流程的起点,所有子目标和步骤都围绕它展开。
  1. 目标分解(Decomposition)
  • 顶层目标会被递归分解

    • 分解为可执行步骤(Step,蓝色框)子目标(Sub-goal,绿色框)

    • 例如:Obtain 1 钻石镐 → 分解为 Craft 1 钻石镐(步骤) + 3 个子目标:

      • Collect 3 钻石
      • Obtain 2 木棍
      • Obtain 1 工作台
  • 子目标会继续分解,直到所有节点都变成可直接执行的原子步骤(比如 “挖石头”“做木板”)。

  1. 执行队列与栈
  • 目标队列(Goal Queue) :存放待分解的子目标,遵循 “先进后出” 的栈式逻辑,总是先处理最顶层的目标。
  • 步骤栈(Step Stack) :存放所有最终分解出的可执行步骤,按顺序依次弹出执行。

状态一致性维护模块

反向推理也不是一个完美的解决方案,没有考虑当前世界环境的状态,状态一致性维护模块则就是要解决这个问题的。
作者就提出通过正向推理和反向推理来保持状态一致性的方法。

采用正向推理的规划方法,在选定的锚步之间生成局部规划,最后,对初始方案和补充部分方案进行整合,以纠正初始方案中可能出现的错误。

image.png

流程总结

  1. 初始计划 → 发现步骤存在逻辑漏洞(比如缺少挖地下的步骤)。
  2. 锚定问题区间 → 用评分或滑动窗口定位需要修正的步骤段。
  3. 正向推理补全 → 基于规则推理,插入缺失步骤。
  4. 生成改进计划 → 得到更完整、可执行的步骤序列。

阶段记忆模块

如果每个任务都要像之前的那种顺序执行一次,那么效率太低了,每次都要很多轮的迭代。因此,就设计了一个阶段记忆模块,相当于代理的“经验库”。

image.png

结果

image.png