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
- 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
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
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
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
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.