As Expected? Efficient LLM Planning via Expectation-Observation Consistency Verification
Organizations: Harbin Institute of Technology
Abstract
LLM planning often relies on reactive executors (e.g., ReAct) that generate a single action at each step to remain grounded in the latest observations, incurring substantial inference cost. Batched executors reduce this cost by predicting multiple actions in a single model invocation, yet they are prone to compounding errors, as intermediate observations are ignored. We propose an expectation-observation consistency verification (EOCV) mechanism for batched executors, preserving grounding while improving efficiency. The mechanism generates expectations of action outcomes and compares them with the resulting observations. Consistency permits continued execution, whereas mismatches trigger early termination and replanning from the current observation. Experiments on text-based and multimodal benchmarks across multiple backbones show broadly comparable average task performance between EOCV and reactive executors, with a 29-35% reduction in average weighted token usage. Moreover, the mechanism is model-agnostic and remains effective when integrated into state-of-the-art planners.
Figures & tables
| Method | ALFWorld | ScienceWorld | EB-Habitat | ||||
| Reward | Tokens | Time | Reward | Tokens | Reward | Tokens | |
| Reactive | 88.81 | 1.00 | 1.00 | 89.37 | 1.00 | 66.94 | 1.00 |
| Batched | 83.58 | 0.57 | 0.53 | 82.56 | 0.41 | 56.56 | 0.38 |
| Ours | 88.56 | 0.65 | 0.59 | 88.87 | 0.69 | 67.77 | 0.71 |
| Verifier | ALFWorld | ScienceWorld | EB-Habitat | |||||||
| Prec. | Rec. | Reward | Tokens | Prec. | Rec. | Reward | Tokens | Prec. | Rec. | |
| Embedding | 100.00 | 100.00 | 94.78 | 1.00 | 96.46 | 100.00 | 85.42 | 1.00 | – | – |
| LLM/VLM | 100.00 | 100.00 | 94.78 | 1.06 | 97.32 | 100.00 | 85.93 | 1.15 | 89.38 | 87.07 |
| Batched Executor | Ours | ||||
| Step | Action | Observation | Action | Expectation | Observation |
| move(glass cup, oven) | That can’t be moved there, because the oven isn’t open. | move(glass cup, oven) | You move the glass cup to the oven. | That can’t be moved there, because the oven isn’t open. | |
| activate(oven) | The oven is now activated. | close(oven) | The oven is now closed. | Terminate & Replan | |
| Setting | Reward | Tokens (M) |
| Full Model | 94.78 | 2.45 |
| w/o Expectation Skipping | 94.78 | 3.96 |
| w/o Verification | 90.30 | 1.73 |
Appendix figures & tables15 assets
Supplementary material from the paper’s appendix.
Appendix
| Model | Input Weight | Output Weight |
| Qwen3.5-4B/9B | ||
| GPT-5.5 | ||
| DeepSeek-V4.1-Flash | ||
| DeepSeek-V3.2 | ||
| Qwen3.6-Plus/Flash |
| Strategy | Prec. | Rec. | Reward | Tokens |
| Predefined | – | – | 94.78 | 1.00 |
| Automatic | 99.68 | 99.36 | 94.03 | 0.92 |
| Backbone | Skip | Pass | Fail |
| ALFWorld | |||
| DeepSeek-V3.2 | 75.55 | 11.60 | 12.85 |
| Qwen3.5-4B | 80.39 | 8.64 | 10.96 |
| Qwen3.5-9B | 77.00 | 10.78 | 12.23 |
| ScienceWorld | |||
| DeepSeek-V3.2 | 49.56 | 33.06 | 17.38 |
| Backbone | Executor | Reward | Input | Output | Weighted Tokens | Time | ||
| (M) | (M) | (M) | Ratio | (s) | Ratio | |||
| ALFWorld | ||||||||
| Qwen3.5-4B | Reactive | 79.85 | 7.15 | 1.50 | 2.39 | 1.00 | 17 394.41 | 1.00 |
| Batched | 73.88 | 5.44 | 1.03 | 1.71 | 0.71 | 9 603.92 | 0.55 | |
| Ours | 79.10 | 6.12 | 0.92 | 1.68 | 0.70 | 11 170.33 | 0.64 | |
| Qwen3.5-9B | Reactive | 91.79 | 6.15 | 1.95 | 2.72 | 1.00 | 25 984.66 | 1.00 |
| Category | Reactive | Batched | Ours | |||||
| Reward | Tokens (M) | Reward | Tokens (M) | Ratio | Reward | Tokens (M) | Ratio | |
| Qwen3.6-Flash | ||||||||
| Base | 87.25 | 0.56 | 79.75 | 0.14 | 0.25 | 89.75 | 0.27 | 0.49 |
| Common Sense | 44.00 | 1.17 | 31.47 | 0.47 | 0.40 | 45.00 | 0.69 | 0.59 |
| Complex Instr. | 54.00 | 1.06 | 52.07 | 0.30 | 0.28 | 56.00 | 0.61 | 0.58 |
| Long Horizon | 33.42 | 1.36 | 19.71 | 0.32 | 0.24 | 34.50 | 0.74 | 0.55 |
| Controller | Executor | Reward | Input | Output | Weighted Tokens | Time | ||
| (M) | (M) | (M) | Ratio | (s) | Ratio | |||
| ALFWorld | ||||||||
| Qwen3.5-4B | ||||||||
| ReflAct | Reactive | 81.34 | 7.89 | 3.48 | 4.46 | 1.00 | 40 540.94 | 1.00 |
| Ours | 81.34 | 5.45 | 2.22 | 2.90 | 0.65 | 25 778.94 | 0.64 | |
| MPO | Reactive | 88.06 | 5.11 | 1.54 | 2.18 | 1.00 | 14 173.30 | 1.00 |
| Batched Executor | Ours | ||||
| Step | Action | Observation | Action | Expectation | Observation |
| move(cup, oven) | That can’t be moved there, because the oven isn’t open. | move(cup, oven) | You move the glass cup to the oven. | That can’t be moved there, because the oven isn’t open. | |
| activate(oven) | The oven is now activated. | close(oven) | The oven is now closed. | Terminate & Replan | |
| wait() | You decide to wait for 10 iterations. | activate(oven) | The oven is now activated. | —- | |
| look_at(oven) | An oven, which is turned on. The oven door is closed. | wait() | You decide to wait for 10 iterations. | —- | |
| Batched Executor | Ours | ||||
| Step | Action | Observation | Action | Expectation | Observation |
| activate(sink) | The sink is now activated. | activate(sink) | The sink is now activated. | The sink is now activated. | |
| dunk(glass cup, sink) | The sink does not contain any liquids to dunk into. | dunk(glass cup, sink) | You dunk the glass cup in the sink. | The sink does not contain any liquids to dunk into. | |
| move(sugar, glass cup) | You move the sugar to the glass cup. | move(sugar, glass cup) | You move the sugar to the glass cup. | Terminate & Replan | |
| mix(glass cup) | There is only one thing (sugar) | mix(glass cup) | Sugar and water mix to produce sugar water. | — | |
| focus_on(sugar water) | No known action matches that input. | focus_on(sugar water) | You focus on the sugar water. | — | |
| ReAct 5 executor calls; 2,554 weighted tokens | Ours 2 executor calls; 1,432 weighted tokens | ||||
| Step | Action | Observation | Action | Expectation | Observation |
| EOCV executor call 1 | |||||
| goto(drawer 4) | You arrive at drawer 4. The drawer 4 is closed. | goto(drawer 4) | Skip verification | You arrive at drawer 4. The drawer 4 is closed. | |
| open(drawer 4) | You open the drawer 4. The drawer 4 is open. In it, you see nothing. | open(drawer 4) | Skip verification | You open the drawer 4. The drawer 4 is open. In it, you see nothing. | |
| goto(drawer 5) | You arrive at drawer 5. The drawer 5 is closed. | goto(drawer 5) | Skip verification | You arrive at drawer 5. The drawer 5 is closed. | |
| open(drawer 5) | You open the drawer 5. The drawer 5 is open. In it, you see a watch 1. | open(drawer 5) | Skip verification | You open the drawer 5. The drawer 5 is open. In it, you see a watch 1. | |
LLM Planning
Large language model planning studies how models decompose goals, choose actions, and revise plans under constraints.
See all 147 papers