4 4
5# Héberger l'Agent SDK5# Héberger l'Agent SDK
6 6
7> Déployer l'Agent SDK en production : architecture de sous-processus, persistance des sessions, mise à l'échelle, observabilité et isolation multi-locataire pour Docker, Kubernetes et fournisseurs de sandbox.7> Déployez l'Agent SDK en production : architecture de sous-processus, persistance des sessions, mise à l'échelle, observabilité et isolation multi-locataire pour Docker, Kubernetes et fournisseurs de sandbox.
8 8
9L'Agent SDK crée et supervise un sous-processus CLI `claude` qui possède un shell, un répertoire de travail et des fichiers de session sur le disque. L'héberger n'est pas comme héberger un wrapper API sans état. Chaque agent en cours d'exécution est un processus de longue durée lié à l'état local, ce qui façonne la façon dont vous allouez les ressources, persistez les sessions et mettez à l'échelle entre les locataires.9L'Agent SDK crée et supervise un sous-processus `claude` CLI qui possède un shell, un répertoire de travail et des fichiers de session sur le disque. L'héberger n'est pas comme héberger un wrapper API sans état. Chaque agent en cours d'exécution est un processus de longue durée lié à l'état local, ce qui façonne la façon dont vous allouez les ressources, persistez les sessions et mettez à l'échelle entre les locataires.
10 10
11Cette page couvre l'auto-hébergement sur votre propre infrastructure : comprenez [le modèle de sous-processus](#the-subprocess-model), [choisissez un modèle de session](#choose-a-session-pattern), [provisionnez le conteneur](#provision-the-container) et [gérez les préoccupations de production](#handle-production-concerns) comme la persistance, l'observabilité, l'authentification et l'isolation multi-locataire. Pour les Dockerfiles déployables et les manifestes Kubernetes, consultez le [guide d'hébergement](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting).11Cette page couvre l'auto-hébergement sur votre propre infrastructure. Pour les Dockerfiles et manifestes Kubernetes déployables, consultez le [guide d'hébergement](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting).
12 12
13Si vous n'avez pas besoin de contrôle d'infrastructure, d'isolation personnalisée ou de votre propre plan de données, envisagez plutôt les [Agents gérés](https://platform.claude.com/docs/fr/managed-agents/overview) : une API REST hébergée où Anthropic exécute l'agent et le sandbox, de sorte que votre application envoie des événements et reçoit les résultats en streaming sans infrastructure d'hébergement à exploiter.13Si vous n'avez pas besoin de contrôle d'infrastructure, d'isolation personnalisée ou de votre propre plan de données, envisagez plutôt les [Agents gérés](https://platform.claude.com/docs/en/managed-agents/overview) : une API REST hébergée où Anthropic exécute l'agent et le sandbox, de sorte que votre application envoie des événements et reçoit les résultats en streaming sans infrastructure d'hébergement à exploiter.
14
15<Info>
16 Pour le renforcement de la sécurité au-delà du sandboxing basique, y compris les contrôles réseau, la gestion des identifiants et les options d'isolation, consultez [Déploiement sécurisé](/fr/agent-sdk/secure-deployment).
17</Info>
18 14
19<h2 id="the-subprocess-model">15<h2 id="the-subprocess-model">
20 Le modèle de sous-processus16 Le modèle de sous-processus
22 18
23Chaque décision d'hébergement sur cette page découle de la façon dont le SDK exécute l'agent. Lorsque votre code appelle `query()`, le SDK lance un processus CLI `claude` séparé et communique avec lui via stdio. Ce sous-processus possède le shell, le répertoire de travail et les transcriptions de session JSONL sur le disque local.19Chaque décision d'hébergement sur cette page découle de la façon dont le SDK exécute l'agent. Lorsque votre code appelle `query()`, le SDK lance un processus CLI `claude` séparé et communique avec lui via stdio. Ce sous-processus possède le shell, le répertoire de travail et les transcriptions de session JSONL sur le disque local.
24 20
25<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" alt="Flux de requête : client vers votre application, qui lance un sous-processus CLI claude via stdio à l'intérieur du conteneur ; le sous-processus écrit sur le disque local et appelle api.anthropic.com via HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />21<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" className="dark:hidden" alt="Flux de requête : du client à votre application, qui lance un sous-processus CLI claude via stdio à l'intérieur du conteneur ; le sous-processus écrit sur le disque local et appelle api.anthropic.com via HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />
22
23<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/agent-sdk/hosting-subprocess-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=3fdeff3d7f44b2b67762668acfbb25f5" className="hidden dark:block" alt="Flux de requête : du client à votre application, qui lance un sous-processus CLI claude via stdio à l'intérieur du conteneur ; le sous-processus écrit sur le disque local et appelle api.anthropic.com via HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess-dark.svg" />
26 24
27Une session d'agent correspond à un sous-processus. L'exécution de N sessions concurrentes signifie N sous-processus, chacun avec son propre arborescence de processus et son fichier de transcription. Par défaut, ils héritent tous du répertoire de travail de votre application, donc passez `cwd` sur chaque appel `query()` lorsque les sessions ont besoin de systèmes de fichiers séparés :25Une session d'agent correspond à un sous-processus. L'exécution de N sessions concurrentes signifie N sous-processus, chacun avec son propre arborescence de processus et son fichier de transcription. Par défaut, ils héritent tous du répertoire de travail de votre application. Lorsque les sessions ont besoin de systèmes de fichiers distincts, transmettez un `cwd` distinct dans les options de l'appel `query()` de chaque session :
28 26
29<CodeGroup>27<CodeGroup>
30 ```typescript TypeScript theme={null}28 ```typescript TypeScript theme={null}
31 query({ prompt, options: { cwd: "/work/session-a" } })29 import { query } from "@anthropic-ai/claude-agent-sdk";
30
31 for await (const message of query({
32 prompt: "Summarize the files in this directory",
33 options: { cwd: "/work/session-a" },
34 })) {
35 console.log(message);
36 }
32 ```37 ```
33 38
34 ```python Python theme={null}39 ```python Python theme={null}
35 query(prompt=prompt, options=ClaudeAgentOptions(cwd="/work/session-a"))40 import asyncio
41
42 from claude_agent_sdk import ClaudeAgentOptions, query
43
44
45 async def main():
46 async for message in query(
47 prompt="Summarize the files in this directory",
48 options=ClaudeAgentOptions(cwd="/work/session-a"),
49 ):
50 print(message)
51
52
53 asyncio.run(main())
36 ```54 ```
37</CodeGroup>55</CodeGroup>
38 56
57Les exemples TypeScript sur cette page utilisent `await` au niveau supérieur, donc enregistrez-les en tant que fichiers `.mts` ou définissez `"type": "module"` dans `package.json`.
58
39<h3 id="state-that-lives-on-local-disk">59<h3 id="state-that-lives-on-local-disk">
40 État qui réside sur le disque local60 État qui réside sur le disque local
41</h3>61</h3>
42 62
43Trois types d'état d'agent résident sur le système de fichiers du conteneur par défaut. Aucun d'entre eux ne survit à un redémarrage de conteneur, une réduction d'échelle ou un déplacement vers un nœud différent.63Trois types d'état d'agent résident par défaut sur le système de fichiers du conteneur. Aucun d'entre eux ne survit à un redémarrage de conteneur, à une réduction d'échelle ou à un déplacement vers un nœud différent.
44 64
45| État | Emplacement par défaut |65| État | Emplacement par défaut |
46| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------- |66| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
48| Fichiers mémoire `CLAUDE.md` | `~/.claude/CLAUDE.md` pour le niveau utilisateur et le répertoire de travail de la session pour le niveau projet |68| Fichiers mémoire `CLAUDE.md` | `~/.claude/CLAUDE.md` pour le niveau utilisateur et le répertoire de travail de la session pour le niveau projet |
49| Artefacts du répertoire de travail | Le répertoire de travail de la session |69| Artefacts du répertoire de travail | Le répertoire de travail de la session |
50 70
51Pour persister les transcriptions entre les hôtes, configurez un adaptateur [`SessionStore`](/fr/agent-sdk/session-storage). Les fichiers mémoire et autres artefacts du répertoire de travail ont besoin de leur propre stratégie de stockage, comme un volume monté ou une synchronisation de magasin d'objets.71Pour persister les transcriptions entre les hôtes, configurez un adaptateur [`SessionStore`](/docs/fr/agent-sdk/session-storage). Les fichiers mémoire et autres artefacts du répertoire de travail ont besoin de leur propre stratégie de stockage, comme un volume monté ou une synchronisation de magasin d'objets.
52 72
53Pour savoir comment les sessions, la reprise et la bifurcation fonctionnent au niveau de l'API, consultez [Sessions](/fr/agent-sdk/sessions).73Pour savoir comment les sessions, la reprise et la bifurcation fonctionnent au niveau de l'API, consultez [Sessions](/docs/fr/agent-sdk/sessions).
54 74
55<h2 id="choose-a-session-pattern">75<h2 id="choose-a-session-pattern">
56 Choisir un modèle de session76 Choisir un modèle de session
62 Sessions éphémères82 Sessions éphémères
63</h3>83</h3>
64 84
65Créez un conteneur pour chaque tâche utilisateur et détruisez-le lorsque la tâche est terminée. Idéal pour les tâches ponctuelles. L'utilisateur peut toujours interagir avec l'IA pendant que la tâche s'exécute, mais une fois terminée, le conteneur est détruit.85Créez un conteneur pour chaque tâche utilisateur et détruisez-le lorsque la tâche est terminée. Idéal pour les tâches ponctuelles. L'utilisateur peut toujours interagir avec l'IA pendant que la tâche se termine, mais une fois terminée, le conteneur est détruit.
66 86
67Les charges de travail d'exemple incluent l'investigation et la correction de bogues, l'extraction de factures et de reçus, la traduction de documents et la transformation de médias.87Les charges de travail d'exemple incluent l'investigation et la correction de bogues, l'extraction de factures et de reçus, la traduction de documents et la transformation de médias.
68 88
69Le conteneur exécute un point d'entrée unique qui appelle le SDK et se termine. L'exemple ci-dessous montre une version TypeScript minimale. Enregistrez-la sous `entrypoint.mts` ou définissez `"type": "module"` dans `package.json` pour que `await` au niveau supérieur soit disponible.89Le conteneur exécute un point d'entrée unique qui lit la tâche à partir de la variable d'environnement `TASK_PROMPT`, appelle le SDK et se termine.
70 90
71```typescript theme={null}91<CodeGroup>
72import { query } from "@anthropic-ai/claude-agent-sdk";92 ```typescript TypeScript theme={null}
93 import { query } from "@anthropic-ai/claude-agent-sdk";
73 94
74const prompt = process.env.TASK_PROMPT!;95 const prompt = process.env.TASK_PROMPT!;
75for await (const message of query({ prompt, options: { maxTurns: 20 } })) {96 for await (const message of query({ prompt, options: { maxTurns: 20 } })) {
76 console.log(message);97 console.log(message);
77}98 }
78```99 ```
100
101 ```python Python theme={null}
102 import asyncio
103 import os
104
105 from claude_agent_sdk import ClaudeAgentOptions, query
106
107
108 async def main():
109 async for message in query(
110 prompt=os.environ["TASK_PROMPT"],
111 options=ClaudeAgentOptions(max_turns=20),
112 ):
113 print(message)
114
115
116 asyncio.run(main())
117 ```
118</CodeGroup>
119
120Le script affiche chaque message à son arrivée, y compris un message de résultat dont le `subtype` est `success` lorsque la tâche se termine dans la limite de tours. Si la tâche atteint plutôt la limite de 20 tours, le `subtype` du message de résultat est `error_max_turns` et l'appel `query()` lève une erreur après l'avoir cédé, donc enveloppez la boucle dans un bloc try si le conteneur doit se terminer correctement. Consultez [Gérer le résultat](/docs/fr/agent-sdk/agent-loop#handle-the-result) pour les sous-types d'erreur.
79 121
80<h3 id="long-running-sessions">122<h3 id="long-running-sessions">
81 Sessions de longue durée123 Sessions longue durée
82</h3>124</h3>
83 125
84Exécutez des instances de conteneur persistantes, souvent hébergeant plusieurs processus SDK par conteneur, pour servir le travail continu. Idéal pour les agents qui prennent des mesures autonomes, servent du contenu ou gèrent des flux de messages à haut volume.126Exécutez des instances de conteneur persistantes, souvent hébergeant plusieurs processus SDK par conteneur, pour servir le travail en cours. Idéal pour les agents qui prennent des mesures autonomes, servent du contenu ou gèrent des flux de messages à haut volume.
85 127
86Les charges de travail d'exemple incluent un agent de messagerie qui trie et répond aux messages entrants, un générateur de site qui héberge un site modifiable par utilisateur via les ports du conteneur, et un chatbot qui gère le trafic continu d'une plateforme comme Slack.128Les charges de travail d'exemple incluent un agent de messagerie qui trie et répond aux messages entrants, un générateur de sites qui héberge un site modifiable par utilisateur via les ports du conteneur, et un chatbot qui gère le trafic continu d'une plateforme comme Slack.
87 129
88Le conteneur expose un point de terminaison HTTP ou WebSocket et mappe chaque session active à une requête de longue durée et au sous-processus derrière elle. En TypeScript, utilisez [`streamInput()`](/fr/agent-sdk/typescript#query-object) pour ajouter des tours à une session active et [`startup()`](/fr/agent-sdk/typescript#startup) pour préchauffer les sous-processus avant le trafic entrant. En Python, utilisez [`ClaudeSDKClient`](/fr/agent-sdk/python#claudesdkclient) pour maintenir une session ouverte entre les tours. Dimensionnez le conteneur pour qu'il puisse contenir le nombre maximum de sessions simultanées en mémoire.130Le conteneur expose un point de terminaison HTTP ou WebSocket et mappe chaque session active à une requête longue durée et au sous-processus derrière elle. En TypeScript, utilisez [`streamInput()`](/docs/fr/agent-sdk/typescript#query-object) pour ajouter des tours à une session active et [`startup()`](/docs/fr/agent-sdk/typescript#startup) pour préchauffer les sous-processus avant le trafic entrant. En Python, utilisez [`ClaudeSDKClient`](/docs/fr/agent-sdk/python#claudesdkclient) pour maintenir une session ouverte entre les tours. Dimensionnez le conteneur pour qu'il puisse contenir le nombre maximum de sessions simultanées en mémoire.
89 131
90<h3 id="hybrid-sessions">132<h3 id="hybrid-sessions">
91 Sessions hybrides133 Sessions hybrides
92</h3>134</h3>
93 135
94Conteneurs éphémères qui s'hydratent à partir d'un [`SessionStore`](/fr/agent-sdk/session-storage) au démarrage et persistent les mises à jour en retour. Idéal pour les sessions qui s'étendent sur de nombreuses interactions mais restent inactives entre elles. Le conteneur s'arrête pendant les périodes d'inactivité et redémarre lorsque l'utilisateur revient.136Conteneurs éphémères qui s'hydratent à partir d'un [`SessionStore`](/docs/fr/agent-sdk/session-storage) au démarrage et persistent les mises à jour en retour. Idéal pour les sessions qui s'étendent sur de nombreuses interactions mais restent inactives entre elles. Le conteneur s'arrête pendant les périodes d'inactivité et redémarre lorsque l'utilisateur revient.
95 137
96Les charges de travail d'exemple incluent un gestionnaire de projet personnel avec des vérifications intermittentes, une recherche approfondie qui s'interrompt et reprend sur des heures, et un agent d'assistance client qui charge l'historique des tickets entre les interactions.138Les charges de travail d'exemple incluent un gestionnaire de projet personnel avec des vérifications intermittentes, une recherche approfondie qui s'interrompt et reprend sur des heures, et un agent d'assistance client qui charge l'historique des tickets entre les interactions.
97 139
116 ```158 ```
117 159
118 ```python Python theme={null}160 ```python Python theme={null}
119 from claude_agent_sdk import query, ClaudeAgentOptions161 from claude_agent_sdk import query, ClaudeAgentOptions, SessionStore
162 import asyncio
163
164 user_input: str = ...
165 session_id: str = ... # looked up from your database by user
166 session_store: SessionStore = ... # S3, Redis, Postgres, or your own adapter
120 167
168
169 async def main():
121 async for message in query(170 async for message in query(
122 prompt=user_input,171 prompt=user_input,
123 options=ClaudeAgentOptions(172 options=ClaudeAgentOptions(
124 resume=session_id, # looked up from your database by user173 resume=session_id,
125 session_store=session_store, # S3, Redis, Postgres, or your own adapter174 session_store=session_store,
126 ),175 ),
127 ):176 ):
128 ...177 ...
178
179
180 asyncio.run(main())
129 ```181 ```
130</CodeGroup>182</CodeGroup>
131 183
132Consultez [Stockage de session](/fr/agent-sdk/session-storage) pour l'interface `SessionStore` complète et les adaptateurs de référence.
133
134<h3 id="multi-agent-container">184<h3 id="multi-agent-container">
135 Conteneur multi-agent185 Conteneur multi-agent
136</h3>186</h3>
147 Sandboxing basé sur conteneur197 Sandboxing basé sur conteneur
148</h3>198</h3>
149 199
150Exécutez le SDK à l'intérieur d'un conteneur sécurisé pour l'isolation des processus, les limites de ressources, le contrôle du réseau et un système de fichiers éphémère. Plusieurs fournisseurs se spécialisent dans les environnements de conteneurs sécurisés qui correspondent au modèle du SDK Agent.200Exécutez le SDK à l'intérieur d'un conteneur en sandbox pour l'isolation des processus, les limites de ressources, le contrôle du réseau et un système de fichiers éphémère.
151 201
152Questions à répondre lors du choix d'un fournisseur :202Questions à répondre lors du choix d'un fournisseur :
153 203
154* **Qui exécute le sandbox** : un fournisseur sandbox-as-a-service exploite l'infrastructure pour vous, tandis que les options auto-hébergées vous donnent un logiciel à exécuter sur votre propre infrastructure.204* **Qui exécute le sandbox** : un fournisseur de sandbox-as-a-service exploite l'infrastructure pour vous, tandis que les options auto-hébergées vous donnent un logiciel à exécuter sur votre propre infrastructure.
155* **Latence de démarrage à froid** : combien de temps entre « créer un sandbox » et « prêt à accepter la première requête ». Les modèles éphémères nécessitent des démarrages infra-seconde. Les modèles de longue durée tolèrent davantage.205* **Latence de démarrage à froid** : combien de temps entre « créer un sandbox » et « prêt à accepter la première requête ». Les modèles éphémères nécessitent des démarrages infra-seconde. Les modèles de longue durée tolèrent davantage.
156* **Stockage persistant** : si le fournisseur offre des volumes durables ou seulement un disque éphémère. Le modèle hybride a besoin de stockage durable quelque part, que ce soit dans le sandbox ou à côté.206* **Stockage persistant** : si le fournisseur offre des volumes durables ou seulement un disque éphémère. Le modèle hybride a besoin de stockage durable quelque part, que ce soit dans le sandbox ou à côté.
157* **Modèle de tarification** : facturation à la seconde, à la requête ou forfaitaire horaire. La tarification à la seconde convient aux charges de travail éphémères par rafales. La tarification horaire convient aux sessions de longue durée.207* **Modèle de tarification** : facturation à la seconde, à la requête ou forfaitaire horaire. La tarification à la seconde convient aux charges de travail éphémères par rafales. La tarification horaire convient aux sessions de longue durée.
158* **Réseau** : support des règles de sortie personnalisées, des proxies sortants et de l'appairage VPC privé pour les environnements réglementés.208* **Réseau** : support des règles de sortie personnalisées, des proxies sortants et de l'appairage VPC privé pour les environnements réglementés.
159 209
160Fournisseurs à évaluer :210Pour les options auto-hébergées telles que Docker, gVisor et Firecracker, et la configuration d'isolation détaillée, consultez [Technologies d'isolation](/docs/fr/agent-sdk/secure-deployment#isolation-technologies).
161
162* [Modal Sandbox](https://modal.com/docs/guide/sandbox), avec une [implémentation de démonstration](https://modal.com/docs/examples/claude-slack-gif-creator)
163* [Cloudflare Sandboxes](https://github.com/cloudflare/sandbox-sdk)
164* [Daytona](https://www.daytona.io/)
165* [E2B](https://e2b.dev/)
166* [Fly Machines](https://fly.io/docs/machines/)
167* [Vercel Sandbox](https://vercel.com/docs/functions/sandbox)
168
169Pour les options auto-hébergées telles que Docker, gVisor et Firecracker, et la configuration détaillée de l'isolation, voir [Technologies d'isolation](/fr/agent-sdk/secure-deployment#isolation-technologies).
170 211
171<h3 id="runtime-dependencies">212<h3 id="runtime-dependencies">
172 Dépendances d'exécution213 Dépendances d'exécution
173</h3>214</h3>
174 215
175Le conteneur a besoin uniquement du runtime de langage de votre SDK :216Le conteneur a besoin du runtime de langage de votre SDK :
176 217
177* Python 3.10+ pour le SDK Python, ou Node.js 18+ pour le SDK TypeScript218* Python 3.10+ pour le SDK Python, ou Node.js 18+ pour le SDK TypeScript
178* Les deux packages SDK incluent un binaire Claude Code natif pour la plateforme hôte, donc aucune installation séparée de Claude Code ou Node.js n'est nécessaire pour le CLI généré219* Les deux SDK TypeScript et Python regroupent un binaire Claude Code natif pour la plupart des installations, et le CLI généré n'a besoin d'aucune installation Node.js séparée. Consultez la [note d'installation du démarrage rapide](/docs/fr/agent-sdk/quickstart) pour les installations qui nécessitent une installation Claude Code native séparée.
179 220
180Le binaire inclus est épinglé à la version du package SDK, donc la mise à jour du SDK est la façon de mettre à jour le CLI. Le SDK suit semver : prenez les versions de correctif en continu et consultez le changelog [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) ou [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) avant de prendre une version mineure.221Le binaire regroupé est épinglé à la version du package SDK, donc la mise à jour du SDK est la façon de mettre à jour le CLI. Le SDK suit semver : prenez les versions de correctif en continu et consultez le changelog [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) ou [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) avant de prendre une version mineure.
181 222
182<h3 id="resources">223<h3 id="resources">
183 Ressources224 Ressources
184</h3>225</h3>
185 226
1861 GiB de RAM, 5 GiB de disque et 1 CPU par agent est un point de départ raisonnable pour une instance fraîchement démarrée. L'utilisation de la mémoire augmente avec la durée de la session et l'activité des outils, donc dimensionnez pour les durées de session et la concurrence que vous avez réellement besoin plutôt que la ligne de base inactive. Voir [Mise à l'échelle et concurrence](#scaling-and-concurrency) pour savoir comment calculer les agents par hôte.2271 GiB de RAM, 5 GiB de disque et 1 CPU par agent est un point de départ raisonnable pour une instance fraîchement démarrée. L'utilisation de la mémoire augmente avec la durée de la session et l'activité des outils, donc dimensionnez pour les durées de session et la concurrence que vous avez réellement besoin plutôt que la ligne de base inactive. Consultez [Mise à l'échelle et concurrence](#scaling-and-concurrency) pour savoir comment calculer les agents par hôte.
187 228
188<h3 id="network">229<h3 id="network">
189 Réseau230 Réseau
190</h3>231</h3>
191 232
192Le SDK a besoin d'un accès HTTPS sortant à `api.anthropic.com`, ou au point de terminaison régional de votre fournisseur lors de l'exécution sur Amazon Bedrock ou Google Cloud's Agent Platform. Si vos agents utilisent des [serveurs MCP](/fr/agent-sdk/mcp) ou des outils externes, ils ont besoin d'un accès sortant à ces points de terminaison également. Pour la production, acheminez le trafic sortant via un proxy de sortie qui applique les listes blanches de domaines, injecte les identifiants et enregistre les requêtes. Voir [Déploiement sécurisé](/fr/agent-sdk/secure-deployment) pour le modèle complet.233Le SDK a besoin d'une sortie HTTPS vers `api.anthropic.com`, ou vers le point de terminaison régional de votre fournisseur lors de l'exécution sur Amazon Bedrock ou la plateforme Agent de Google Cloud. Si vos agents utilisent des [serveurs MCP](/docs/fr/agent-sdk/mcp) ou des outils externes, ils ont également besoin d'un accès sortant à ces points de terminaison. Pour la production, acheminez le trafic sortant via un proxy de sortie qui applique les listes d'autorisation de domaines, injecte les identifiants et enregistre les requêtes. Consultez [Déploiement sécurisé](/docs/fr/agent-sdk/secure-deployment) pour le modèle complet.
193 234
194Pour le trafic entrant, exposez un port HTTP ou WebSocket sur le conteneur. Votre application gère les requêtes des clients sur ce port et appelle le SDK en interne ; le sous-processus lui-même n'écoute pas sur le réseau.235Pour le trafic entrant, exposez un port HTTP ou WebSocket sur le conteneur. Votre application gère les requêtes des clients sur ce port et appelle le SDK en interne ; le sous-processus lui-même n'écoute pas sur le réseau.
195 236
197 Gérer les préoccupations de production238 Gérer les préoccupations de production
198</h2>239</h2>
199 240
200Travaillez à travers ces décisions avant de déployer un agent auto-hébergé.241Travaillez sur ces décisions avant de déployer un agent auto-hébergé.
201 242
202<h3 id="session-and-state-persistence">243<h3 id="session-and-state-persistence">
203 Persistance des sessions et de l'état244 Persistance des sessions et de l'état
204</h3>245</h3>
205 246
206Le disque local par défaut est perdu au redémarrage, à la réduction d'échelle ou à un déplacement vers un nœud différent. Pour toute session qu'un utilisateur s'attend à reprendre, mettez en miroir la transcription vers un stockage durable avec un adaptateur [`SessionStore`](/fr/agent-sdk/session-storage). Consultez [Implémentations de référence](/fr/agent-sdk/session-storage#reference-implementations) pour les adaptateurs S3, Redis et Postgres et une suite de conformité pour la vôtre.247Le disque local par défaut est perdu au redémarrage, à la réduction d'échelle ou au déplacement vers un nœud différent. Pour toute session qu'un utilisateur s'attend à reprendre, mettez en miroir la transcription vers un stockage durable avec un adaptateur [`SessionStore`](/docs/fr/agent-sdk/session-storage). Consultez [Implémentations de référence](/docs/fr/agent-sdk/session-storage#reference-implementations) pour les adaptateurs S3, Redis et Postgres ainsi qu'une suite de conformité pour la vôtre.
207 248
208Trois choses à savoir sur le comportement de `SessionStore` :249Trois choses à savoir sur le comportement de `SessionStore` :
209 250
210* **Transcriptions uniquement** : `SessionStore` met en miroir les transcriptions, pas les fichiers mémoire `CLAUDE.md` ou autres artefacts du répertoire de travail. Montez un volume partagé ou synchronisez-les séparément.251* **Transcriptions uniquement** : `SessionStore` met en miroir les transcriptions, pas les fichiers mémoire `CLAUDE.md` ou autres artefacts du répertoire de travail. Montez un volume partagé ou synchronisez-les séparément.
211* **Miroir, pas remplacement** : le sous-processus écrit d'abord sur le disque local, et le magasin reçoit une copie de chaque lot. Les écritures locales restent faisant autorité.252* **Miroir, pas remplacement** : le sous-processus écrit d'abord sur le disque local, et le SDK transfère une copie de chaque lot au magasin. La transcription locale d'une nouvelle session survit à l'exécution ; une exécution reprise à partir du magasin supprime sa copie locale à la fin, de sorte que le magasin détient la seule copie durable. Consultez [Architecture à double écriture](/docs/fr/agent-sdk/session-storage#dual-write-architecture).
212* **Messages `mirror_error`** : un lot que le magasin rejette est envoyé jusqu'à trois fois au total, avec un court délai d'attente avant chaque nouvelle tentative ; un appel qui expire n'est pas réessayé. Si le lot échoue toujours, le SDK le supprime, émet un message `{ type: "system", subtype: "mirror_error" }`, et continue la requête. Alertez sur ceux-ci si la durabilité du magasin est importante.253* **Messages `mirror_error`** : lorsque le SDK ne peut pas livrer un lot au magasin, il abandonne le lot, émet un message `{ type: "system", subtype: "mirror_error" }` et continue la requête. Alertez sur ces messages si la durabilité du magasin est importante. Consultez [Les écritures en miroir sont au mieux des efforts](/docs/fr/agent-sdk/session-storage#mirror-writes-are-best-effort) pour le comportement de nouvelle tentative et d'expiration.
213 254
214<h3 id="observability">255<h3 id="observability">
215 Observabilité256 Observabilité
217 258
218Les agents du SDK Agent sont des processus de longue durée qui génèrent des appels d'outils sur de nombreux allers-retours API. Sans télémétrie, vous ne pouvez pas voir quels outils ont été exécutés, combien de temps ils ont pris ou où une session s'est bloquée.259Les agents du SDK Agent sont des processus de longue durée qui génèrent des appels d'outils sur de nombreux allers-retours API. Sans télémétrie, vous ne pouvez pas voir quels outils ont été exécutés, combien de temps ils ont pris ou où une session s'est bloquée.
219 260
220Le SDK hérite la configuration OpenTelemetry de l'environnement. Définissez les variables d'environnement OTEL au niveau du conteneur ou de l'orchestrateur afin que chaque appel `query()` exporte des spans, des métriques et des événements de journal vers votre collecteur. L'exemple ci-dessous active l'export OTLP pour les trois signaux. `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` est requis uniquement pour les traces ; omettez-le si vous exportez uniquement les métriques et les journaux.261Le SDK hérite de la configuration OpenTelemetry de l'environnement. Définissez les variables d'environnement OTEL au niveau du conteneur ou de l'orchestrateur afin que chaque appel `query()` exporte des spans, des métriques et des événements de journal vers votre collecteur. L'exemple ci-dessous active l'export OTLP pour les trois signaux. `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` est requis uniquement pour les traces ; omettez-le si vous exportez uniquement des métriques et des journaux.
221 262
222```bash title=".env' theme={null}263```bash title=".env" theme={null}
223CLAUDE_CODE_ENABLE_TELEMETRY=1264CLAUDE_CODE_ENABLE_TELEMETRY=1
224CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1265CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1
225OTEL_TRACES_EXPORTER=otlp266OTEL_TRACES_EXPORTER=otlp
229OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318270OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318
230```271```
231 272
232Le texte d'invite et les entrées d'outils ne sont pas inclus dans les exports par défaut. Consultez [Contrôler les données sensibles dans les exports](/fr/agent-sdk/observability#control-sensitive-data-in-exports) pour les indicateurs d'acceptation et [Observabilité](/fr/agent-sdk/observability) pour le catalogue complet des signaux.273Le texte d'invite et les entrées d'outils ne sont pas inclus dans les exports par défaut. Consultez [Contrôler les données sensibles dans les exports](/docs/fr/agent-sdk/observability#control-sensitive-data-in-exports) pour les drapeaux d'opt-in et [Observabilité](/docs/fr/agent-sdk/observability) pour le catalogue complet des signaux.
233 274
234<h3 id="auth-and-secrets">275<h3 id="auth-and-secrets">
235 Authentification et secrets276 Authentification et secrets
237 278
238Trois préoccupations d'authentification sont importantes au moment de l'hébergement :279Trois préoccupations d'authentification sont importantes au moment de l'hébergement :
239 280
240* **API Anthropic** : le sous-processus lit `ANTHROPIC_API_KEY` de son environnement. Fournissez-le à partir de votre gestionnaire de secrets, ou définissez `ANTHROPIC_BASE_URL` pour acheminer les appels de modèle via un proxy qui injecte la clé en dehors du conteneur. Consultez [Gestion des identifiants](/fr/agent-sdk/secure-deployment#credential-management) pour le modèle de proxy et [Aperçu du SDK](/fr/agent-sdk/overview#get-started) pour les méthodes d'authentification prises en charge.281* **API Anthropic** : le sous-processus lit `ANTHROPIC_API_KEY` à partir de son environnement. Fournissez-le à partir de votre gestionnaire de secrets, ou définissez `ANTHROPIC_BASE_URL` pour acheminer les appels de modèle via un proxy qui injecte la clé en dehors du conteneur. Consultez [Gestion des identifiants](/docs/fr/agent-sdk/secure-deployment#credential-management) pour le modèle de proxy et [Configuration dans le démarrage rapide du SDK](/docs/fr/agent-sdk/quickstart#setup) pour les méthodes d'authentification prises en charge.
241* **Entrant** : mettez l'authentification à une passerelle devant le conteneur de l'agent. L'agent doit recevoir des requêtes pré-authentifiées et ne doit pas être le composant qui valide les jetons utilisateur.282* **Entrant** : mettez l'authentification à une passerelle devant le conteneur de l'agent. L'agent doit recevoir des requêtes pré-authentifiées et ne doit pas être le composant qui valide les jetons utilisateur.
242* **Outils sortants** : gardez les identifiants d'outils en dehors de l'environnement de l'agent. Acheminez les appels sortants via un proxy qui injecte les clés API après que la requête quitte le conteneur. L'agent effectue l'appel ; le proxy ajoute l'identifiant.283* **Outils sortants** : gardez les identifiants d'outils hors de l'environnement de l'agent. Acheminez les appels sortants via un proxy qui injecte les clés API après que la requête quitte le conteneur. L'agent effectue l'appel ; le proxy ajoute l'identifiant.
243 284
244<h3 id="scaling-and-concurrency">285<h3 id="scaling-and-concurrency">
245 Mise à l'échelle et concurrence286 Mise à l'échelle et concurrence
246</h3>287</h3>
247 288
248Chaque session s'exécute dans son propre sous-processus, donc la concurrence sur un hôte est limitée par le nombre de sous-processus que sa RAM peut contenir.289Chaque session s'exécute dans son propre sous-processus, de sorte que la concurrence sur un hôte est limitée par le nombre de sous-processus que sa RAM peut contenir.
249 290
250Dimensionnez chaque hôte avec cette formule :291Dimensionnez chaque hôte avec cette formule :
251 292
253agents par hôte = (RAM hôte - surcharge) / (plafond RAM par session)294agents par hôte = (RAM hôte - surcharge) / (plafond RAM par session)
254```295```
255 296
256Mesurez le plafond par session en exécutant une session représentative jusqu'à votre longueur cible sous votre charge d'outils attendue et en enregistrant le pic RSS. Le point de départ de 1 GiB dans [Ressources](#resources) est un plancher, pas le plafond.297Mesurez le plafond par session en exécutant une session représentative jusqu'à votre longueur cible sous votre charge d'outils attendue et en enregistrant le RSS de pointe. Le point de départ de 1 GiB dans [Ressources](#resources) est un plancher, pas le plafond.
257
258Le routage à l'échelle horizontale dépend de votre modèle. Pour les sessions de longue durée, où les conteneurs contiennent de nombreuses sessions, exécutez un pool de conteneurs derrière un équilibreur de charge et épinglez chaque session à un conteneur en utilisant un hachage cohérent sur `sessionId`. Une session épinglée continue à frapper le même conteneur, et donc le même sous-processus en cours d'exécution, jusqu'à ce qu'il soit évincé ou que le conteneur redémarre.
259 298
260Les grands appels de fan-out concurrents de [sous-agents](/fr/agent-sdk/subagents) à partir d'une seule session peuvent atteindre les limites de taux API. Divisez le travail en lots plus petits plutôt que d'émettre une seule distribution large.299Le routage à l'échelle horizontale dépend de votre modèle. Pour les sessions de longue durée, où les conteneurs contiennent de nombreuses sessions, exécutez un pool de conteneurs derrière un équilibreur de charge et épinglez chaque session à un conteneur en utilisant le hachage cohérent sur `sessionId`. Une session épinglée continue à frapper le même conteneur, et donc le même sous-processus en cours d'exécution, jusqu'à ce qu'il soit évincé ou que le conteneur redémarre.
261 300
262<h3 id="cost">301<h3 id="cost">
263 Coût302 Coût
264</h3>303</h3>
265 304
266Le coût des jetons Anthropic domine généralement le coût de l'infrastructure du conteneur d'un ordre de grandeur ou plus. Un conteneur minimalement provisionné coûte environ 0,05 \$ par heure, tandis qu'une seule session d'agent longue peut dépenser des dollars en jetons. Consultez [Suivi des coûts](/fr/agent-sdk/cost-tracking) pour la comptabilité des jetons par session.305Le coût des jetons Anthropic domine généralement le coût de l'infrastructure du conteneur d'un ordre de grandeur ou plus. Un conteneur minimalement provisionné coûte environ 0,05 \$ par heure, tandis qu'une seule session d'agent longue peut dépenser des dollars en jetons. Consultez [Suivi des coûts](/docs/fr/agent-sdk/cost-tracking) pour la comptabilité des jetons par session.
267 306
268<h3 id="multi-tenant-isolation">307<h3 id="multi-tenant-isolation">
269 Isolation multi-locataire308 Isolation multi-locataire
271 310
272Le comportement par défaut du SDK lit les paramètres et les fichiers mémoire `CLAUDE.md` à partir du système de fichiers. Dans un conteneur partagé qui sert plusieurs locataires, ces fichiers peuvent fuir le contexte d'un locataire dans la session d'un autre locataire.311Le comportement par défaut du SDK lit les paramètres et les fichiers mémoire `CLAUDE.md` à partir du système de fichiers. Dans un conteneur partagé qui sert plusieurs locataires, ces fichiers peuvent fuir le contexte d'un locataire dans la session d'un autre locataire.
273 312
274Pour isoler les locataires à l'intérieur d'un conteneur partagé :313Pour isoler les locataires dans un conteneur partagé :
275 314
276* Passez `settingSources: []` en TypeScript ou `setting_sources=[]` en Python afin qu'aucun paramètre du système de fichiers ne se charge.315* Passez `settingSources: []` en TypeScript ou `setting_sources=[]` en Python pour ignorer les paramètres utilisateur, projet et locaux.
277* Définissez `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` dans `env`. [Auto memory](/fr/memory#auto-memory) à `~/.claude/projects/<project>/memory/` se charge dans l'invite système indépendamment de `settingSources`. Consultez [Ce que settingSources ne contrôle pas](/fr/agent-sdk/claude-code-features#what-settingsources-does-not-control) pour les autres entrées qui se chargent sans condition.316* Définissez `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` dans `env`. [La mémoire automatique](/docs/fr/memory#auto-memory) à `~/.claude/projects/<project>/memory/` se charge dans l'invite système indépendamment de `settingSources`. Consultez [Ce que settingSources ne contrôle pas](/docs/fr/agent-sdk/claude-code-features#what-settingsources-does-not-control) pour les autres entrées qui se chargent sans condition.
278* Pointez `CLAUDE_CONFIG_DIR` vers un répertoire par locataire afin que les locataires ne partagent pas la configuration globale `~/.claude.json`.317* Pointez `CLAUDE_CONFIG_DIR` vers un répertoire par locataire afin que les locataires ne partagent pas la configuration globale `~/.claude.json`. Lorsque chaque répertoire de configuration sert un répertoire de travail et que vous ne partagez pas un [`SessionStore`](/docs/fr/agent-sdk/session-storage) entre les locataires, vous pouvez également définir [`CLAUDE_CODE_PROJECT_DIR_NAME`](/docs/fr/sessions#name-the-project-directory-yourself) dans `env` pour garder les chemins de transcription sous celui-ci courts. Nécessite TypeScript Agent SDK v0.3.234 ou ultérieur, ou Python Agent SDK v0.2.140 ou ultérieur.
279* Utilisez un répertoire de travail par locataire. Passez `cwd` explicitement à chaque appel `query()`.318* Utilisez un répertoire de travail par locataire. Passez `cwd` explicitement à chaque appel `query()`.
280* Appliquez des règles de sortie par locataire à votre proxy, telles que des adresses IP sortantes distinctes, des identifiants ou des listes blanches de domaines, afin qu'un locataire compromis ne puisse pas exfiltrer les données via la politique sortante d'un autre locataire.319* Appliquez des règles de sortie par locataire à votre proxy, telles que des adresses IP sortantes distinctes, des identifiants ou des listes blanches de domaines, afin qu'un locataire compromis ne puisse pas exfiltrer les données via la politique sortante d'un autre locataire.
281 320
282L'exemple ci-dessous applique les quatre options au niveau du SDK ensemble. Construisez `tenantDir` et `configDir` afin que chaque locataire obtienne un chemin qu'aucun autre locataire ne peut lire. En TypeScript, `env` remplace l'environnement du sous-processus, donc propagez `...process.env` pour conserver les variables héritées comme `PATH` et `ANTHROPIC_API_KEY`. En Python, `env` est fusionné au-dessus de l'environnement hérité.321L'exemple ci-dessous applique les options de paramètres, de mémoire automatique, de répertoire de configuration et de répertoire de travail ensemble. Construisez `tenantDir` et `configDir` afin que chaque locataire obtienne un chemin qu'aucun autre locataire ne peut lire. En TypeScript, `env` remplace l'environnement du sous-processus, donc propagez `...process.env` pour conserver les variables héritées comme `PATH` et `ANTHROPIC_API_KEY`. En Python, `env` est fusionné au-dessus de l'environnement hérité.
283 322
284<CodeGroup>323<CodeGroup>
285 ```typescript TypeScript theme={null}324 ```typescript TypeScript theme={null}
307 346
308 ```python Python theme={null}347 ```python Python theme={null}
309 from claude_agent_sdk import query, ClaudeAgentOptions348 from claude_agent_sdk import query, ClaudeAgentOptions
349 import asyncio
310 350
351 prompt: str = ...
352 tenant_dir: str = ...
353 config_dir: str = ...
354
355
356 async def main():
311 async for message in query(357 async for message in query(
312 prompt=prompt,358 prompt=prompt,
313 options=ClaudeAgentOptions(359 options=ClaudeAgentOptions(
320 ),366 ),
321 ):367 ):
322 ...368 ...
369
370
371 asyncio.run(main())
323 ```372 ```
324</CodeGroup>373</CodeGroup>
325 374
326Pour les contrôles réseau par locataire, consultez [Déploiement sécurisé](/fr/agent-sdk/secure-deployment).
327
328<h2 id="known-limitations">375<h2 id="known-limitations">
329 Limitations connues376 Limitations connues
330</h2>377</h2>
331 378
332Planifiez autour de celles-ci dans votre conception de déploiement.379Planifiez autour de ces éléments dans votre conception de déploiement.
333 380
334| Limitation | Que faire |381| Limitation | Que faire |
335| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |382| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
336| Pas de délai d'expiration de session au niveau supérieur | Une session n'expire pas d'elle-même. Définissez `maxTurns` dans `Options` pour limiter le nombre de cycles d'utilisation d'outils que l'agent effectue avant de s'arrêter. |383| Pas de délai d'expiration de session au niveau supérieur | Une session n'expire pas d'elle-même. Définissez `maxTurns` en TypeScript ou `max_turns` en Python pour limiter le nombre de cycles d'utilisation d'outils que l'agent effectue avant de s'arrêter. |
337| Croissance de la mémoire au cours de longues sessions | Limitez la durée de la session ou recyclez les sous-processus périodiquement. Voir [Mise à l'échelle et concurrence](#scaling-and-concurrency). |384| Croissance de la mémoire au cours de longues sessions | Limitez la longueur de la session ou recyclez les sous-processus périodiquement. Voir [Mise à l'échelle et concurrence](#scaling-and-concurrency). |
338| Les grands déploiements parallèles de sous-agents peuvent atteindre les limites de débit | Divisez le travail en lots plus petits plutôt que d'émettre un seul envoi large. |385| Les grands déploiements parallèles de sous-agents peuvent atteindre les limites de débit | Divisez le travail en lots plus petits plutôt que d'émettre un seul envoi large. |
339| Pas de délai limite d'horloge murale par sous-agent | Limitez chaque [sous-agent](/fr/agent-sdk/subagents) avec `maxTurns` dans sa `AgentDefinition`. Pour les sous-agents d'arrière-plan uniquement, `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` définit un chien de garde de stagnation qui se déclenche lorsqu'un sous-agent `run_in_background` cesse de produire une sortie ; ce n'est pas un délai d'exécution total. |386| Pas de délai limite d'horloge murale par sous-agent | Limitez chaque [sous-agent](/docs/fr/agent-sdk/subagents) avec `maxTurns` dans sa `AgentDefinition`. `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` définit un chien de garde de stagnation qui se déclenche lorsqu'un sous-agent cesse de produire une sortie ; ce n'est pas un délai d'exécution total. |
387
388<h2 id="troubleshoot-deployment-failures">
389 Dépanner les défaillances de déploiement
390</h2>
391
392Utilisez cette section lorsqu'un agent qui fonctionne sur votre machine échoue dans un service déployé. Chaque élément ci-dessous nomme une défaillance et établit un lien vers l'entrée qui la couvre :
393
394* **CLI introuvable au démarrage du service** : en Python, un conteneur ou un gestionnaire de services exécute votre application avec un `PATH` différent de celui de votre shell, donc une installation qui fonctionne localement n'est pas visible pour le processus. En TypeScript, la génération d'image a ignoré les dépendances optionnelles du SDK, ou `pathToClaudeCodeExecutable` pointe vers un fichier qui n'existe pas dans l'image. Voir [Claude Code introuvable](/docs/fr/agent-sdk/troubleshooting#clinotfounderror-claude-code-not-found).
395* **CLI présente dans l'image mais ne se lance pas** : Claude Code ne peut pas démarrer à partir d'un binaire qui ne correspond pas à l'architecture ou à la libc du conteneur, ou à partir d'un fichier qui a perdu sa permission d'exécution lors de la génération d'image. Voir [Échec du démarrage de Claude Code](/docs/fr/agent-sdk/troubleshooting#cliconnectionerror-failed-to-start-claude-code).
396* **Le processus Claude Code se termine en cours d'exécution** : l'erreur que votre application reçoit dépend du langage du SDK et du fait que la CLI ait d'abord signalé un résultat d'erreur. Les entrées sous [Sortie du processus CLI](/docs/fr/agent-sdk/troubleshooting#cli-process-exit) couvrent chaque message.
340 397
341<h2 id="next-steps">398<h2 id="next-steps">
342 Étapes suivantes399 Étapes suivantes
343</h2>400</h2>
344 401
345* [Carnet de recettes d'hébergement](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb) : parcours du carnet avec [code déployable](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) pour Docker, Modal et Kubernetes.402* [Carnet de recettes d'hébergement](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb) : parcours du carnet avec [code déployable](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) pour Docker, Modal et Kubernetes.
346* [Stockage des sessions](/fr/agent-sdk/session-storage) : persistez les transcriptions entre les hôtes avec un adaptateur `SessionStore`.403* [Stockage des sessions](/docs/fr/agent-sdk/session-storage) : persistez les transcriptions entre les hôtes avec un adaptateur `SessionStore`.
347* [Observabilité](/fr/agent-sdk/observability) : exportez les traces OTEL, les métriques et les journaux vers votre collecteur.404* [Observabilité](/docs/fr/agent-sdk/observability) : exportez les traces OTEL, les métriques et les journaux vers votre collecteur.
348* [Déploiement sécurisé](/fr/agent-sdk/secure-deployment) : contrôles réseau, gestion des identifiants et renforcement de l'isolation.405* [Déploiement sécurisé](/docs/fr/agent-sdk/secure-deployment) : contrôles réseau, gestion des identifiants et renforcement de l'isolation.
349* [Suivi des coûts](/fr/agent-sdk/cost-tracking) : comptabilité des jetons et des coûts par session.406* [Suivi des coûts](/docs/fr/agent-sdk/cost-tracking) : comptabilité des jetons et des coûts par session.