把大模型建议接入行为树回退:主题封面

守卫等待模型给出调查计划时,仍需要避障、观察危险和继续巡逻。如果模型超时就让整棵树停住,偶发的网络延迟会直接变成角色发呆。更合适的接法,是把模型建议包装成可失败、可取消的行为节点,并保留确定的回退分支。

这里讨论一棵简化的优先级树:紧急避险优先,其次执行经过校验的模型动作,最后做普通巡逻。模型负责提出候选意图,行为树负责在当前情境下选择可运行的分支。

节点返回值要对应真实阶段

模型请求尚未结束时,可以返回 Running,但必须有截止条件。请求被拒绝、解析失败或动作前置条件不成立时,返回 Failure,让父节点尝试后面的回退分支。只有动作达到定义好的完成条件,才返回 Success。

“拿到了合法 JSON”不等于“调查任务完成”。如果节点只负责获取建议,可以在建议通过校验后成功结束,再由另一个执行节点处理动作;两种职责不要混在一个成功标记里。

Unity Behavior 的节点类型说明列出了按顺序尝试分支的节点。不同包和自研行为树的重入、记忆及中断规则可能不同,接入时需要核对实际实现,不能只凭节点名字推断运行细节。

把大模型建议接入行为树回退:机制示意

SELECTOR 表示分支选择,MODEL 路径以 FAILURE 结束后可尝试 PATROL,RUNNING 表示巡逻仍在执行。两条路只解释候选分支和回退,是否重评估及何时打断仍取决于具体行为树实现。

请求只在进入节点时创建一次

Enter: create request with generation G
Tick: pending and not expired -> Running
Tick: rejected or expired -> Failure
Exit: invalidate G and release temporary resources
Callback: accept only if G is still active

这是生命周期伪代码。关键是进入时发请求,后续 tick 轮询已有状态,避免每帧提交一次。退出节点后使代次失效,即使底层取消没有及时终止计算,迟到结果也不能重新写回黑板。

回退分支也要能被打断

普通巡逻开始运行后,危险出现应能切换到避险分支。需要的是父节点的优先级重评估或观察中断,不能假设某个选择器会每帧自动从第一个子节点重跑。自研树可以显式定义重评估周期,确保长动作的取消清理会执行。

模型建议回来时也不应无条件抢占当前动作。角色已经开始一次不可中断的交互,就把建议留待下一安全点或丢弃,不能为了“响应更快”重复提交副作用。

防止失败后立即再次请求

模型分支失败后,如果下一次 tick 又从它开始请求,巡逻分支可能只运行一瞬。为失败设置冷却,或等待相关事实变化、任务阶段变化后再请求。冷却结束只代表允许尝试,仍须检查预算和角色状态。

日志记录节点代次、请求结果、回退原因和实际执行分支即可。验收故意延迟响应、让节点被危险事件打断,再观察迟到回调是否被忽略、巡逻是否能持续、资源是否释放。本文没有给出某个行为树版本的实测表现,示例需要结合项目的生命周期契约落地。

Logo

更多推荐