Outil code_interpreter : exécuter du Python
Exécuter du code dans le cloud Mistral
L’outil code_interpreter permet à votre agent d’écrire et d’exécuter du code Python dans un conteneur sandboxé. C’est l’outil idéal pour les calculs, l’analyse de données, la génération de graphiques et la validation de code.
Créer un agent avec code interpreter
from mistralai import Mistral
import os
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
agent = client.beta.agents.create(
model="mistral-medium-latest",
name="Agent Code",
instructions="""Vous êtes un assistant de programmation Python.
- Utilisez le code interpreter pour exécuter du code quand nécessaire
- Montrez toujours le code avant de l'exécuter
- Expliquez les résultats de manière claire""",
tools=[{"type": "code_interpreter"}],
completion_args={"temperature": 0.3, "top_p": 0.95}
)
Lancer une exécution
response = client.beta.conversations.start(
agent_id=agent.id,
inputs="Calcule les 20 premiers nombres de Fibonacci."
)
L’agent va :
- Écrire un script Python pour calculer Fibonacci
- L’exécuter dans le sandbox
- Vous présenter les résultats avec des explications
Structure de la réponse
La réponse contient trois étapes typiques :
for entry in response.outputs:
if entry.type == "message.output":
# Première réponse : "Je vais calculer..." ou résultat final
print(f"Message : {entry.content}")
elif entry.type == "tool.execution":
# Code exécuté et résultat
print(f"Code : {entry.info.code}")
print(f"Sortie : {entry.info.code_output}")
Séquence type
message.output— L’agent annonce ce qu’il va fairetool.execution— Le code est exécuté,info.codecontient le script,info.code_outputcontient la sortiemessage.output— L’agent interprète et explique les résultats
Cas d’usage pratiques
Analyse de données
response = client.beta.conversations.start(
agent_id=agent.id,
inputs="""Voici les ventes mensuelles (en K€) :
Jan: 120, Fév: 135, Mar: 142, Avr: 128, Mai: 155, Juin: 168
Calcule la moyenne, la médiane, l'écart-type et la tendance."""
)
Génération de graphiques
response = client.beta.conversations.start(
agent_id=agent.id,
inputs="Crée un graphique en barres des parts de marché cloud en Europe : AWS 31%, Azure 25%, GCP 11%, OVH 8%, Autres 25%"
)
L’agent utilise matplotlib pour générer le graphique. Le résultat est un fichier image accessible dans la réponse.
Validation de code
response = client.beta.conversations.start(
agent_id=agent.id,
inputs="""Vérifie si cette fonction est correcte :
def is_palindrome(s):
return s == s[::-1]
Teste-la avec : "radar", "hello", "kayak", "Madam"
"""
)
Opérations mathématiques complexes
response = client.beta.conversations.start(
agent_id=agent.id,
inputs="Résous le système d'équations : 2x + 3y = 12, 4x - y = 5"
)
Combiner avec d’autres outils
Un agent peut avoir plusieurs outils activés simultanément :
agent = client.beta.agents.create(
model="mistral-large-latest",
name="Analyste Complet",
description="Recherche + Calcul",
instructions="Recherchez des données récentes puis analysez-les avec du code.",
tools=[
{"type": "web_search"},
{"type": "code_interpreter"}
]
)
response = client.beta.conversations.start(
agent_id=agent.id,
inputs="Cherche le cours actuel du Bitcoin et calcule son évolution en pourcentage sur les 30 derniers jours."
)
L’agent choisit automatiquement quel outil utiliser à chaque étape.
Limitations du sandbox
- Bibliothèques limitées — Les packages standards Python sont disponibles (numpy, pandas, matplotlib, etc.) mais pas tous les packages tiers
- Pas d’accès réseau — Le code s’exécute dans un environnement isolé
- Temps limité — Les exécutions longues sont interrompues
- Pas de persistance — Les fichiers créés dans une exécution ne persistent pas entre les appels
Points clés à retenir
code_interpreterexécute du Python dans un sandbox sécurisé côté Mistral- La réponse contient le code exécuté (
info.code) et sa sortie (info.code_output) - Idéal pour les calculs, l’analyse de données et la génération de graphiques
- Peut être combiné avec d’autres outils (web_search, etc.)
- Le sandbox a des limitations : pas d’accès réseau, bibliothèques limitées, pas de persistance