Secrets
Utilisez secrets pour fournir un identifiant à vos outils, par exemple une clé API tierce, sans inclure sa valeur dans votre code. Déclarez chaque secret une seule fois, par son nom, et associez-le à un secret dans Mistral Secrets Manager. Une fois déployé, l'agent le reçoit sous forme de variable d'environnement. Si un secret manque, une erreur survient avant le démarrage de la session, plutôt qu'en cours de session.
Chaque type d'identifiant dispose de son propre mécanisme :
| Vous souhaitez… | Utilisez | Page |
|---|---|---|
| Fournir une clé API à un outil | secrets= sur l'Agent | Cette page |
| Appel à GitHub depuis une commande de la sandbox | header_bindings= sur la sandbox | Association d'en-têtes |
| Appel à un connecteur de l'utilisateur, comme Gmail | La connexion de l'utilisateur | Connexion |
| Appel à votre propre serveur MCP avec un token | auth_header_env_vars= | Transmettre un identifiant |
Dans cet exemple, l'agent de contrôle des paiements vérifie un bénéficiaire à l'aide de l'API d'un prestataire :
import asyncio
import os
from mistralai import agents
@agents.tool(annotations=agents.ToolAnnotations(read_only_hint=True))
async def screen_beneficiary(name: str) -> str:
"""Screen a payment beneficiary against the sanctions lists."""
api_key = os.environ["SCREENING_API_KEY"] # set from the secret when deployed
return f"{name}: no match" # call your screening vendor with api_key
payment_reviewer = agents.Agent(
model="mistral-large-4",
name="payment-reviewer",
instructions="Screen the beneficiary. Reply in one sentence.",
tools=[screen_beneficiary],
secrets={
"SCREENING_API_KEY": agents.MistralSecret.workspace("screening-api-key", worker_env=True),
},
)
async def main() -> None:
state = await payment_reviewer.run("Screen the beneficiary Jane Roe.")
if isinstance(state, agents.Completed):
print(state.text)
if __name__ == "__main__":
asyncio.run(main())Jane Roe screened against the sanctions lists with **no match** — she is clear.Pour l'exécuter dans votre processus : SCREENING_API_KEY=... uv run python screening.py.
La clé, ici SCREENING_API_KEY, est le nom de la variable d'environnement que vos outils lisent. Chaque valeur est un agents.MistralSecret :
agents.MistralSecret.workspace("NAME", worker_env=True)référence le secret d'espace de travailNAME, à partir de son nom seul, tel qu'il apparaît dans la console.agents.MistralSecret(worker_env=True)ne référence aucun secret dans votre code. Associez-le lors du déploiement avecagents deploy --secret-binding NAME=secret:workspace:.... Une association remplace également le secret défini parworkspace(). Les environnements de préproduction et de production peuvent ainsi utiliser chacun leur propre secret sans modification du code.
Définissez worker_env=True sur chaque MistralSecret. Tout code exécuté dans l'environnement de l'agent peut lire la variable. Le SDK vous demande donc d'autoriser explicitement cet accès, et la construction de l'Agent échoue sans cette option.
Ne déclarez pas le token d'un connecteur comme secret : il ne quitte jamais la passerelle des Connecteurs.
La valeur lue par vos outils dépend du mode d'exécution de l'agent :
| Mode d'exécution | Source de la valeur | Si la valeur manque |
|---|---|---|
agents deploy | Le secret de Secrets Manager désigné par --secret-binding, ou par workspace() en l'absence d'association | Le déploiement échoue |
agents serve | La variable du même nom dans votre shell | agents serve ne démarre pas |
Dans votre processus (agent.run()) | La variable du même nom dans l'environnement de votre processus | Aucune vérification n'a lieu avant l'exécution : celle-ci se termine, et seul l'appel à l'outil échoue |
La CLI ne lit pas elle-même .env. Pour charger les variables de .env pour agents serve, exécutez
uv run --env-file .env agents serve.
Déployer explique comment créer le secret et l'associer lors du déploiement.
Et après
Les mécanismes de contrôle : bloquez un appel à un outil interdit par votre politique.