You describe available functions (name, purpose, parameters as a schema); the model, when useful, outputs a structured call (which function + JSON arguments) instead of text; your code runs it and returns the result. This is the mechanism behind agents and integrations — it lets the LLM reach real systems (databases, APIs, calculators) while you keep control over what can actually run.