Déployer sur votre propre infrastructure : agents serve
agents serve déploie votre agent avec Studio, sur une infrastructure que vous hébergez. Cette commande démarre un processus de longue durée,
le worker, sur votre machine ou dans votre cluster, qui exécute les sessions de l'agent. Mistral
conserve chaque session pour que le travail ne soit pas perdu en cas de plantage. Votre application ouvre les sessions à partir du nom de l'agent.
Les outils de l'agent s'exécutent sur une infrastructure que vous contrôlez. Utilisez cette commande pour exécuter l'agent en production sur votre
propre infrastructure, ou pour tester le fonctionnement d'un déploiement.
Fonctionnement
- Votre application, ou
agents chat, démarre une session à partir du nom de l'agent. Mistral conserve la session et place son tour dans la file d'attente. - Votre worker interroge cette file d'attente et prend en charge le tour.
- Le worker exécute la boucle de l'agent et les outils sur votre machine, appelle le modèle et enregistre chaque étape terminée auprès de Mistral. Si un worker s'arrête, aucune étape terminée n'est perdue.
Vous devez disposer d'un projet contenant un Agent qui définit name=, ainsi que d'une clé MISTRAL_API_KEY
dont l'utilisateur possède un rôle dans l'espace de travail donnant accès à Workflows, comme Développeur ou Contributeur de l'espace de travail ; un
administrateur de l'espace de travail attribue ce rôle dans la console d'administration : Organisation >
espaces de travail > votre espace de travail > Membres, comme l'explique agents deploy.
Ce que charge la CLI
agents info, agents serve et agents deploy ont tous besoin du même élément :
l'objet Agent que vous avez créé en Python. Par défaut, ces commandes recherchent agent dans
main.py. Un projet constitué d'un seul fichier main.py s'exécute donc tel quel :
from mistralai import agents
@agents.tool
async def get_weather(city: str) -> str:
"""Get the current weather in a city."""
return f"It is 18°C and sunny in {city}."
agent = agents.Agent(
model="mistral-large-4",
name="hello-agent",
instructions="You are a friendly agent. Greet the user in one sentence.",
tools=[get_weather],
)La CLI importe main.py : le code placé au niveau supérieur de ce fichier s'exécute donc au chargement. Placez le code qui exécute l'agent
depuis un script, comme asyncio.run(main()), sous if __name__ == "__main__":.
Pour placer l'agent ailleurs, déclarez-le dans pyproject.toml sous la forme module:attr : le module qui
le définit, puis la variable qui le contient :
[tool.mistralai.agents]
entrypoint = "src.service:support_agent"Lors de l'import du module, la racine du projet figure dans le chemin de recherche des imports. Un module placé à la racine fonctionne donc
sans que le projet soit un package installable. Chaque commande accepte une racine de projet comme
argument : agents serve ./hello-agent exécute ainsi un projet même si vous n'êtes pas dans son répertoire.
L'agent doit avoir un nom
Agent(...) doit définir explicitement name=. C'est le nom que agents serve enregistre et que
agents deploy utilise pour le routage. La CLI refuse donc de le déduire :
main:agent must set an explicit name: `agents.Agent(model=..., name=...)`. The name is the deployed workflow name. Set it in code even when you pass `--name`.Le nom est unique par espace de travail, et non globalement : exécuter à nouveau agents serve ou agents deploy pour hello-agent depuis le
même espace de travail met à jour ce même agent. En revanche, hello-agent dans un autre espace de travail est un agent distinct.
Si deux personnes exécutent agents serve pour hello-agent dans un même espace de travail, elles partagent donc un agent : chaque session est confiée à l'un ou l'autre
processus et exécute le code de la personne qui l'a lancé. Pendant le développement, attribuez un nom distinct à chaque personne, par exemple
agents serve --name hello-agent-ada.
Un nom contenant un point, comme acme.bot, est réservé aux agents de la plateforme :
Agent(...) lève alors une exception agents.SdkError.
Démarrer le worker de l'agent
Depuis le dossier du projet :
export MISTRAL_API_KEY="<your-key>"
agents serve # the project in the current directory
agents serve ./hello-agent --name hello-agentagents serve exécute un worker, enregistre l'agent sous son nom et indique où le tester :
✓ Agent hello-agent is serving on agents-sdk-hello-agent
Try the agent:
• in Vibe Code Web: https://chat.mistral.ai/code?agent=hello-agent
• programmatically, using the Session API: /studio/agents/learn/sessions/sessions
Debug: https://console.mistral.ai/build/workflows?workflowSearch=hello-agent
Press Ctrl+C to stop.--name remplace la valeur name= de l'agent, qui sert aussi au routage des sessions. Dans votre application, ouvrez
les sessions de l'agent à partir de ce nom :
from mistralai import agents
agent = agents.Agent.load_from(agent_name="hello-agent")Si vous arrêtez agents serve, l'agent cesse de répondre, mais Mistral conserve les sessions. Un tour en cours
reprend généralement à partir de sa dernière étape terminée lorsque agents serve redémarre. Le SDK ne relance pas un appel d'outil qui était
en cours, mais le modèle peut appeler à nouveau cet outil. Assurez-vous donc que les outils sont
idempotents : voir Durabilité.
:::warning Les outils s'exécutent sur la machine qui exécute agents serve
Chaque session de cet agent, qu'elle provienne de Vibe Code Web ou de l'API Session, exécute ses outils
sur cette machine. Pour isoler ce que l'agent exécute, attribuez-lui une
sandbox.
:::
Testez l'agent à partir de son nom, depuis un autre terminal :
agents chat hello-agentTalking to hello-agent (session 01a1a89e-c09f-7043-85a7-af2170ff112d). Ctrl+D or /exit to quit.
> What is the weather in Paris?
→ get_weather {"city": "Paris"}
← get_weather done
It's currently **18°C and sunny** in Paris! ☀️Vérifier les éléments chargés
agents info affiche ce que la CLI a chargé et indique le premier élément qu'elle n'a pas pu charger. Pour le fichier
main.py ci-dessus :
hello-agent mistral-large-4
instructions You are a friendly agent. Greet the user in one sentence.
sandbox none
tools
client.get_weather
connectors (none)
mcps (none)
skills (none)
guardrails (none)
hooks (none)
subagents (none)
subagent policy (none)
permissions auto · no policyExécutez cette commande après avoir modifié les outils, les connecteurs ou les hooks de l'agent. Un outil qui n'apparaît pas ici
n'est pas non plus visible pour le modèle. Consultez agents info pour connaître ses options.
Configurer l'environnement
Pour utiliser le service de production, agents serve n'a besoin que de MISTRAL_API_KEY. Pour cibler un autre déploiement,
définissez à la fois MISTRAL_API_URL et AGENTS_SDK_DEPLOY_CONTROL_PLANE_URL : voir
Environnement.
Par défaut, une session auto-hébergée se termine après 4 heures d'inactivité ou après 24 heures au total. Modifiez ces
limites avec AGENTS_SDK_IDLE_TIMEOUT_SECONDS et AGENTS_SDK_LIFETIME_LIMIT_SECONDS, en secondes, jusqu'à
un an pour chacune : voir Limites des sessions.
Par défaut, agents serve envoie les traces de ses tours à Mistral Studio : voir
Consulter vos sessions et vos traces, ainsi que
Masquage personnalisé pour choisir ce que les traces masquent.
Code réexécuté
Après le déploiement, la boucle de l'agent est réexécutée chaque fois qu'un worker reprend un tour, par exemple après un
redémarrage. Pour lire l'heure, attendre ou générer des identifiants et des nombres aléatoires, utilisez agents.now(),
agents.sleep(), agents.uuid4() et agents.random() : ces fonctions renvoient le même résultat lors de la réexécution.
Les outils et les hooks= de l'agent s'exécutent hors de la boucle, sous forme d'étapes enregistrées. Ces quatre fonctions y fonctionnent
aussi. Un hook de sandbox et une
politique de masquage s'exécutent dans la boucle : utilisez-y ces quatre fonctions.
Problèmes courants
agents serve n'affiche que les avertissements et la bannière. Définissez AGENTS_SDK_DEBUG=1 pour obtenir le log complet,
qui indique l'API Workflows résolue. LOG_LEVEL n'a aucun effet ici.
Cannot serve agent: MISTRAL_API_KEY was refused (HTTP 401).La ligne suivante indiqueagents serve needs a credential allowed to run agent workers in this workspace; check MISTRAL_API_KEY.La clé est incorrecte, expirée ou révoquée : vérifiez-la ou créez-en une nouvelle.Cannot serve agent: registration failed at https://api.mistral.ai/v2/agents: <detail>. Aucune session n'atteint l'agent tant que son nom ne pointe pas vers votre processusagents serve.<detail>indique la cause :the name hello-agent is already bound to another workflow or deployment. Voir Libérer un nom.- Autres causes : une API d'agents non activée pour le compte, ou une URL de console de pilotage qui
ne se termine pas par
/v2/agents, ce qui provoque une erreur 404 Not Found.
The user associated with this worker credential does not have permission to use Workflows in this workspace.Demandez à un administrateur de l'espace de travail d'attribuer à l'utilisateur associé à la clé un rôle donnant accès à Workflows, comme Développeur ou Contributeur de l'espace de travail, dans la console d'administration : Organisation > espaces de travail > votre espace de travail > Membres. Relancez ensuite le worker.MISTRAL_API_KEY is not set. Exportez cette variable dans votre shell, ou placez-la dans.envet exécutezuv run --env-file .env agents serve: la CLI ne lit pas elle-même.env.
Et après
- Gestion par Mistral :
agents deploy: laissez Mistral héberger l'agent. - Cycle de vie de l'agent : discutez avec l'agent dont le worker s'exécute, affichez-le dans une liste et arrêtez-le.
- Cycle de vie et liste des sessions : ouvrez, annulez et listez ses sessions depuis votre application.