Claude 可以直接在 API 對話中分析資料、建立視覺化圖表、執行複雜計算、執行系統命令、建立和編輯檔案,以及處理上傳的檔案。程式碼執行工具允許 Claude 在安全的沙箱環境中執行 Bash 命令並操作檔案,包括編寫程式碼。
當與網頁搜尋或網頁擷取一起使用時,程式碼執行是免費的。 當您的請求中包含 web_search_20260209(或更新版本)或 web_fetch_20260209(或更新版本)時,除了標準的輸入和輸出 token 費用外,程式碼執行工具呼叫不會產生額外費用。若未包含這些工具,則適用標準程式碼執行費用。
程式碼執行是建構高效能代理的核心基礎元件。它能在網頁搜尋和網頁擷取工具中實現動態過濾,讓 Claude 在結果進入「context window」(上下文視窗)之前先行處理,從而提高準確性並減少 token 消耗。
請透過意見回饋表單與我們分享您對此功能的意見。
此功能不符合零資料保留(Zero Data Retention,ZDR)的資格。資料將依據該功能的標準保留政策進行保留。
程式碼執行工具可在以下模型上使用:
| 模型 | 工具版本 |
|---|---|
| Claude Fable 5(claude-fable-5) | code_execution_20250825、code_execution_20260120、code_execution_20260521 |
| Claude Mythos 5(claude-mythos-5) | code_execution_20250825、code_execution_20260120、code_execution_20260521 |
| Claude Opus 4.8(claude-opus-4-8) | code_execution_20250825、code_execution_20260120、code_execution_20260521 |
| Claude Opus 4.7(claude-opus-4-7) | code_execution_20250825、code_execution_20260120、code_execution_20260521 |
| Claude Opus 4.6(claude-opus-4-6) | code_execution_20250825、code_execution_20260120、code_execution_20260521 |
| Claude Sonnet 4.6(claude-sonnet-4-6) | code_execution_20250825、code_execution_20260120、code_execution_20260521 |
| Claude Opus 4.5(claude-opus-4-5-20251101) | code_execution_20250825、code_execution_20260120、code_execution_20260521 |
| Claude Sonnet 4.5(claude-sonnet-4-5-20250929) | code_execution_20250825、code_execution_20260120、code_execution_20260521 |
| Claude Haiku 4.5(claude-haiku-4-5-20251001) | code_execution_20250825 |
| Claude Opus 4.1(claude-opus-4-1-20250805)(已棄用) | code_execution_20250825 |
code_execution_20250825 支援 Bash 命令和檔案操作,並可在表格中的所有模型上使用。code_execution_20260120 新增了 REPL 狀態持久化以及從沙箱內進行程式化工具呼叫的功能,僅適用於 Claude Fable 5、Claude Mythos 5、Opus 4.5+ 和 Sonnet 4.5+。code_execution_20260521 與 _20260120 使用相同的執行環境,但在工具描述中揭露了每個 cell 的執行時間限制,讓 Claude 能夠相應地規劃長時間執行的 cell。每個 cell 有 90 秒的實際時間限制;超過此限制的程式碼會回傳 detection_timeout 結果。如果您仍在使用舊版的 code_execution_20250522(僅支援 Python),請參閱升級至最新工具版本以進行遷移。
較舊的工具版本不保證能與較新的模型向後相容。請務必使用與您的模型版本相對應的工具版本。
程式碼執行可在以下平台使用:
程式碼執行目前不適用於 Amazon Bedrock 或 Vertex AI。
對於 Claude Mythos Preview,程式碼執行僅在 Claude API 和 Microsoft Foundry 上支援。Mythos Preview 在 Amazon Bedrock、Vertex AI 或 Claude Platform on AWS 上不支援此功能。
以下是一個要求 Claude 執行計算的簡單範例:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Calculate the mean and standard deviation of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response)當您將程式碼執行工具加入 API 請求時:
當請求能從運算或檔案處理中受益時,Claude 會執行程式碼:
對於以下情況,Claude 會直接回答而不執行程式碼:
如果您希望 Claude 針對邊界情況的請求執行程式碼,請明確提出要求(例如「執行程式碼來驗證這個」)。
當您同時提供程式碼執行工具與其他也會執行程式碼的用戶端提供工具(例如 bash 工具或自訂 REPL)時,Claude 會在多電腦環境中運作。程式碼執行工具在 Anthropic 的沙箱容器中執行,而您的用戶端提供工具則在您控制的獨立環境中執行。Claude 有時可能會混淆這些環境,嘗試使用錯誤的工具或假設狀態在它們之間共享。
為避免此問題,請在您的系統提示中加入說明以釐清兩者的區別:
When multiple code execution environments are available, be aware that:
- Variables, files, and state do NOT persist between different execution environments
- Use the code_execution tool for general-purpose computation in Anthropic's sandboxed environment
- Use client-provided execution tools (e.g., bash) when you need access to the user's local system, files, or data
- If you need to pass results between environments, explicitly include outputs in subsequent tool calls rather than assuming shared state當將程式碼執行與網頁搜尋或網頁擷取結合使用時,這一點尤其重要,因為這些工具會自動啟用程式碼執行。如果您的應用程式已經提供了用戶端的 shell 工具,自動啟用的程式碼執行會建立第二個執行環境,Claude 需要區分這兩者。
若要分析您自己的資料檔案(例如 CSV、Excel 或圖片),請透過 Files API 上傳並在您的請求中引用它們:
將 Files API 與程式碼執行搭配使用需要 Files API beta 標頭:"anthropic-beta": "files-api-2025-04-14"
Python 環境可以處理透過 Files API 上傳的各種檔案類型,包括:
container_upload 內容區塊引用該檔案client = anthropic.Anthropic()
# 上傳檔案
file_object = client.beta.files.upload(
file=open("data.csv", "rb"),
)
# 將 file_id 用於程式碼執行
response = client.beta.messages.create(
model="claude-opus-4-8",
betas=["files-api-2025-04-14"],
max_tokens=4096,
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Analyze this CSV data"},
{"type": "container_upload", "file_id": file_object.id},
],
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response)當 Claude 在程式碼執行期間建立檔案時,您可以使用 Files API 擷取這些檔案:
# 初始化用戶端
client = Anthropic()
# 請求執行會建立檔案的程式碼
response = client.beta.messages.create(
model="claude-opus-4-8",
betas=["files-api-2025-04-14"],
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Create a matplotlib visualization and save it as output.png",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# 從回應中擷取檔案 ID
def extract_file_ids(response):
file_ids = []
for item in response.content:
if item.type == "bash_code_execution_tool_result":
content_item = item.content
if content_item.type == "bash_code_execution_result":
# 具體型別的清單:List[BashCodeExecutionOutputBlock]
for file in content_item.content:
file_ids.append(file.file_id)
return file_ids
# 下載已建立的檔案
for file_id in extract_file_ids(response):
file_metadata = client.beta.files.retrieve_metadata(file_id)
file_content = client.beta.files.download(file_id)
file_content.write_to_file(file_metadata.filename)
print(f"Downloaded: {file_metadata.filename}")程式碼執行工具不需要額外的參數:
{
"type": "code_execution_20250825",
"name": "code_execution"
}當提供此工具時,Claude 會自動取得兩個子工具的存取權限:
bash_code_execution:執行 shell 命令text_editor_code_execution:檢視、建立和編輯檔案,包括編寫程式碼程式碼執行工具可以根據操作回傳兩種類型的結果:
{
"type": "server_tool_use",
"id": "srvtoolu_01B3C4D5E6F7G8H9I0J1K2L3",
"name": "bash_code_execution",
"input": {
"command": "ls -la | head -5"
}
},
{
"type": "bash_code_execution_tool_result",
"tool_use_id": "srvtoolu_01B3C4D5E6F7G8H9I0J1K2L3",
"content": {
"type": "bash_code_execution_result",
"stdout": "total 24\ndrwxr-xr-x 2 user user 4096 Jan 1 12:00 .\ndrwxr-xr-x 3 user user 4096 Jan 1 11:00 ..\n-rw-r--r-- 1 user user 220 Jan 1 12:00 data.csv\n-rw-r--r-- 1 user user 180 Jan 1 12:00 config.json",
"stderr": "",
"return_code": 0
}
}檢視檔案:
{
"type": "server_tool_use",
"id": "srvtoolu_01C4D5E6F7G8H9I0J1K2L3M4",
"name": "text_editor_code_execution",
"input": {
"command": "view",
"path": "config.json"
}
},
{
"type": "text_editor_code_execution_tool_result",
"tool_use_id": "srvtoolu_01C4D5E6F7G8H9I0J1K2L3M4",
"content": {
"type": "text_editor_code_execution_result",
"file_type": "text",
"content": "{\n \"setting\": \"value\",\n \"debug\": true\n}",
"numLines": 4,
"startLine": 1,
"totalLines": 4
}
}建立檔案:
{
"type": "server_tool_use",
"id": "srvtoolu_01D5E6F7G8H9I0J1K2L3M4N5",
"name": "text_editor_code_execution",
"input": {
"command": "create",
"path": "new_file.txt",
"file_text": "Hello, World!"
}
},
{
"type": "text_editor_code_execution_tool_result",
"tool_use_id": "srvtoolu_01D5E6F7G8H9I0J1K2L3M4N5",
"content": {
"type": "text_editor_code_execution_result",
"is_file_update": false
}
}編輯檔案(str_replace):
{
"type": "server_tool_use",
"id": "srvtoolu_01E6F7G8H9I0J1K2L3M4N5O6",
"name": "text_editor_code_execution",
"input": {
"command": "str_replace",
"path": "config.json",
"old_str": "\"debug\": true",
"new_str": "\"debug\": false"
}
},
{
"type": "text_editor_code_execution_tool_result",
"tool_use_id": "srvtoolu_01E6F7G8H9I0J1K2L3M4N5O6",
"content": {
"type": "text_editor_code_execution_result",
"oldStart": 3,
"oldLines": 1,
"newStart": 3,
"newLines": 1,
"lines": ["- \"debug\": true", "+ \"debug\": false"]
}
}所有執行結果都包含:
stdout:成功執行的輸出stderr:執行失敗時的錯誤訊息return_code:0 表示成功,非零表示失敗檔案操作的額外欄位:
file_type、content、numLines、startLine、totalLinesis_file_update(檔案是否已存在)oldStart、oldLines、newStart、newLines、lines(diff 格式)每種工具類型都可能回傳特定的錯誤:
常見錯誤(所有工具):
{
"type": "bash_code_execution_tool_result",
"tool_use_id": "srvtoolu_01VfmxgZ46TiHbmXgy928hQR",
"content": {
"type": "bash_code_execution_tool_result_error",
"error_code": "unavailable"
}
}依工具類型分類的錯誤代碼:
| 工具 | 錯誤代碼 | 說明 |
|---|---|---|
| 所有工具 | unavailable | 工具暫時無法使用 |
| 所有工具 | execution_time_exceeded | 執行超過最大時間限制 |
| 所有工具 | container_expired | 容器已過期且不再可用 |
| 所有工具 | invalid_tool_input | 提供給工具的參數無效 |
| 所有工具 | too_many_requests | 超過工具使用的速率限制 |
| bash | output_file_too_large | 命令輸出超過最大大小 |
| text_editor | file_not_found | 檔案不存在(用於檢視/編輯操作) |
| text_editor | string_not_found | 在檔案中找不到 old_str(用於 str_replace) |
pause_turn 停止原因回應可能包含 pause_turn 停止原因,這表示 API 暫停了一個長時間執行的回合。您可以在後續請求中原樣提供該回應,讓 Claude 繼續其回合,或者如果您希望中斷對話,也可以修改內容。
程式碼執行工具在專為程式碼執行設計的安全容器化環境中執行,並特別著重於 Python。
沙箱 Python 環境包含以下常用函式庫:
您可以透過提供先前回應中的容器 ID,在多個 API 請求之間重複使用現有的容器。這讓您能夠在請求之間保留已建立的檔案。
# 第一個請求:建立一個包含隨機數字的檔案
response1 = client.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Write a file with a random number and save it to '/tmp/number.txt'",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# 從第一個回應中擷取容器 ID
container_id = response1.container.id
# 第二個請求:重複使用該容器來讀取檔案
response2 = client.messages.create(
container=container_id, # Reuse the same container
model="claude-opus-4-8",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Read the number from '/tmp/number.txt' and calculate its square",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response2)啟用「streaming」(串流)後,您將在程式碼執行事件發生時即時接收:
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "code_execution"}}
// Code execution streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"code\":\"import pandas as pd\\ndf = pd.read_csv('data.csv')\\nprint(df.head())\"}"}}
// Pause while code executes
// Execution results streamed
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "code_execution_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": {"stdout": " A B C\n0 1 2 3\n1 4 5 6", "stderr": ""}}}您可以在 Messages Batches API 中包含程式碼執行工具。透過 Messages Batches API 進行的程式碼執行工具呼叫,其定價與一般 Messages API 請求中的定價相同。
與網頁搜尋或網頁擷取一起使用時,程式碼執行是免費的。 當您的 API 請求中包含 web_search_20260209(或更新版本)或 web_fetch_20260209(或更新版本)時,程式碼執行工具呼叫不會產生標準輸入和輸出 token 成本以外的額外費用。
在未搭配這些工具使用時,程式碼執行會依執行時間計費,並與 token 使用量分開追蹤:
程式碼執行使用量會在回應中追蹤:
{
"usage": {
"input_tokens": 105,
"output_tokens": 239,
"server_tool_use": {
"code_execution_requests": 1
}
}
}透過升級至 code-execution-2025-08-25,您可以取得檔案操作和 Bash 功能,包括多種語言的程式碼。價格沒有差異。
| 元件 | 舊版 | 目前版本 |
|---|---|---|
| Beta 標頭 | code-execution-2025-05-22 | code-execution-2025-08-25 |
| 工具類型 | code_execution_20250522 | code_execution_20250825 |
| 功能 | 僅限 Python | Bash 命令、檔案操作 |
| 回應類型 | code_execution_result | bash_code_execution_result、text_editor_code_execution_result |
若要升級,請更新您 API 請求中的工具類型:
- "type": "code_execution_20250522"
+ "type": "code_execution_20250825"檢查回應處理(如果以程式化方式解析回應):
若要在程式碼執行容器內執行工具,請參閱程式化工具呼叫。
程式碼執行在伺服器端的沙箱容器中執行。容器資料(包括執行產物、上傳的檔案和輸出)最多保留 30 天。此保留期限適用於容器環境中處理的所有資料。程式碼執行在 Files API 中建立的檔案(可透過 client.beta.files.download() 擷取)會持續保留,直到被明確刪除為止。
如需了解所有功能的 ZDR 資格,請參閱 API 與資料保留。
程式碼執行工具使 Claude 能夠使用 Agent Skills。Skills 是由指令、腳本和資源組成的模組化功能,可擴展 Claude 的功能。
請參閱 Agent Skills 和透過 API 使用 Agent Skills 以了解更多資訊。
Was this page helpful?