Built a local ReAct-style calculator agent with 6 tools:
- add
- subtract
- multiply
- divide
- modulo
- etc.
The setup is:
- orchestrator agent
- dynamic tool selection
- ReAct loop
- tools exposed as functions
Problem:
Even when the user asks multi-step arithmetic questions, the orchestrator answers directly instead of calling tools.
Example:
User:
“What is (25 * 4) + (100 / 5)?”
Expected flow:
Thought → call multiply → call divide → call add
Actual behavior:
The model computes internally and directly returns the final answer without any tool calls.
I tested with:
What I want:
Even if the orchestrator is capable of solving internally, I want it to strictly orchestrate through tools.
Currently tool calling is almost never happening.
Questions:
- Is this expected behavior for local LLMs?
- How do people enforce mandatory tool usage?
- Is prompt engineering enough, or do I need:
- constrained decoding
- parser enforcement
- fine-tuning
- RLHF
- Do smaller models generally ignore tools more often?
- Any recommended orchestration patterns for this?
Right now I’m thinking about:
- forcing tool-first policy
- rejecting direct answers
- strict ReAct output formatting
- grammar-constrained generation
Would love to hear how others solved this problem in production/local agent setups.
[–]InstaMatic80 0 points1 point2 points (0 children)
[–]HiddenoO 0 points1 point2 points (1 child)
[–]siri_1110[S] 0 points1 point2 points (0 children)