引言
在我的世界这种虚拟环境中,要完成一些任务目标是很复杂的,并不能通过单步推理完成,往往需要多步推理。然而,现有的方法往往是正向推理,它们进行到某一步后,就不知道下一步应该怎么做了,就如图中上半部分的例子所示,要获得一把钻石镐,前面的推理过程还可以照常推理下去,然而到了中间的某一步之后,就不知道下一步要干什么了。
在反向推理的方式中,如图中下半部分,首先是假设自己已经获得了一把钻石镐,那么就会开始思考,要实现这个假设,我应该怎么做。这样一步一步往前推,直到最开始的那一步。
然而,反向推理也不是一个完美的解决方案。
就如上图所示,反向推理的代理只考虑了要实现的目标,而没有考虑当前🌏世界环境的状态。就如图中的例子所示,当前的史蒂夫是在地面上的,石头只在地面下存在,这就导致了冲突,导致这条推理链失败,导致最后的任务失败
框架
BAR 总共有三个模块
1️⃣:递归目标分解模块(recursive goal decomposition module)
2️⃣:状态一致性维护模块(state consistency maintaining module)
3️⃣:阶段记忆模块(stage memory module)
递归目标分解模块
- 任务目标(Task Goal)
- 顶层目标:
Obtain 1 钻石镐(获得 1 把钻石镐) - 这是整个流程的起点,所有子目标和步骤都围绕它展开。
- 目标分解(Decomposition)
-
顶层目标会被递归分解:
-
分解为可执行步骤(Step,蓝色框)和子目标(Sub-goal,绿色框)
-
例如:
Obtain 1 钻石镐→ 分解为Craft 1 钻石镐(步骤) + 3 个子目标:Collect 3 钻石Obtain 2 木棍Obtain 1 工作台
-
-
子目标会继续分解,直到所有节点都变成可直接执行的原子步骤(比如 “挖石头”“做木板”)。
- 执行队列与栈
- 目标队列(Goal Queue) :存放待分解的子目标,遵循 “先进后出” 的栈式逻辑,总是先处理最顶层的目标。
- 步骤栈(Step Stack) :存放所有最终分解出的可执行步骤,按顺序依次弹出执行。
状态一致性维护模块
反向推理也不是一个完美的解决方案,没有考虑当前世界环境的状态,状态一致性维护模块则就是要解决这个问题的。
作者就提出通过正向推理和反向推理来保持状态一致性的方法。
采用正向推理的规划方法,在选定的锚步之间生成局部规划,最后,对初始方案和补充部分方案进行整合,以纠正初始方案中可能出现的错误。
流程总结
- 初始计划 → 发现步骤存在逻辑漏洞(比如缺少挖地下的步骤)。
- 锚定问题区间 → 用评分或滑动窗口定位需要修正的步骤段。
- 正向推理补全 → 基于规则推理,插入缺失步骤。
- 生成改进计划 → 得到更完整、可执行的步骤序列。
阶段记忆模块
如果每个任务都要像之前的那种顺序执行一次,那么效率太低了,每次都要很多轮的迭代。因此,就设计了一个阶段记忆模块,相当于代理的“经验库”。