Agent
L'Agent et ses composants : paramètres du modèle, sous-agents, permissions, skills, secrets et masquage.
Guides : Qu'est-ce qu'un agent, Configurer l'agent, Secrets, Les mécanismes de contrôle, Skills et Sous-agents.
| Nom | Définition |
|---|---|
Agent | Un agent : un modèle et ses instructions, avec les outils, la sandbox, les connecteurs, les serveurs MCP, les skills, les hooks et les sous-agents qu'il peut utiliser. |
Builtins | Fonctionnalités intégrées de l'agent. |
ProgrammaticToolCallingConfig | Options d'appel programmatique d'outils. |
SessionAgentCustomization | Remplacement des paramètres d'un agent pour une session : le paramètre agent= de Agent.start_session. |
Subagent | Un agent enfant que son parent démarre avec l'outil agents.spawn. |
SubagentPolicy | Limites applicables aux sous-agents d'une arborescence de sessions : la session racine et tous ses sous-agents. |
PermissionMode | Appels d'outils nécessitant une approbation : "auto" exécute chaque appel autorisé par la permission_policy de l'agent (tous les appels en l'absence de politique), "ask" ouvre une demande d'approbation pour chaque appel et "deny" les refuse. |
PermissionPolicy | Règles de permission ordonnées et comportement par défaut pour les appels qui ne correspondent à aucune règle. |
PermissionRule | Détermine si les appels aux outils correspondant à tools sont exécutés, soumis à approbation ou refusés. |
RegistrySkill | Un skill de votre espace de travail issu de Le registre de l'IA, désigné par son ID et, éventuellement, sa version. |
AllRegistrySkills | Tous les skills de votre espace de travail présents dans Le registre de l'IA au démarrage de la session racine. |
agents.all_registry_skills | Donne à l'agent tous les skills de votre espace de travail présents dans Le registre de l'IA. |
SandboxWorkspaceSkills | Met à disposition les skills déjà présents dans la sandbox, par exemple ceux d'un dépôt cloné par un hook de la sandbox. |
LocalSkillBundle | Un skill que l'agent emporte avec lui : les fichiers d'un dossier de skill sur votre machine. |
LocalSkillFile | Un fichier d'un LocalSkillBundle. |
MistralSecret | Un secret du gestionnaire de secrets Mistral. |
redaction.Redaction | Ce qu'accepte Agent(redaction=...) : une RedactionPolicy ou une liste de ces politiques, appliquées dans l'ordre. |
redaction.RedactionPolicy | Une méthode de masquage des secrets et des données personnelles dans les traces de l'agent : une politique de masquage ou une fonction (key, value). |
redaction.RegexRedactionPolicy | Remplace les correspondances de motifs, comme les clés API, les adresses e-mail et les numéros de carte, par [REDACTED] dans les traces de l'agent. |
redaction.AttributeRedactionPolicy | Masque entièrement les valeurs des champs sensibles des traces, comme les messages et les arguments d'outils, et remplace les tokens dans les valeurs conservées. |
redaction.CallbackRedactionPolicy | Effectue le masquage avec votre fonction : elle reçoit la clé et la valeur de chaque champ et renvoie la valeur à conserver, ou None pour supprimer le champ. |
redaction.AttributeMaskCallback | Une fonction de masquage : elle reçoit la clé et la valeur d'un champ et renvoie la valeur à conserver, ou None pour supprimer le champ. |
AgentAgent
class Agent(
*,
model: str,
instructions: str | None = None,
provider: str = 'mistral',
name: str = 'default_agent',
max_iterations: int | None = None,
first_output_timeout_seconds: float | None = None,
builtins: Builtins | None = None,
permission_mode: PermissionMode = 'auto',
permission_policy: PermissionPolicy | None = None,
auto_compact_threshold: int | None = None,
description: str | None = None,
reasoning_effort: Literal['off', 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'] | None = None,
temperature: float | None = None,
output_type: type[BaseModel] | None = None,
subagents: Sequence[Subagent] = (),
subagent_policy: SubagentPolicy | None = None,
tool_errors: Literal['hide', 'show', 'raise'] = 'hide',
tools: Sequence[PythonTool[..., Any] | ClientTool[..., Any] | Callable[..., Any]] | None = None,
environment: Sandbox | None = None,
connectors: Sequence[Connector | AllConnectors] | None = None,
mcps: dict[str, RemoteMCP] | None = None,
skills: Sequence[LocalSkillBundle | RegistrySkill | SandboxWorkspaceSkills | AllRegistrySkills] | None = None,
hooks: Sequence[Hook] | None = None,
guardrails: Sequence[Hook] | None = None,
secrets: Mapping[str, MistralSecret] | None = None,
redaction: redaction.Redaction | None = None,
)Un agent : un modèle et ses instructions, avec les outils, la sandbox, les connecteurs, les serveurs MCP, les skills, les hooks et les sous-agents qu'il peut utiliser.
Agent.run() exécute un tour dans une nouvelle session, Agent.start_session() démarre une session pour plusieurs
tours et Agent.session(session_id) associe un handle à une session existante. Agent.load_from()
donne accès à un agent que vous avez déployé.
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
model | str | obligatoire | Le modèle, par exemple "mistral-large-4". |
instructions | str | None | None | Vos instructions au modèle, ajoutées au prompt système par défaut de la boucle de l'agent. |
provider | str | 'mistral' | Le fournisseur de complétion intégré : "mistral", par défaut, "openai" ou "anthropic". Il tente jusqu'à cinq fois un appel au modèle si l'appel échoue en raison d'une limite de débit, d'une erreur serveur comme une 503 ou d'une erreur réseau, et attend la durée indiquée par l'en-tête Retry-After. |
name | str | 'default_agent' | Le nom de l'agent. agents serve et agents deploy enregistrent l'agent sous ce nom, que votre application utilise pour le charger. Les noms contenant un point sont réservés aux agents de Mistral. |
max_iterations | int | None | None | Le nombre maximal d'étapes de la boucle de l'agent dans un tour. None ne fixe aucune limite. |
first_output_timeout_seconds | float | None | None | Le délai d'attente de la première sortie d'un appel au modèle. La valeur par défaut est de 720 secondes. Un appel interrompu pour cette raison, ou après 300 secondes sans sortie une fois qu'il a commencé, est retenté une fois. |
builtins | Builtins | None | None | Les fonctionnalités intégrées à désactiver, comme les sous-agents ou les processus en arrière-plan. |
permission_mode | PermissionMode | 'auto' | Appels d'outils nécessitant une approbation : "auto" exécute chaque appel autorisé par permission_policy (tous les appels en l'absence de politique), "ask" ouvre une demande d'approbation pour chaque appel et "deny" les refuse. |
permission_policy | PermissionPolicy | None | None | Règles qui déterminent, pour chaque outil et chaque argument, si un appel est exécuté, soumis à approbation ou refusé. Nécessite permission_mode="auto". |
auto_compact_threshold | int | None | None | Le nombre de tokens à partir duquel la boucle résume les tours précédents. La valeur par défaut dépend de la fenêtre de contexte du modèle. |
description | str | None | None | Ce que fait l'agent, en une phrase. Un agent déployé affiche cette description et ses traces l'enregistrent. |
reasoning_effort | Literal['off', 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'] | None | None | L'effort de raisonnement du modèle, de "off" à "max". Utilise la valeur par défaut du modèle. |
temperature | float | None | None | La température d'échantillonnage, de 0 à 2. Utilise la valeur par défaut du modèle. |
output_type | type[BaseModel] | None | None | Un modèle Pydantic auquel la réponse finale de chaque tour doit se conformer. |
subagents | Sequence[Subagent] | () | Les agents enfants que l'agent peut démarrer, chacun étant un agents.Subagent. |
subagent_policy | SubagentPolicy | None | None | Limites applicables aux sous-agents d'une arborescence de sessions : nombre de tours exécutés simultanément et profondeur de l'arborescence. |
tool_errors | Literal['hide', 'show', 'raise'] | 'hide' | Ce que le modèle reçoit lorsqu'un outil lève une erreur inattendue : "hide", par défaut, fournit un message générique, "show" fournit le type et le message de l'exception, et "raise" fait échouer le tour ; pour un outil client, avec "raise", l'exception est plutôt levée dans votre programme et l'appel reste ouvert. |
tools | Sequence[PythonTool[..., Any] | ClientTool[..., Any] | Callable[..., Any]] | None | None | Vos fonctions, chacune étant une fonction ordinaire ou décorée avec @agents.tool, et vos outils clients. |
environment | Sandbox | None | None | La sandbox dans laquelle l'agent exécute des commandes shell et modifie des fichiers. La valeur par défaut est NoSandbox() : aucun shell ni fichier. |
connectors | Sequence[Connector | AllConnectors] | None | None | Les connecteurs configurés dans Studio pour votre espace de travail, chacun désigné par agents.connector(name). |
mcps | dict[str, RemoteMCP] | None | None | Les serveurs MCP qui ne sont pas des connecteurs Studio, désignés par leur nom. |
skills | Sequence[LocalSkillBundle | RegistrySkill | SandboxWorkspaceSkills | AllRegistrySkills] | None | None | Instructions que l'agent charge uniquement lorsqu'il en a besoin. |
hooks | Sequence[Hook] | None | None | Code exécuté avant un tour, autour des appels au modèle et aux outils, ou après la réponse. |
guardrails | Sequence[Hook] | None | None | Hooks de vérification de sécurité, exécutés avant hooks à chaque point d'exécution des hooks. |
secrets | Mapping[str, MistralSecret] | None | None | Les identifiants d'authentification que l'agent lit, désignés par leur nom, avec la source de leur valeur. |
redaction | redaction.Redaction | None | None | Méthode de masquage des secrets et des données personnelles dans les traces de l'agent : une politique de masquage, une fonction (key, value) ou une liste de ces éléments, appliqués dans l'ordre. [] désactive le masquage. |
Agent.runAgent.run
async def run(
content: str | Sequence[TextContentBlock | ImageContentBlock | Mapping[str, Any]],
*,
output_type: type[BaseModel] | None = None,
on_approval: ApprovalHandler | None = None,
on_sign_in: Callable[[OpenSignIn], SignInAnswer | Awaitable[SignInAnswer]] | None = None,
on_client_tool: Callable[[ClientToolCall], Any] | ClientToolAnswers | None = None,
on_event: Callable[[Event], Awaitable[None] | None] | None = None,
idempotency_key: str | None = None,
timeout: float | None = None,
) -> TurnState[Any] | BusyDémarre une session, y exécute un tour et renvoie le résultat de ce tour.
Le résultat est une valeur, jamais une exception levée : Completed, Blocked, Interrupted, Failed,
Running ou UnknownOutcome pour un résultat ajouté après votre version du SDK. Avec output_type=T, il s'agit
d'un TurnState[T]. Ses champs session_id et turn_id permettent d'accéder à nouveau à la session et au tour, comme dans
agent.session(state.session_id).
Sur un agent déployé, output_type analyse uniquement la réponse, et le modèle reçoit le format de l'agent
déployé. output vaut InvalidOutput si la réponse ne passe pas la validation, et None
si le tour s'est terminé prématurément.
Un callback sans gestionnaire, ou dont le gestionnaire renvoie KeepCallbackOpen(), fait
renvoyer Blocked à l'exécution. Répondez-y avec
agent.session(state.session_id).turn(state.turn_id).answer(cb.id, ...). Si un gestionnaire d'approbation ou
de connexion lève une erreur, l'exécution lève cette erreur. Un gestionnaire d'approbation qui renvoie
toute autre valeur, y compris None, lève SdkError. Un gestionnaire de connexion qui renvoie None,
KeepCallbackOpen() ou une réponse omettant une source lève SdkError. Une réponse d'outil
client qui ne peut pas être envoyée lève ClientToolAnswerError. Dans chaque cas, le callback
reste ouvert et le tour continue de s'exécuter. Une réponse d'outil client ou un gestionnaire on_client_tool
qui lève une erreur suit le paramètre tool_errors de l'agent : par défaut, le modèle reçoit un message indiquant que l'appel
a échoué et l'exécution se poursuit. Avec "raise", l'exécution lève l'erreur et l'appel reste
ouvert : le tour reste bloqué sur cet appel et la session n'accepte aucun nouveau tour jusqu'à l'expiration
du callback (une heure par défaut).
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
content | str | Sequence[TextContentBlock | ImageContentBlock | Mapping[str, Any]] | obligatoire | Le message de l'utilisateur : une chaîne ou une liste de blocs de contenu. |
output_type | type[BaseModel] | None | None | Un modèle Pydantic auquel la réponse de cette exécution doit se conformer, à la place du output_type de l'agent ; Completed.output est validé selon ce modèle. |
on_approval | ApprovalHandler | None | None | Une fonction synchrone ou asynchrone qui répond à chaque demande d'approbation de la session et de ses sous-agents avec AllowApproval ou DenyApproval. |
on_sign_in | Callable[[OpenSignIn], SignInAnswer | Awaitable[SignInAnswer]] | None | None | Une fonction qui répond à chaque demande de connexion à un connecteur de la session et de ses sous-agents avec une SignInAnswer. |
on_client_tool | Callable[[ClientToolCall], Any] | ClientToolAnswers | None | None | Une fonction qui répond à chaque appel d'outil client de la session et de ses sous-agents, ou un agents.ClientToolAnswers. |
on_event | Callable[[Event], Awaitable[None] | None] | None | None | Une fonction qui reçoit chaque événement du tour à mesure qu'il se produit. Une fois le tour terminé, le dernier événement est TurnEnded. |
idempotency_key | str | None | None | Une clé de 1 à 256 caractères qui permet de retenter l'exécution sans risque : une deuxième exécution avec la même clé renvoie le résultat du même tour, même si celui-ci est terminé. La même clé avec un autre message ou d'autres paramètres d'agent lève SessionIdempotencyConflictError. Générez-la une fois par requête, par exemple sous forme d'UUID. Une exécution avec une clé peut renvoyer Busy pendant qu'un autre tour s'exécute. |
timeout | float | None | None | Le délai d'attente du tour par l'exécution, en secondes. Le temps d'un gestionnaire on_approval ou on_sign_in est comptabilisé ; celui de votre code d'outil client ne l'est pas. À l'expiration du délai, l'exécution renvoie Running ou Blocked et le tour continue de s'exécuter. None attend que le tour se termine ou qu'il attende une action de votre part. |
Agent.overrideAgent.override
def override(*, model: testing.ScriptedModel) -> SelfRenvoie une copie de cet agent qui envoie ses appels au modèle à model. L'agent d'origine reste inchangé.
Appelez cette méthode sur un agent local : sur un agent déployé, elle lève SdkError.
Agent.start_sessionAgent.start_session
async def start_session(
*,
history: Sequence[HistoryImportEntry] | None = None,
session_inputs: Mapping[str, SessionInput] | None = None,
agent: SessionAgentCustomization | Mapping[str, object] | None = None,
idempotency_key: str | None = None,
on_approval: ApprovalHandler | None = None,
on_sign_in: Callable[[OpenSignIn], SignInAnswer | Awaitable[SignInAnswer]] | None = None,
on_client_tool: Callable[[ClientToolCall], Any] | ClientToolAnswers | None = None,
) -> SessionDémarre une session et renvoie son handle.
Une session locale s'exécute dans ce processus jusqu'à l'arrêt de sa boucle d'événements, et son handle ne peut être réassocié à la session que dans cette boucle. Une session d'un agent déployé est conservée par Mistral, et son handle peut être réassocié depuis n'importe quel processus.
Un deuxième appel avec la même idempotency_key et les mêmes options renvoie la même
session, même si elle exécute déjà un tour ou si elle est terminée. La même clé avec d'autres valeurs de
session_inputs ou d'agent, ou depuis un agent dont les paramètres diffèrent, comme
permission_mode, lève agents.SessionIdempotencyConflictError ; un autre history n'est
pas vérifié et renvoie la première session. Générez la clé une fois par requête, par exemple
sous forme d'UUID, et réutilisez-la uniquement pour les nouvelles tentatives de cette requête.
Les gestionnaires restent dans ce processus : ils ne font pas partie des paramètres de démarrage, donc la même
idempotency_key accepte d'autres gestionnaires. Une réponse à un stub qui n'est pas un outil de cet agent, de
ses mécanismes de contrôle et hooks, ou de ses sous-agents, lève SdkError avant le démarrage.
Le handle conserve le output_type de cet agent : session.run(), turn.get() et
turn.result() l'utilisent pour analyser la sortie d'un Completed si aucun autre type n'est fourni.
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
history | Sequence[HistoryImportEntry] | None | None | Entrées existantes qui initialisent la conversation. Seule une session locale les accepte. |
session_inputs | Mapping[str, SessionInput] | None | None | Les entrées de session, indexées par l'input_id de chaque valeur. Elles restent fixes pendant toute la durée de vie de la session et sont transmises uniquement aux outils, hooks et hooks de sandbox qui les déclarent avec agents.Depends(). |
agent | SessionAgentCustomization | Mapping[str, object] | None | None | Modifications de cet agent pour cette session uniquement, sous forme d'un agents.SessionAgentCustomization ou d'un dictionnaire avec les mêmes clés : additional_instructions s'ajoute à ses instructions, et model et reasoning_effort remplacent ses valeurs par défaut de complétion. Un déploiement conserve son agent enregistré sans le modifier. Les permissions ne sont pas personnalisables par session : définissez permission_mode= ou permission_policy= sur l'agent. |
idempotency_key | str | None | None | Une clé de 1 à 256 caractères qui permet de retenter le démarrage sans risque. |
on_approval | ApprovalHandler | None | None | Répond aux demandes d'approbation pendant qu'un appel attend sur le handle (voir Session). |
on_sign_in | Callable[[OpenSignIn], SignInAnswer | Awaitable[SignInAnswer]] | None | None | Répond aux demandes de connexion pendant qu'un appel attend sur le handle, comme avec run. |
on_client_tool | Callable[[ClientToolCall], Any] | ClientToolAnswers | None | None | Répond aux appels d'outils côté client pendant qu'un appel attend sur le handle, comme avec run. |
Agent.sessionAgent.session
def session(
session_id: str,
*,
on_approval: ApprovalHandler | None = None,
on_sign_in: Callable[[OpenSignIn], SignInAnswer | Awaitable[SignInAnswer]] | None = None,
on_client_tool: Callable[[ClientToolCall], Any] | ClientToolAnswers | None = None,
) -> SessionRenvoie le handle d'une session de cet agent à partir de son identifiant. N'envoie aucune requête.
Pour un agent déployé, un identifiant qui n'est pas un UUID lève immédiatement SdkError. Un identifiant inconnu
peut aussi être associé à un handle : la première requête via ce handle lève SessionNotFoundError. Le handle
conserve le output_type de cet agent, comme celui de start_session(). Une réponse à un stub qui
ne correspond pas à un outil de cet agent, de ses mécanismes de contrôle et hooks, ou de ses sous-agents lève
SdkError ici.
Dans un bloc async with agents.local_runtime(journal_factory=...), une session locale
enregistrée à cet emplacement par un processus précédent se rouvre à la première requête du handle et continue de s'exécuter dans
ce processus jusqu'à la sortie du bloc. Elle doit appartenir à cet agent : une session avec d'autres
outils, hooks, serveurs MCP, connecteurs ou une autre sandbox lève SessionConfigMismatchError,
et une session qu'un autre processus maintient ouverte lève SessionInUseError.
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
session_id | str | obligatoire | L'identifiant de la session. |
on_approval | ApprovalHandler | None | None | Répond aux demandes d'approbation pendant qu'un appel attend sur le handle (voir Session). |
on_sign_in | Callable[[OpenSignIn], SignInAnswer | Awaitable[SignInAnswer]] | None | None | Répond aux demandes de connexion pendant qu'un appel attend sur le handle, comme avec run. |
on_client_tool | Callable[[ClientToolCall], Any] | ClientToolAnswers | None | None | Répond aux appels d'outils côté client pendant qu'un appel attend sur le handle, comme avec run. |
Agent.load_fromAgent.load_from
@classmethod
def load_from(
*,
agent_name: str | None = None,
agent_id: str | None = None,
server_url: str | None = None,
api_key: str | None = None,
client: Client | None = None,
) -> AgentConstruit un handle à initialisation différée vers un agent déployé, à partir de son nom ou de son identifiant.
Passez exactement un des deux paramètres, agent_name ou agent_id, pour un agent déployé avec Studio,
auto-hébergé ou géré par Mistral. Pour poursuivre une session, associez-lui un handle avec .session(session_id).
Sans client, server_url et api_key créent un client sans pool de connexions partagé :
chaque session ouvre alors son propre pool, qui se ferme avec elle et sert la boucle d'événements
qui l'a ouvert. Passez soit client, soit ces deux paramètres, mais pas les deux.
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
agent_name | str | None | None | Le nom sous lequel l'agent a été déployé. |
agent_id | str | None | None | L'identifiant de l'agent déployé, sous forme d'UUID. |
server_url | str | None | None | L'URL racine de l'API Mistral, telle qu'attendue par agents.Client. |
api_key | str | None | None | La clé API, telle qu'attendue par agents.Client. |
client | Client | None | None | Le client par lequel l'agent et ses sessions envoient leurs requêtes. |
BuiltinsBuiltins
class Builtins(
*,
skills: bool = True,
subagents: bool = True,
programmatic_tool_calling: bool | ProgrammaticToolCallingConfig = True,
background_processes: bool | None = None,
)Fonctionnalités intégrées de l'agent. Toutes sont activées par défaut ; définissez un champ sur False pour le désactiver.
Les outils de fichiers et de shell ne figurent pas ici : ils dépendent du niveau access de la sandbox.
Builtins.noneBuiltins.none
@classmethod
def none() -> SelfAucune fonctionnalité intégrée. Avec NoSandbox, la valeur par défaut, le modèle ne voit que vos outils.
Une sandbox fournit toujours les outils de fichiers et de shell autorisés par son niveau access.
ProgrammaticToolCallingConfigProgrammaticToolCallingConfig
class ProgrammaticToolCallingConfig(*, sleep: bool = True)Options de l'appel programmatique d'outils. Les passer active cette fonctionnalité.
Personnalisation par session
SessionAgentCustomizationSessionAgentCustomization
class SessionAgentCustomization(
*,
additional_instructions: str = '',
model: str | None = None,
reasoning_effort: Literal['off', 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'] | None = None,
)Remplacement des paramètres d'un agent pour une session : le paramètre agent= de Agent.start_session.
additional_instructions s'ajoute aux instructions de l'agent ; model et reasoning_effort
remplacent ses valeurs par défaut pour la complétion. Un champ omis conserve la valeur de l'agent ; None pour model ou
reasoning_effort, ainsi que les clés inconnues, lèvent une erreur de validation. agent= accepte aussi les mêmes clés dans un
dictionnaire.
Sous-agents
SubagentSubagent
class Subagent(
*,
name: str,
description: str,
instructions: str,
model: str | None = None,
provider: str | None = None,
reasoning_effort: Literal['off', 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'] | None = None,
temperature: float | None = None,
max_iterations: int | None = None,
first_output_timeout_seconds: float | None = None,
auto_compact_threshold: int | None = None,
tools: Sequence[PythonTool[..., Any] | ClientTool[..., Any] | Callable[..., Any]] | None = None,
hooks: Sequence[Hook] | None = None,
mcps: Mapping[str, RemoteMCP] | None = None,
connectors: Sequence[Connector | AllConnectors] | None = None,
skills: Sequence[LocalSkillBundle | RegistrySkill] | None = None,
subagents: Sequence[Subagent] | None = None,
builtins: Builtins | None = None,
sandbox_access: Literal['none', 'files', 'full'] | None = None,
)Un agent enfant que son parent démarre avec l'outil agents.spawn.
Un sous-agent s'exécute dans sa propre session, sous celle de son parent, avec l'identité de l'utilisateur qui a démarré la session
racine. Il utilise la valeur du parent pour chaque champ laissé à None. Un champ que vous définissez
remplace la valeur du parent, et une liste vide ne fournit aucun élément au sous-agent : aucune fusion n'est effectuée.
model, reasoning_effort et temperature suivent les mêmes règles que dans
agents.Agent. provider nécessite aussi model. Le sous-agent n'hérite jamais du output_type
du parent : son résultat est sa réponse finale.
Un sous-agent s'exécute toujours selon la politique et le mode d'autorisation de l'agent racine. Pour restreindre ses possibilités, donnez-lui moins d'outils.
Un sous-agent peut avoir des outils et des hooks que son parent n'a pas. Leurs fonctions s'exécutent au même endroit que celles du parent. Les noms d'outils sont partagés par toute l'arborescence : deux fonctions différentes ne peuvent donc pas porter le même nom, où qu'elles se trouvent dans celle-ci.
Connecteurs : connectors=[] n'en fournit aucun au sous-agent. Une liste accepte les mêmes éléments que
Agent(connectors=...) : agents.connector(...) lui fournit exactement ces connecteurs, et
agents.all_connectors(...) lui fournit tous les connecteurs que l'utilisateur peut utiliser.
builtins est le seul champ dont les valeurs sont fusionnées : chaque champ défini dans agents.Builtins(...)
remplace la valeur du parent, et chaque champ omis la conserve. Par exemple,
agents.Builtins(skills=False) désactive uniquement les skills. Désactiver programmatic_tool_calling
nécessite aussi subagents=False. Un sous-agent qui définit ses propres skills ou sous-agents doit avoir la fonctionnalité
intégrée correspondante activée. sandbox_access définit l'accès du sous-agent à la sandbox partagée par toute l'arborescence ;
une arborescence sans sandbox n'accepte que "none".
skills accepte des bundles locaux et des skills du registre. Dans une sandbox qui stocke des fichiers, les skills
propres au sous-agent sont écrits au démarrage de celui-ci. agents.all_registry_skills() est réservé à
l'agent racine : un sous-agent qui ne définit pas skills utilise les skills de la racine.
Pour ajouter un outil à ceux du parent, passez la liste du parent et la liste étendue de l'enfant :
BASE = [lookup, search]
agent = agents.Agent(
model="mistral-large-4",
tools=BASE,
subagents=[
agents.Subagent(
name="deployer",
description="Deploys a reviewed build.",
instructions="Deploy only what you are asked to deploy.",
tools=[*BASE, deploy],
)
],
)SubagentPolicySubagentPolicy
class SubagentPolicy(
*,
concurrent_child_turn_limit: int = 10,
max_depth: int = 2,
idle_message_starts: Literal['direct_children', 'none'] = 'direct_children',
)Limites applicables aux sous-agents d'une arborescence de sessions : la session racine et tous les sous-agents qu'elle contient.
Passez cette politique via Agent(subagent_policy=...). La politique de l'agent racine s'applique à tous ses sous-agents,
et aucun sous-agent ne peut en augmenter les limites. Un agent qui possède des sous-agents sans politique explicite utilise les
valeurs par défaut ci-dessous.
Autorisations
PermissionModePermissionMode
PermissionMode = Literal['auto', 'ask', 'deny']Définit les appels d'outils nécessitant une approbation : "auto" exécute chaque appel autorisé par la permission_policy
de l'agent (tous les appels en l'absence de politique), "ask" ouvre une demande d'approbation pour chaque appel, et "deny" les refuse.
PermissionPolicyPermissionPolicy
class PermissionPolicy(
*,
default: Literal['allow', 'deny', 'ask'],
rules: tuple[PermissionRule, ...] = (),
)Règles d'autorisation ordonnées et décision par défaut pour les appels qui ne correspondent à aucune règle.
PermissionRulePermissionRule
class PermissionRule(
*,
tools: tuple[str, ...],
decision: Literal['allow', 'deny', 'ask'],
allowlist: tuple[str, ...] = (),
denylist: tuple[str, ...] = (),
sensitive: tuple[str, ...] = (),
)Définit si les appels des outils correspondant à tools sont exécutés, soumis à approbation ou refusés.
Une politique applique la première règle dont tools correspond à l'identifiant stable de l'outil appelé, par exemple
client.deploy_service, et non au nom que voit le modèle ; un appel qui ne correspond à aucune règle utilise le
default de la politique. Dans la règle qui s'applique :
- Un motif de
denylistcorrespond : refuser. - Un motif de
sensitivecorrespond : demander une approbation. allowlistn'est pas vide : autoriser si un motif correspond, sinon demander une approbation.- Sinon : la valeur
decisionde la règle.
Les motifs sont des glob patterns sensibles à la casse qui correspondent à l'ensemble du texte. Les motifs d'arguments correspondent aux
arguments de l'appel sous forme de JSON avec des clés triées, avec ou sans espace après : et ,, par exemple
'*"environment": "production"*'. Un motif tools sans espace de noms ni caractère générique, comme
deploy_service, ne correspond à aucun outil et lève donc ValueError.
Skills
RegistrySkillRegistrySkill
class RegistrySkill(*, id: UUID, version: int | None = None)Un skill issu de votre espace de travail, dans Le registre de l'IA, identifié par son ID et, éventuellement, sa version.
AllRegistrySkillsAllRegistrySkills
class AllRegistrySkills()Tous les skills présents dans Le registre de l'IA de votre espace de travail au démarrage de la session racine.
agents.all_registry_skills() renvoie cet objet.
agents.all_registry_skillsagents.all_registry_skills
def agents.all_registry_skills() -> AllRegistrySkillsDonnez à l'agent tous les skills présents dans Le registre de l'IA de votre espace de travail.
Un agent déployé reçoit les skills accessibles à l'utilisateur qui démarre la session. Une session locale
utilise votre clé API Mistral. Les versions sont fixées au démarrage de la session, et chaque
skill est téléchargé lors de sa première utilisation par l'agent. Un RegistrySkill présent dans la même liste conserve
sa propre version.
SandboxWorkspaceSkillsSandboxWorkspaceSkills
class SandboxWorkspaceSkills(
*,
root: str | None = None,
dirs: tuple[str, ...] = ('.agents/skills', '.vibe/skills'),
)Mettez à disposition les skills déjà présents dans la sandbox, par exemple ceux d'un dépôt cloné par un hook de sandbox.
Le SDK les recherche une seule fois, après l'exécution des hooks de sandbox et avant le premier tour. Un skill est
un dossier contenant un SKILL.md dans l'un des répertoires de dirs, sous root ou dans un dépôt situé directement
sous ce répertoire.
LocalSkillBundleLocalSkillBundle
class LocalSkillBundle(*, files: list[LocalSkillFile] = [])Un skill que l'agent emporte avec lui : les fichiers d'un dossier de skill sur votre machine.
Créez-en un avec LocalSkillBundle.from_directory(path).
LocalSkillBundle.from_directoryLocalSkillBundle.from_directory
@classmethod
def from_directory(path: str | Path) -> SelfRegroupez le contenu d'un répertoire de skill : son SKILL.md et tous les fichiers qui l'accompagnent.
LocalSkillFileLocalSkillFile
class LocalSkillFile(*, path: str, content_base64: str, executable: bool = False)Un fichier d'un LocalSkillBundle.
Secrets
MistralSecretMistralSecret
class MistralSecret(*, ref: str | None = None, worker_env: bool = False)Un secret du gestionnaire de secrets Mistral.
Créez-le avec MistralSecret.workspace(NAME), ou omettez la référence avec
MistralSecret() et associez-le au déploiement avec
agents deploy --secret-binding NAME=secret:workspace:..., qui remplace également une référence existante.
worker_env=True définit aussi le secret comme variable d'environnement là où vos outils Python
s'exécutent, pour qu'ils puissent le lire ; sans cette option, le secret n'est transmis qu'aux destinations qui le désignent.
| Attribut | Type | Description |
|---|---|---|
kind | Literal['mistral'] | Toujours "mistral" : le gestionnaire de secrets Mistral. |
MistralSecret.workspaceMistralSecret.workspace
@classmethod
def workspace(name: str, *, worker_env: bool = False) -> SelfLe secret name de l'espace de travail dans le gestionnaire de secrets.
Masquage
redaction.Redactionredaction.Redaction
type Redaction = (
redaction.RedactionPolicy
| list[redaction.RedactionPolicy]
| tuple[redaction.RedactionPolicy, ...]
)Ce qu'accepte Agent(redaction=...) : une RedactionPolicy ou une liste de politiques, appliquées dans l'ordre.
[] désactive le masquage.
redaction.RedactionPolicyredaction.RedactionPolicy
type RedactionPolicy = (
OperationDataTransformer
| Callable[[str, OperationDataValue], OperationDataValue | None]
)Une méthode de masquage des secrets et des données personnelles dans les traces de l'agent : une politique de masquage ou une
fonction (key, value).
OperationDataTransformer représente une politique de masquage, telle que RegexRedactionPolicy : un
objet dont la méthode transform renvoie la valeur à enregistrer, ou None pour l'omettre.
OperationDataValue représente la valeur d'un champ de trace : une chaîne, un nombre, un booléen, des octets, None,
ou une liste ou un dictionnaire de ces valeurs.
redaction.RegexRedactionPolicyredaction.RegexRedactionPolicy
class RegexRedactionPolicy(
patterns: Sequence[Pattern[str]] = redaction.DEFAULT_PII_SECRET_PATTERNS,
*,
safe_keys: frozenset[str] = redaction.DEFAULT_SAFE_ATTRIBUTE_KEYS,
safe_key_patterns: Sequence[Pattern[str]] = redaction.DEFAULT_TOKEN_PATTERNS,
redacted_value: str = '[REDACTED]',
)Remplace les correspondances de motifs, par exemple les clés API, les adresses e-mail et les numéros de carte, par [REDACTED] dans les traces de l'agent. Les valeurs des clés sûres sont analysées uniquement avec safe_key_patterns.
redaction.AttributeRedactionPolicyredaction.AttributeRedactionPolicy
class AttributeRedactionPolicy(
*,
sensitive_keys: frozenset[str] = redaction.DEFAULT_SENSITIVE_ATTRIBUTE_KEYS,
safe_keys: frozenset[str] = redaction.DEFAULT_SAFE_ATTRIBUTE_KEYS,
sensitive_fragments: frozenset[str] = redaction.DEFAULT_SENSITIVE_ATTRIBUTE_FRAGMENTS,
token_patterns: Sequence[Pattern[str]] = redaction.DEFAULT_TOKEN_PATTERNS,
redact_non_primitive: bool = True,
redacted_value: str = '[REDACTED]',
)Masque intégralement les valeurs des champs de trace sensibles, tels que les messages et les arguments d'outils, et remplace les tokens dans les valeurs conservées.
redaction.CallbackRedactionPolicyredaction.CallbackRedactionPolicy
class CallbackRedactionPolicy(
mask_function: redaction.AttributeMaskCallback,
*,
recursive: bool = False,
)Effectue le masquage avec votre fonction : elle reçoit la clé et la valeur de chaque champ et renvoie la valeur à conserver, ou None pour omettre le champ.
Avec recursive=True, la fonction reçoit chaque feuille d'une valeur structurée, par exemple le texte de chaque message, avec le nom du champ comme clé. Renvoyer None n'omet alors que cette feuille.
redaction.AttributeMaskCallbackredaction.AttributeMaskCallback
type AttributeMaskCallback = Callable[[str, OperationDataValue], OperationDataValue | None]Une fonction de masquage : elle reçoit la clé et la valeur d'un champ et renvoie la valeur à conserver, ou None pour omettre le champ.
Valeurs par défaut du masquage
| Nom | Description |
|---|---|
redaction.CARD_NUMBER_PATTERN | Un motif pour les numéros de carte : 13 à 16 chiffres, avec des espaces ou des tirets facultatifs. |
redaction.DEFAULT_PII_SECRET_PATTERNS | DEFAULT_TOKEN_PATTERNS, plus EMAIL_PATTERN, CARD_NUMBER_PATTERN et IPV4_PATTERN. |
redaction.DEFAULT_REDACTED_VALUE | Le texte qui remplace une valeur masquée : '[REDACTED]'. |
redaction.DEFAULT_SAFE_ATTRIBUTE_KEYS | Clés de trace dont les valeurs sont des ID, des noms et des paramètres, telles que gen_ai.request.model et gen_ai.tool.name : seuls les tokens sont recherchés dans ces valeurs. |
redaction.DEFAULT_SENSITIVE_ATTRIBUTE_FRAGMENTS | Parties d'une clé entraînant le masquage intégral de sa valeur : api_key, argument, arguments, authorization, body, completion, content, cookie, input, message, messages, output, password, payload, prompt, secret, set_cookie et token. |
redaction.DEFAULT_SENSITIVE_ATTRIBUTE_KEYS | Clés de trace dont les valeurs sont intégralement masquées : messages, définitions d'outils, arguments et résultats, corps et en-têtes des requêtes et réponses, URL, adresses, requêtes et messages d'exception. |
redaction.DEFAULT_TOKEN_PATTERNS | Motifs pour les secrets : tokens bearer, clés privées, JSON Web Tokens, URL de webhook et clés API de Mistral, GitHub, GitLab, Slack, AWS, Google, Hugging Face, Stripe et d'autres services. |
redaction.EMAIL_PATTERN | Un motif pour les adresses e-mail. |
redaction.IPV4_PATTERN | Un motif pour les adresses IPv4. |