## Quand l'IA doit AGIR, pas seulement répondre

Un LLM seul ne peut pas consulter une base, faire un calcul fiable ou déclencher une action.
Le **function calling** et les **agents** changent cela.

### Function calling
Vous décrivez au modèle des **outils** (des fonctions) qu'il peut demander à utiliser. Le
modèle propose l'appel (nom + arguments), **votre code** l'exécute et renvoie le résultat.
Le modèle ne fait jamais l'action lui-même — **vous gardez le contrôle**.
> Exemple d'outils : `chercher_dossier(numero)`, `calculer_delai(date)`,
> `rechercher_documentation(question)`.

### Les agents
Un **agent** est une **boucle** : le modèle observe, choisit un outil, lit le résultat,
recommence jusqu'à atteindre l'objectif. Cela permet des tâches **multi-étapes**.

### Les guardrails
Donner des outils = donner du **pouvoir d'action**. On encadre :
- **valider les arguments** avant exécution (ne jamais exécuter en confiance aveugle),
- **moindre privilège** : seulement les outils nécessaires,
- **confirmation humaine** pour les actions sensibles.

> **📌 Cas concret — l'assistant guichet**
> Un assistant de guichet doit répondre « Où en est mon dossier ? ». On lui donne **un
> seul** outil : `statut_dossier(numero)` (lecture seule). Il ne peut **rien modifier**.
> Quand on voudra qu'il **mette à jour** un dossier, on ajoutera une **confirmation
> humaine** obligatoire. Le périmètre d'action est **choisi**, pas subi.

> **À retenir** — **Function calling** = le modèle demande, **votre code** exécute. Un
> **agent** enchaîne les outils en boucle. Chaque outil est un **pouvoir** : on applique le
> **moindre privilège** et on valide les actions.