Créer un agent avec des outils

Permettez à un modèle Mistral d'accéder à des fonctions externes qu'il peut appeler pendant la conversation.

  • Définissez un schéma d'outil qui décrit votre fonction
  • Envoyez un message qui déclenche l'appel d'un outil
  • Exécutez la fonction localement et transmettez le résultat au modèle

Ce schéma s'applique à toute source de données : API, base de données ou service interne.

Durée estimée : ~10 minutes

Prérequis

Prérequis

  • Une clé API Mistral (voir Obtenir votre clé API si vous n'en avez pas)
  • Python 3.9+ ou Node.js 18+ installé
  • Le SDK Mistral installé (voir Installer le SDK si vous ne l'avez pas déjà fait)
Étape 1 : définir un outil

Étape 1 : définir un outil

Définissez la fonction que le modèle pourra appeler. Cet exemple crée un outil get_weather qui accepte le nom d'une ville.

import json
import os
from mistralai import Mistral

client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

# Définir le schéma de l'outil
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the current weather for a given city.",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "The city name, e.g. 'Paris'."
                    }
                },
                "required": ["city"]
            }
        }
    }
]
Étape 2 : envoyer une requête avec l'outil

Étape 2 : envoyer une requête avec l'outil

Posez une question au modèle qui nécessite l'outil. Le modèle retourne une réponse tool_calls à la place d'une réponse textuelle.

messages = [
    {"role": "user", "content": "What's the weather in Paris today?"}
]

response = client.chat.complete(
    model="mistral-medium-latest",
    messages=messages,
    tools=tools,
)

tool_call = response.choices[0].message.tool_calls[0]
print(f"Model wants to call: {tool_call.function.name}")
print(f"With arguments: {tool_call.function.arguments}")
Étape 3 : exécuter la fonction et retourner le résultat

Étape 3 : exécuter la fonction et retourner le résultat

Exécutez votre fonction avec les arguments fournis par le modèle, puis renvoyez le résultat afin que le modèle puisse produire une réponse en langage naturel.

# Simule la fonction (remplacez par un appel à une API réelle)
def get_weather(city: str) -> dict:
    return {"city": city, "temperature": "18°C", "condition": "Partly cloudy"}

# Exécute l'appel d'outil
args = json.loads(tool_call.function.arguments)
result = get_weather(**args)

# Retourne le résultat au modèle
messages.append(response.choices[0].message)
messages.append({
    "role": "tool",
    "name": tool_call.function.name,
    "content": json.dumps(result),
    "tool_call_id": tool_call.id,
})

final_response = client.chat.complete(
    model="mistral-medium-latest",
    messages=messages,
    tools=tools,
)

print(final_response.choices[0].message.content)
# "The weather in Paris is 18°C and partly cloudy."
Vérification

Vérification

Un enchaînement réussi imprime une réponse en langage naturel qui inclut la valeur de retour de l'outil. Le modèle :

  • A détecté que la requête nécessitait des données externes
  • A généré une demande structurée tool_calls
  • A intégré le résultat de votre fonction dans une réponse conversationnelle

Utilisez tool_choice: "any" pour forcer le modèle à toujours appeler un outil, ou tool_choice: "auto" (par défaut) pour le laisser choisir.

Et après

Et après