By Sagar Shankaran, Founder of CallSphere
Function-calling reliability is mostly a schema-design problem. The 2026 patterns for tool definitions that LLMs actually call correctly.
Key takeaways
Most production teams blame the model when tool calls fail. The truth in 2026: most failures are schema-design failures. Bad parameter names, vague descriptions, ambiguous types, and schemas that overlap each other produce far more failed tool calls than model limitations.
This piece walks through the schema-design patterns that hold up in production.
flowchart TB
Schema[Tool Schema] --> Name[Name: clear, distinct]
Schema --> Desc[Description: when to call]
Schema --> Params[Parameters: well-typed]
Schema --> Ret[Return: expected shape]
Schema --> Side[Side effects: noted]
Five things the model must understand to call your tool correctly.
Function names matter. The 2026 best practices:
book_appointment not appointment_bookingget_patient_by_phone not lookupA common mistake: shipping search, find, get, and lookup as four different tools. The model picks one randomly.
Hear it before you finish reading
Talk to a live CallSphere AI voice agent in your browser — 60 seconds, no signup.
The description is read by the model on every call. It should describe:
Example of a weak description: "Books an appointment."
Example of a strong description: "Book an appointment for an existing patient. Use this only after verifying the patient exists via lookup_patient_by_phone or lookup_patient_by_id. Do not use this to reschedule existing appointments — use reschedule_appointment for that. Returns the booking reference and confirmation details."
The 2026 reliable types:
string for free-form textinteger and number for numerical valuesboolean for binaryenum for fixed-vocabulary fieldsarray of typed elementsobject with explicit nested propertiesAvoid:
any (the model fills this with anything)Mark only what is truly required as required. Required-on-every-call parameters that may be missing produce hallucinated values. Better to mark as optional and validate.
Still reading? Stop comparing — try CallSphere live.
CallSphere ships complete AI voice agents per industry — 14 tools for healthcare, 10 agents for real estate, 4 specialists for salons. See how it actually handles a call before you book a demo.
OpenAPI / JSON Schema's examples field is read by frontier LLMs. Use it. A few good examples in the schema dramatically improve call quality.
flowchart LR
Q[Query: 'find John's appointment'] --> Conf{Tools available}
Conf --> A1[get_appointment_by_id]
Conf --> A2[search_appointments]
Conf --> A3[lookup_patient_appointments]
Three overlapping tools confuse the model. The fix: collapse to one tool with a richer parameter set, or differentiate clearly with non-overlapping descriptions.
Tools change. Versioning patterns that work:
book_appointment_v2 if the new version has incompatible behavior{
"name": "book_appointment",
"description": "Book a new appointment for an existing patient. Returns booking reference. Use only after verifying patient exists.",
"parameters": {
"type": "object",
"properties": {
"patient_id": {
"type": "string",
"description": "Patient UUID. Must be obtained from lookup_patient_*. Do not invent."
},
"provider_id": {
"type": "string",
"description": "Provider UUID."
},
"start_time": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 with timezone. Must come from get_available_slots output."
},
"appointment_type": {
"type": "string",
"enum": ["new_patient", "follow_up", "emergency", "consultation"]
},
"notes": {
"type": "string",
"description": "Optional free-text notes from the call."
}
},
"required": ["patient_id", "provider_id", "start_time", "appointment_type"]
}
}
Note: the descriptions tell the model not just what each parameter is, but where to get it.
Schema validation is server-side, not just LLM-side. Treat the LLM as untrusted input:
flowchart LR
LLM[LLM emits tool call] --> Val{Validate}
Val -->|valid| Run[Execute]
Val -->|invalid| Err[Return structured error]
Err --> LLM
This loop is short and reliable. The LLM sees its mistake and fixes it; it does not loop indefinitely if your error messages are specific.

Written by
Sagar Shankaran· Founder, CallSphere
LinkedInSagar Shankaran is the founder of CallSphere, where he builds production AI voice and chat agents deployed across healthcare, hospitality, real estate, and home services. He writes about agentic AI, LLM engineering, and shipping voice agents that handle real calls in production.
See how AI voice agents work for your industry. Live demo available -- no signup required.
Enterprise CIO Guide perspective on Sonnet 4.6 is the price/performance sweet spot Anthropic shipped for high-volume agentic deployments in 2026.
Enterprise CIO Guide perspective on tau-bench measures multi-turn tool use against simulated users — the right benchmark for production agent decisions.
How CallSphere's 14 healthcare tools are designed: clear naming, idempotency, auth-bound, error contract. Practical patterns for voice AI tool schemas.
SMB Founder Playbook perspective on Sonnet 4.6 is the price/performance sweet spot Anthropic shipped for high-volume agentic deployments in 2026.
Enterprise CIO Guide perspective on GPT-5.5 ships with smarter routing, faster tool use, and expanded thinking budgets — here is what matters if you are building agents.
SMB Founder Playbook perspective on tau-bench measures multi-turn tool use against simulated users — the right benchmark for production agent decisions.
© 2026 CallSphere Inc. All rights reserved.
Made within San Francisco
Watch how CallSphere handles real customer calls, schedules appointments, and processes payments — live.
Try Live DemoBook a DemoCalculate Your ROI