4 4
5# 託管 Agent SDK5# 託管 Agent SDK
6 6
7> 在生產環境中部署和託管 Claude Agent SDK7> 在生產環境中部署 Agent SDK:子流程架構、會話持久化、擴展、可觀測性和 Docker、Kubernetes 及沙箱提供商的多租戶隔離。
8 8
9Claude Agent SDK 與傳統的無狀態 LLM API 不同,它維護對話狀態並在持久環境中執行命令。本指南涵蓋了在生產環境中部署基於 SDK 的代理的架構、託管考慮因素和最佳實踐。9Agent SDK 會生成並監督一個擁有 shell、工作目錄和磁盤上會話文件的 `claude` CLI 子流程。託管它不像託管無狀態 API 包裝器。每個運行的代理都是與本地狀態綁定的長期進程,這決定了您如何分配資源、持久化會話以及跨租戶進行擴展。
10
11本頁涵蓋在您自己的基礎設施上自託管:了解[子流程模型](#the-subprocess-model)、[選擇會話模式](#choose-a-session-pattern)、[配置容器](#provision-the-container)以及[處理生產問題](#handle-production-concerns),如持久化、可觀測性、身份驗證和多租戶隔離。有關可部署的 Dockerfile 和 Kubernetes 清單,請參閱[託管指南](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting)。
12
13如果您不需要基礎設施控制、自定義隔離或自己的數據平面,請改為考慮[託管代理](https://platform.claude.com/docs/en/managed-agents/overview):一個託管的 REST API,其中 Anthropic 運行代理和沙箱,因此您的應用程序發送事件並流回結果,無需操作任何託管基礎設施。
10 14
11<Info>15<Info>
12 如需超越基本沙箱的安全強化(包括網路控制、認證管理和隔離選項),請參閱 [安全部署](/zh-TW/agent-sdk/secure-deployment)。16 如需超越基本沙箱的安全強化(包括網路控制、認證管理和隔離選項),請參閱[安全部署](/zh-TW/agent-sdk/secure-deployment)。
13</Info>17</Info>
14 18
15## 託管要求19<h2 id="the-subprocess-model">
20 子進程模型
21</h2>
22
23此頁面上的每個託管決策都遵循 SDK 如何運行代理的方式。當您的代碼調用 `query()` 時,SDK 會生成一個單獨的 `claude` CLI 進程,並通過 stdio 與其通信。該子進程擁有 shell、工作目錄和本地磁盤上的 JSONL 會話記錄。
24
25<img src="https://mintcdn.com/claude-code/Akpoo6g0xDlAmvHv/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=Akpoo6g0xDlAmvHv&q=85&s=d348cc9687d47e0bc954075fd88d0e60" alt="Request flow: client to your app, which spawns a claude CLI subprocess over stdio inside the container; the subprocess writes to local disk and calls api.anthropic.com over HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />
26
27一個代理會話映射到一個子進程。運行 N 個並發會話意味著 N 個子進程,每個都有自己的進程樹和記錄文件。默認情況下,它們都繼承您應用程序的工作目錄,因此當會話需要單獨的文件系統時,在每個 `query()` 調用上傳遞 `cwd`:
28
29<CodeGroup>
30 ```typescript TypeScript theme={null}
31 query({ prompt, options: { cwd: "/work/session-a" } })
32 ```
33
34 ```python Python theme={null}
35 query(prompt=prompt, options=ClaudeAgentOptions(cwd="/work/session-a"))
36 ```
37</CodeGroup>
38
39<h3 id="state-that-lives-on-local-disk">
40 存儲在本地磁盤上的狀態
41</h3>
42
43三種代理狀態默認存儲在容器的文件系統上。它們都不會在容器重新啟動、縮減或移動到不同節點時存活。
44
45| 狀態 | 默認位置 |
46| ---------------- | --------------------------------------------------------------------- |
47| 會話記錄 | `~/.claude/projects/`,或如果設置了 `CLAUDE_CONFIG_DIR`,則為其下的 `projects/` 目錄 |
48| `CLAUDE.md` 內存文件 | 用戶層級的 `~/.claude/CLAUDE.md` 和項目層級的會話工作目錄 |
49| 工作目錄工件 | 會話的工作目錄 |
50
51要在主機之間持久化記錄,請配置 [`SessionStore` 適配器](/zh-TW/agent-sdk/session-storage)。內存文件和其他工作目錄工件需要自己的存儲策略,例如掛載卷或對象存儲同步。
52
53有關會話、恢復和分叉在 API 級別如何工作的信息,請參閱 [Sessions](/zh-TW/agent-sdk/sessions)。
54
55<h2 id="choose-a-session-pattern">
56 選擇會話模式
57</h2>
58
59這四種模式涵蓋會話生命週期:容器相對於其服務的會話存在多長時間。關於容器運行的位置,[託管食譜](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb)提供了[可部署的代碼](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting),用於本地 Docker、Modal 和 Kubernetes。在此選擇會話模式,並從食譜中選擇部署目標。
60
61<h3 id="ephemeral-sessions">
62 臨時會話
63</h3>
64
65為每個用戶任務創建一個容器,並在任務完成時銷毀它。最適合一次性任務。用戶可能仍然可以在任務完成時與 AI 互動,但一旦完成,容器就會被銷毀。
66
67示例工作負載包括錯誤調查和修復、發票和收據提取、文檔翻譯和媒體轉換。
68
69容器運行一個一次性入口點,該入口點調用 SDK 並退出。下面的示例顯示了一個最小的 TypeScript 版本。將其保存為 `entrypoint.mts` 或在 `package.json` 中設置 `"type": "module"`,以便頂級 `await` 可用。
70
71```typescript theme={null}
72import { query } from "@anthropic-ai/claude-agent-sdk";
73
74const prompt = process.env.TASK_PROMPT!;
75for await (const message of query({ prompt, options: { maxTurns: 20 } })) {
76 console.log(message);
77}
78```
79
80<h3 id="long-running-sessions">
81 長時間運行的會話
82</h3>
83
84運行持久容器實例,通常在每個容器中託管多個 SDK 進程,以服務持續的工作。最適合採取自主行動、提供內容或處理高容量消息流的代理。
85
86示例工作負載包括對傳入郵件進行分類和回應的電子郵件代理、通過容器端口託管每個用戶可編輯網站的網站構建器,以及處理來自 Slack 等平台的持續流量的聊天機器人。
87
88容器公開 HTTP 或 WebSocket 端點,並將每個活動會話映射到長期查詢及其背後的子進程。在 TypeScript 中,使用 [`streamInput()`](/zh-TW/agent-sdk/typescript#query-object) 向活動會話添加轉換,並使用 [`startup()`](/zh-TW/agent-sdk/typescript#startup) 在傳入流量之前預熱子進程。在 Python 中,使用 [`ClaudeSDKClient`](/zh-TW/agent-sdk/python#claudesdkclient) 在多個轉換中保持會話打開。調整容器大小,使其能夠在內存中保持最大數量的並發會話。
89
90<h3 id="hybrid-sessions">
91 混合會話
92</h3>
93
94臨時容器在啟動時從 [`SessionStore`](/zh-TW/agent-sdk/session-storage) 進行補充,並將更新持久化回去。最適合跨越許多交互但在交互之間處於空閒狀態的會話。容器在空閒期間關閉,當用戶返回時重新啟動。
95
96示例工作負載包括具有間歇性檢查的個人項目管理器、暫停和恢復數小時的深度研究,以及在交互中加載票證歷史記錄的客戶支持代理。
97
98根據您期望用戶返回的頻率調整提供商的空閒超時。在沒有配置 `SessionStore` 的情況下關閉容器會丟失其轉錄,因此存儲對於此模式是必需的,而不是可選的。
99
100該模式的關鍵在於通過 ID 恢復會話,並附加共享存儲:
101
102<CodeGroup>
103 ```typescript TypeScript theme={null}
104 import { query, type SessionStore } from "@anthropic-ai/claude-agent-sdk";
105
106 declare const userInput: string;
107 declare const sessionId: string; // looked up from your database by user
108 declare const sessionStore: SessionStore; // S3, Redis, Postgres, or your own adapter
109
110 for await (const message of query({
111 prompt: userInput,
112 options: { resume: sessionId, sessionStore },
113 })) {
114 // ...
115 }
116 ```
117
118 ```python Python theme={null}
119 from claude_agent_sdk import query, ClaudeAgentOptions
120
121 async for message in query(
122 prompt=user_input,
123 options=ClaudeAgentOptions(
124 resume=session_id, # looked up from your database by user
125 session_store=session_store, # S3, Redis, Postgres, or your own adapter
126 ),
127 ):
128 ...
129 ```
130</CodeGroup>
131
132有關完整的 `SessionStore` 接口和參考適配器,請參閱[會話存儲](/zh-TW/agent-sdk/session-storage)。
133
134<h3 id="multi-agent-container">
135 多代理容器
136</h3>
137
138在一個容器內運行多個 SDK 子進程。最適合必須密切協作的代理,例如多代理模擬,其中代理在共享環境中相互交互。
16 139
17### 基於容器的沙箱140為每個代理提供自己的工作目錄,以便它們不會相互覆蓋文件,並隔離設置加載,以便每個代理的 `CLAUDE.md` 文件不會洩露到其他代理。有關特定選項,請參閱[多租戶隔離](#multi-tenant-isolation)。
18 141
19為了安全和隔離,SDK 應在沙箱容器環境中運行。這提供了進程隔離、資源限制、網路控制和臨時文件系統。142<h2 id="provision-the-container">
143 配置容器
144</h2>
20 145
21SDK 還支持 [程序化沙箱配置](/zh-TW/agent-sdk/typescript#sandbox-settings) 用於命令執行。146<h3 id="container-based-sandboxing">
147 基於容器的沙箱
148</h3>
22 149
23### 系統要求150在沙箱容器內運行 SDK,以實現進程隔離、資源限制、網絡控制和臨時文件系統。多個提供商專門提供適合 Agent SDK 模型的沙箱容器環境。
24 151
25每個 SDK 實例需要:152選擇提供商時要回答的問題:
26 153
27* **運行時依賴項**154* **誰運行沙箱**:沙箱即服務提供商為您運營基礎設施,而自託管選項則提供您可在自己的基礎設施上運行的軟件。
28 * Python 3.10+ 用於 Python SDK,或 Node.js 18+ 用於 TypeScript SDK155* **冷啟動延遲**:從「創建沙箱」到「準備好接受第一個請求」需要多長時間。臨時模式需要亞秒級啟動。長期運行模式可以容忍更長的延遲。
29 * 兩個 SDK 套件都為主機平台捆綁了本機 Claude Code 二進制文件,因此不需要為生成的 CLI 單獨安裝 Claude Code 或 Node.js156* **持久存儲**:提供商是否提供持久卷或僅提供臨時磁盤。混合模式需要在沙箱內或沙箱旁邊的某處進行持久存儲。
157* **定價模型**:按秒、按請求或按小時固定計費。按秒計費適合突發性臨時工作負載。按小時計費適合長期運行的會話。
158* **網絡**:支持自定義出站規則、出站代理和私有 VPC 對等互連,用於受管制的環境。
30 159
31* **資源分配**160要評估的提供商:
32 * 建議:1GiB RAM、5GiB 磁盤和 1 個 CPU(根據您的任務需要進行調整)
33 161
34* **網路訪問**162* [Modal Sandbox](https://modal.com/docs/guide/sandbox),附帶[演示實現](https://modal.com/docs/examples/claude-slack-gif-creator)
35 * 出站 HTTPS 到 `api.anthropic.com`163* [Cloudflare Sandboxes](https://github.com/cloudflare/sandbox-sdk)
36 * 可選:訪問 MCP 伺服器或外部工具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)
37 168
38## 理解 SDK 架構169有關自託管選項(如 Docker、gVisor 和 Firecracker)以及詳細的隔離配置,請參閱[隔離技術](/zh-TW/agent-sdk/secure-deployment#isolation-technologies)。
39 170
40與無狀態 API 調用不同,Claude Agent SDK 作為 **長時間運行的進程** 運行,該進程:171<h3 id="runtime-dependencies">
172 運行時依賴項
173</h3>
41 174
42* **在持久 shell 環境中執行命令**175容器只需要您的 SDK 的語言運行時:
43* **在工作目錄內管理文件操作**
44* **使用來自先前交互的上下文處理工具執行**
45 176
46## 沙箱提供商選項177* Python SDK 需要 Python 3.10+,或 TypeScript SDK 需要 Node.js 18+
178* 兩個 SDK 套件都為主機平台捆綁了本機 Claude Code 二進制文件,因此不需要為生成的 CLI 單獨安裝 Claude Code 或 Node.js
47 179
48多個提供商專門提供用於 AI 代碼執行的安全容器環境:180捆綁的二進制文件被固定到 SDK 套件版本,因此更新 SDK 是更新 CLI 的方式。SDK 遵循 semver:持續採用補丁版本,並在採用次要版本之前查看 [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) 或 [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) 更改日誌。
49 181
50* **[Modal Sandbox](https://modal.com/docs/guide/sandbox)** - [演示實現](https://modal.com/docs/examples/claude-slack-gif-creator)182<h3 id="resources">
51* **[Cloudflare Sandboxes](https://github.com/cloudflare/sandbox-sdk)**183 資源
52* **[Daytona](https://www.daytona.io/)**184</h3>
53* **[E2B](https://e2b.dev/)**
54* **[Fly Machines](https://fly.io/docs/machines/)**
55* **[Vercel Sandbox](https://vercel.com/docs/functions/sandbox)**
56 185
57有關自託管選項(Docker、gVisor、Firecracker)和詳細隔離配置,請參閱 [隔離技術](/zh-TW/agent-sdk/secure-deployment#isolation-technologies)。186每個代理的 1 GiB RAM、5 GiB 磁盤和 1 個 CPU 是新啟動實例的合理起點。內存使用量隨著會話長度和工具活動而增長,因此應根據您實際需要的會話長度和並發性進行調整,而不是根據空閒基線。有關如何計算每個主機的代理數量,請參閱[擴展和並發](#scaling-and-concurrency)。
58 187
59## 生產部署模式188<h3 id="network">
189 網絡
190</h3>
60 191
61### 模式 1:臨時會話192SDK 需要對 `api.anthropic.com` 的出站 HTTPS,或在 Bedrock 或 Vertex 上運行時對您提供商的區域端點的出站 HTTPS。如果您的代理使用 [MCP servers](/zh-TW/agent-sdk/mcp) 或外部工具,它們還需要對這些端點的出站訪問。對於生產環境,通過強制執行域名允許列表、注入憑證和記錄請求的出站代理路由出站流量。有關完整模式,請參閱[安全部署](/zh-TW/agent-sdk/secure-deployment)。
62 193
63為每個用戶任務創建一個新容器,然後在完成時銷毀它。194對於入站流量,在容器上公開 HTTP 或 WebSocket 端口。您的應用程序在該端口上處理客戶端請求並在內部調用 SDK;子進程本身不在網絡上監聽。
64 195
65最適合一次性任務,用戶可能仍然在任務完成時與 AI 交互,但一旦完成,容器就會被銷毀。196<h2 id="handle-production-concerns">
197 處理生產環境問題
198</h2>
66 199
67**示例:**200在部署自託管代理之前,請完成這些決策。
68 201
69* 錯誤調查和修復:使用相關上下文調試和解決特定問題202<h3 id="session-and-state-persistence">
70* 發票處理:從收據/發票中提取和結構化數據用於會計系統203 會話和狀態持久化
71* 翻譯任務:在語言之間翻譯文檔或內容批次204</h3>
72* 圖像/視頻處理:對媒體文件應用轉換、優化或提取元數據
73 205
74### 模式 2:長時間運行的會話206預設本地磁碟在重新啟動、縮減或移至不同節點時會遺失。對於任何使用者期望恢復的會話,使用 [`SessionStore` 適配器](/zh-TW/agent-sdk/session-storage)將文字記錄鏡像到持久儲存。請參閱[參考實現](/zh-TW/agent-sdk/session-storage#reference-implementations)以了解 S3、Redis 和 Postgres 適配器,以及用於您自己實現的一致性測試套件。
75 207
76為長時間運行的任務維護持久容器實例。通常在容器內根據需求運行 **多個** Claude Agent 進程。208關於 `SessionStore` 行為,有三件事需要了解:
77 209
78最適合主動代理,它們在沒有用戶輸入的情況下採取行動、提供內容的代理或處理大量消息的代理。210* **僅文字記錄**:`SessionStore` 鏡像文字記錄,而不是 `CLAUDE.md` 記憶檔案或其他工作目錄工件。掛載共享磁碟區或分別同步這些檔案。
211* **鏡像,而非替換**:子程序首先寫入本地磁碟,然後存儲接收每個批次的副本。本地寫入保持權威性。
212* **`mirror_error` 訊息**:如果存儲拒絕或逾時,SDK 會發出 `{ type: "system", subtype: "mirror_error" }` 訊息並繼續查詢而不重試。如果存儲持久性很重要,請對這些進行警報。
79 213
80**示例:**214<h3 id="observability">
215 可觀測性
216</h3>
81 217
82* 電子郵件代理:監控傳入電子郵件並根據內容自主進行分類、回應或採取行動218Agent SDK 代理是長期運行的程序,在許多 API 往返中生成工具呼叫。沒有遙測,您無法看到哪些工具運行、它們花費了多長時間或會話在何處停滯。
83* 網站構建器:為每個用戶託管自定義網站,具有通過容器端口提供的實時編輯功能
84* 高頻聊天機器人:處理來自 Slack 等平台的連續消息流,其中快速響應時間至關重要
85 219
86### 模式 3:混合會話220SDK 從環境繼承 OpenTelemetry 配置。在容器或編排器級別設定 OTEL 環境變數,以便每個 `query()` 呼叫都將跨度、指標和日誌事件匯出到您的收集器。下面的範例為所有三個信號啟用 OTLP 匯出。`CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` 僅對跟蹤是必需的;如果您僅匯出指標和日誌,請省略它。
87 221
88臨時容器,使用歷史和狀態進行補充,可能來自數據庫或 SDK 的會話恢復功能。222```bash title=".env' theme={null}
223CLAUDE_CODE_ENABLE_TELEMETRY=1
224CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1
225OTEL_TRACES_EXPORTER=otlp
226OTEL_METRICS_EXPORTER=otlp
227OTEL_LOGS_EXPORTER=otlp
228OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
229OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318
230```
89 231
90最適合與用戶進行間歇性交互的容器,啟動工作並在工作完成時關閉,但可以繼續。232預設情況下,匯出中不包含提示文字和工具輸入。請參閱[控制匯出中的敏感資料](/zh-TW/agent-sdk/observability#control-sensitive-data-in-exports)以了解選擇加入標誌,以及[可觀測性](/zh-TW/agent-sdk/observability)以了解完整的信號目錄。
91 233
92**示例:**234<h3 id="auth-and-secrets">
235 驗證和祕密
236</h3>
93 237
94* 個人項目經理:幫助管理進行中的項目,進行間歇性檢查,維護任務、決策和進度的上下文238託管時有三個驗證問題很重要:
95* 深度研究:進行多小時的研究任務,保存發現並在用戶返回時恢復調查
96* 客戶支持代理:處理跨越多個交互的支持票證,加載票證歷史和客戶上下文
97 239
98### 模式 4:單個容器240* **Anthropic API**:子程序從其環境讀取 `ANTHROPIC_API_KEY`。從您的祕密管理器提供它,或設定 `ANTHROPIC_BASE_URL` 以透過在容器外注入金鑰的代理路由模型呼叫。請參閱[認證管理](/zh-TW/agent-sdk/secure-deployment#credential-management)以了解代理模式,以及[SDK 概述](/zh-TW/agent-sdk/overview#get-started)以了解支援的驗證方法。
241* **入站**:在代理容器前面的閘道處放置驗證。代理應接收預先驗證的請求,不應是驗證使用者令牌的元件。
242* **出站工具**:將工具認證保留在代理環境之外。透過在請求離開容器後注入 API 金鑰的代理路由出站呼叫。代理進行呼叫;代理添加認證。
99 243
100在一個全局容器中運行多個 Claude Agent SDK 進程。244<h3 id="scaling-and-concurrency">
245 縮放和並行
246</h3>
101 247
102最適合必須密切協作的代理。這可能是最不受歡迎的模式,因為您必須防止代理相互覆蓋。248每個會話在其自己的子程序中運行,因此主機上的並行受其 RAM 可以容納多少個子程序的限制。
103 249
104**示例:**250使用此公式調整每個主機的大小:
105 251
106* **模擬**:在模擬(如視頻遊戲)中相互交互的代理。252```text theme={null}
253agents per host = (host RAM - overhead) / (per-session RAM ceiling)
254```
107 255
108## 常見問題256透過在您的目標長度下運行代表性會話並在預期的工具負載下記錄峰值 RSS 來測量每個會話的上限。[資源](#resources)中的 1 GiB 起點是下限,而不是上限。
109 257
110### 我如何與我的沙箱通信?258水平縮放路由取決於您的模式。對於長時間運行的會話,其中容器保持許多會話,在負載平衡器後面運行容器池,並使用 `sessionId` 上的一致性雜湊將每個會話固定到一個容器。固定的會話會持續命中同一容器,因此會命中同一運行中的子程序,直到它被驅逐或容器重新啟動。
111 259
112在容器中託管時,公開端口以與您的 SDK 實例通信。您的應用程序可以為外部客戶端公開 HTTP/WebSocket 端點,而 SDK 在容器內部運行。260來自單個會話的大量並行[子代理](/zh-TW/agent-sdk/subagents)可能會達到 API 速率限制。將工作分解為較小的批次,而不是發出一個寬廣的調度。
113 261
114### 託管容器的成本是多少?262<h3 id="cost">
263 成本
264</h3>
115 265
116提供代理的主要成本是令牌;容器根據您配置的內容而異,但最低成本大約是每小時 5 美分。266Anthropic 令牌成本通常主導容器基礎設施成本一個數量級或更多。最小配置的容器大約每小時運行 \$0.05,而單個長代理會話可能花費數美元的令牌。請參閱[成本追蹤](/zh-TW/agent-sdk/cost-tracking)以了解每個會話的令牌計帳。
117 267
118### 我應該何時關閉空閒容器與保持它們溫暖?268<h3 id="multi-tenant-isolation">
269 多租戶隔離
270</h3>
119 271
120這可能取決於提供商,不同的沙箱提供商將允許您為空閒超時設置不同的條件,之後沙箱可能會關閉。272預設 SDK 行為從檔案系統讀取設定和 `CLAUDE.md` 記憶檔案。在為多個租戶提供服務的共享容器中,這些檔案可能會將一個租戶的上下文洩露到另一個租戶的會話中。
121您需要根據您認為用戶響應可能的頻率來調整此超時。
122 273
123### 我應該多久更新一次 Claude Code CLI?274要在共享容器內隔離租戶:
124 275
125Claude Code CLI 使用 semver 進行版本控制,因此任何破壞性更改都將被版本化。276* 在 TypeScript 中傳遞 `settingSources: []` 或在 Python 中傳遞 `setting_sources=[]`,以便不載入檔案系統設定。
277* 在 `env` 中設定 `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1`。[自動記憶](/zh-TW/memory#auto-memory)在 `~/.claude/projects/<project>/memory/` 載入系統提示,無論 `settingSources` 如何。請參閱[settingSources 不控制的內容](/zh-TW/agent-sdk/claude-code-features#what-settingsources-does-not-control)以了解無條件載入的其他輸入。
278* 將 `CLAUDE_CONFIG_DIR` 指向每個租戶目錄,以便租戶不共享 `~/.claude.json` 全域配置。
279* 使用每個租戶的工作目錄。在每個 `query()` 呼叫上明確傳遞 `cwd`。
280* 在您的代理處應用每個租戶的出站規則,例如不同的出站 IP、認證或網域允許清單,以便受損的租戶無法透過另一個租戶的出站原則進行資料外洩。
126 281
127### 我如何監控容器健康和代理性能?282下面的範例將四個 SDK 級別的選項應用在一起。構造 `tenantDir` 和 `configDir`,以便每個租戶獲得其他租戶無法讀取的路徑。在 TypeScript 中,`env` 替換子程序環境,因此展開 `...process.env` 以保留繼承的變數,如 `PATH` 和 `ANTHROPIC_API_KEY`。在 Python 中,`env` 合併在繼承的環境之上。
128 283
129由於容器只是伺服器,您用於後端的相同日誌記錄基礎設施將適用於容器。284<CodeGroup>
285 ```typescript TypeScript theme={null}
286 import { query } from "@anthropic-ai/claude-agent-sdk";
130 287
131### 代理會話在超時前可以運行多長時間?288 declare const prompt: string;
289 declare const tenantDir: string;
290 declare const configDir: string;
132 291
133代理會話不會超時,但考慮設置 'maxTurns' 屬性以防止 Claude 陷入循環。292 for await (const message of query({
293 prompt,
294 options: {
295 cwd: tenantDir,
296 settingSources: [],
297 env: {
298 ...process.env,
299 CLAUDE_CONFIG_DIR: configDir,
300 CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
301 },
302 },
303 })) {
304 // ...
305 }
306 ```
134 307
135## 後續步驟308 ```python Python theme={null}
309 from claude_agent_sdk import query, ClaudeAgentOptions
310
311 async for message in query(
312 prompt=prompt,
313 options=ClaudeAgentOptions(
314 cwd=tenant_dir,
315 setting_sources=[],
316 env={
317 "CLAUDE_CONFIG_DIR": config_dir,
318 "CLAUDE_CODE_DISABLE_AUTO_MEMORY": "1",
319 },
320 ),
321 ):
322 ...
323 ```
324</CodeGroup>
325
326如需每個租戶的網路控制,請參閱[安全部署](/zh-TW/agent-sdk/secure-deployment)。
327
328<h2 id="known-limitations">
329 已知限制
330</h2>
136 331
137* [安全部署](/zh-TW/agent-sdk/secure-deployment) - 網路控制、認證管理和隔離強化332在您的部署設計中規劃這些限制。
138* [TypeScript SDK - Sandbox Settings](/zh-TW/agent-sdk/typescript#sandbox-settings) - 以程序方式配置沙箱333
139* [會話指南](/zh-TW/agent-sdk/sessions) - 了解會話管理334| 限制 | 解決方案 |
140* [權限](/zh-TW/agent-sdk/permissions) - 配置工具權限335| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
141* [成本追蹤](/zh-TW/agent-sdk/cost-tracking) - 監控 API 使用情況336| 沒有頂級會話超時 | 會話不會自動超時。在 `Options` 中設置 `maxTurns` 以限制代理在停止前進行多少次工具使用往返。 |
142* [MCP 集成](/zh-TW/agent-sdk/mcp) - 使用自定義工具進行擴展337| 長會話期間的記憶體增長 | 限制會話長度或定期回收子流程。請參閱 [Scaling and concurrency](#scaling-and-concurrency)。 |
338| 大規模並行子代理扇出可能會觸發速率限制 | 將工作分解為較小的批次,而不是發出一次寬泛的調度。 |
339| 沒有每個子代理的牆鐘截止時間 | 使用 `AgentDefinition` 中的 `maxTurns` 限制每個 [subagent](/zh-TW/agent-sdk/subagents)。僅對於後台子代理,`CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` 設置一個停滯監視程序,當 `run_in_background` 子代理停止產生輸出時觸發;它不是總運行時間截止時間。 |
340
341<h2 id="next-steps">
342 後續步驟
343</h2>
344
345* [Hosting cookbook](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb):包含 Docker、Modal 和 Kubernetes 的[可部署程式碼](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting)的筆記本逐步解說。
346* [Session storage](/zh-TW/agent-sdk/session-storage):使用 `SessionStore` 配接器在主機間保留文字記錄。
347* [Observability](/zh-TW/agent-sdk/observability):將 OTEL 追蹤、指標和日誌匯出到您的收集器。
348* [Secure deployment](/zh-TW/agent-sdk/secure-deployment):網路控制、認證管理和隔離強化。
349* [Cost tracking](/zh-TW/agent-sdk/cost-tracking):每個會話的權杖和成本計算。