Claude Code SDK
使用 Claude Code SDK 建構自訂 AI 代理
為什麼使用 Claude Code SDK?
Claude Code SDK 提供了建構生產就緒代理所需的所有構建塊:
- 優化的 Claude 整合:自動提示快取和 效能優化
- 豐富的工具生態系統:檔案操作、程式碼執行、網路搜尋和 MCP 擴展性
- 進階權限:對代理能力的細粒度控制
- 生產必需品:內建錯誤處理、會話管理和 監控
您可以使用 SDK 建構什麼?
以下是您可以建立的一些範例代理類型:
編程代理:
- 診斷和修復生產問題的 SRE 代理
- 審核程式碼漏洞的安全審查機器人
- 分類事件的值班工程助理
- 執行風格和最佳實踐的程式碼審查代理
商業代理:
- 審查合約和合規性的法律助理
- 分析報告和預測的財務顧問
- 解決技術問題的客戶支援代理
- 為行銷團隊提供內容創作助理
SDK 目前提供 TypeScript 和 Python 版本,並具有用於快速原型設計的命令列介面 (CLI)。
快速開始
在 5 分鐘內讓您的第一個代理運行:
安裝 SDK
從 NPM 安裝 @anthropic-ai/claude-code
:
從 NPM 安裝 @anthropic-ai/claude-code
:
從 NPM 安裝 @anthropic-ai/claude-code
:
從 PyPI 安裝 claude-code-sdk
並從 NPM 安裝 @anthropic-ai/claude-code
:
(可選)安裝 IPython 進行互動式開發:
設定您的 API 金鑰
從 Anthropic Console 取得您的 API 金鑰並設定 ANTHROPIC_API_KEY
環境變數:
建立您的第一個代理
建立以下範例代理之一:
執行代理
將上述命令直接複製並貼上到您的終端機中。
將上述命令直接複製並貼上到您的終端機中。
- 設定專案:
-
在您的 package.json 中新增
"type": "module"
-
將上述程式碼儲存為
legal-agent.ts
,然後執行:
上述每個範例都會建立一個工作代理,該代理將:
- 使用 Claude 的推理能力分析提示
- 規劃解決問題的多步驟方法
- 使用檔案操作、bash 命令和網路搜尋等工具執行動作
- 根據分析提供可行的建議
核心用法
概述
Claude Code SDK 允許您從應用程式中以非互動模式與 Claude Code 介面。
先決條件
- Node.js 18+
- 來自 NPM 的
@anthropic-ai/claude-code
基本用法
Claude Code 的主要命令列介面是 claude
命令。使用 --print
(或 -p
)標誌以非互動模式執行並列印最終結果:
配置
SDK 利用 Claude Code 中可用的所有 CLI 選項。以下是 SDK 用法的關鍵選項:
標誌 | 描述 | 範例 |
---|---|---|
--print , -p | 以非互動模式執行 | claude -p "query" |
--output-format | 指定輸出格式(text 、json 、stream-json ) | claude -p --output-format json |
--resume , -r | 透過會話 ID 恢復對話 | claude --resume abc123 |
--continue , -c | 繼續最近的對話 | claude --continue |
--verbose | 啟用詳細記錄 | claude --verbose |
--append-system-prompt | 附加到系統提示(僅與 --print 一起使用) | claude --append-system-prompt "自訂指令" |
--allowedTools | 允許工具的空格分隔清單,或 允許工具的逗號分隔清單字串 | claude --allowedTools mcp__slack mcp__filesystem claude --allowedTools "Bash(npm install),mcp__filesystem" |
--disallowedTools | 拒絕工具的空格分隔清單,或 拒絕工具的逗號分隔清單字串 | claude --disallowedTools mcp__splunk mcp__github claude --disallowedTools "Bash(git commit),mcp__github" |
--mcp-config | 從 JSON 檔案載入 MCP 伺服器 | claude --mcp-config servers.json |
--permission-prompt-tool | 用於處理權限提示的 MCP 工具(僅與 --print 一起使用) | claude --permission-prompt-tool mcp__auth__prompt |
有關 CLI 選項和功能的完整清單,請參閱 CLI 參考 文件。
先決條件
- Node.js 18+
- 來自 NPM 的
@anthropic-ai/claude-code
基本用法
Claude Code 的主要命令列介面是 claude
命令。使用 --print
(或 -p
)標誌以非互動模式執行並列印最終結果:
配置
SDK 利用 Claude Code 中可用的所有 CLI 選項。以下是 SDK 用法的關鍵選項:
標誌 | 描述 | 範例 |
---|---|---|
--print , -p | 以非互動模式執行 | claude -p "query" |
--output-format | 指定輸出格式(text 、json 、stream-json ) | claude -p --output-format json |
--resume , -r | 透過會話 ID 恢復對話 | claude --resume abc123 |
--continue , -c | 繼續最近的對話 | claude --continue |
--verbose | 啟用詳細記錄 | claude --verbose |
--append-system-prompt | 附加到系統提示(僅與 --print 一起使用) | claude --append-system-prompt "自訂指令" |
--allowedTools | 允許工具的空格分隔清單,或 允許工具的逗號分隔清單字串 | claude --allowedTools mcp__slack mcp__filesystem claude --allowedTools "Bash(npm install),mcp__filesystem" |
--disallowedTools | 拒絕工具的空格分隔清單,或 拒絕工具的逗號分隔清單字串 | claude --disallowedTools mcp__splunk mcp__github claude --disallowedTools "Bash(git commit),mcp__github" |
--mcp-config | 從 JSON 檔案載入 MCP 伺服器 | claude --mcp-config servers.json |
--permission-prompt-tool | 用於處理權限提示的 MCP 工具(僅與 --print 一起使用) | claude --permission-prompt-tool mcp__auth__prompt |
有關 CLI 選項和功能的完整清單,請參閱 CLI 參考 文件。
先決條件
- Node.js 18+
- 來自 NPM 的
@anthropic-ai/claude-code
要檢視 TypeScript SDK 原始碼,請造訪 NPM 上的 @anthropic-ai/claude-code
頁面。
基本用法
透過 TypeScript SDK 的主要介面是 query
函數,它返回一個非同步迭代器,在訊息到達時串流訊息:
配置
TypeScript SDK 接受 命令列 支援的所有參數,以及以下額外選項:
參數 | 描述 | 預設值 |
---|---|---|
abortController | 中止控制器 | new AbortController() |
cwd | 目前工作目錄 | process.cwd() |
executable | 要使用的 JavaScript 執行時間 | 使用 Node.js 執行時為 node ,使用 Bun 執行時為 bun |
executableArgs | 傳遞給可執行檔的參數 | [] |
pathToClaudeCodeExecutable | Claude Code 可執行檔的路徑 | 與 @anthropic-ai/claude-code 一起提供的可執行檔 |
permissionMode | 會話的權限模式 | "default" (選項:"default" 、"acceptEdits" 、"plan" 、"bypassPermissions" ) |
先決條件
- Python 3.10+
- 來自 PyPI 的
claude-code-sdk
- Node.js 18+
- 來自 NPM 的
@anthropic-ai/claude-code
要檢視 Python SDK 原始碼,請參閱 claude-code-sdk
儲存庫。
對於互動式開發,請使用 IPython:pip install ipython
基本用法
Python SDK 提供兩個主要介面:
ClaudeSDKClient
類別(推薦)
最適合串流回應、多輪對話和互動式應用程式:
SDK 也支援傳遞結構化訊息和圖像輸入:
此頁面上的 Python 範例使用 asyncio
,但您也可以使用 anyio
。
query
函數
用於簡單的一次性查詢:
配置
由於 Python SDK 透過 ClaudeCodeOptions
類別接受 命令列 支援的所有參數。
身份驗證
Anthropic API 金鑰
對於基本身份驗證,從 Anthropic Console 取得 Anthropic API 金鑰並設定 ANTHROPIC_API_KEY
環境變數,如 快速開始 中所示。
第三方 API 憑證
SDK 也支援透過第三方 API 提供者進行身份驗證:
- Amazon Bedrock:設定
CLAUDE_CODE_USE_BEDROCK=1
環境變數並配置 AWS 憑證 - Google Vertex AI:設定
CLAUDE_CODE_USE_VERTEX=1
環境變數並配置 Google Cloud 憑證
有關第三方提供者的詳細配置說明,請參閱 Amazon Bedrock 和 Google Vertex AI 文件。
多輪對話
對於多輪對話,您可以恢復對話或從最近的會話繼續:
使用計劃模式
計劃模式允許 Claude 在不進行修改的情況下分析程式碼,對程式碼審查和規劃變更很有用。
計劃模式限制編輯、檔案建立和命令執行。詳情請參閱 權限模式。
自訂系統提示
系統提示定義您的代理的角色、專業知識和行為。這是您指定要建構什麼類型代理的地方:
進階用法
透過 MCP 的自訂工具
模型上下文協定 (MCP) 讓您為代理提供自訂工具和能力。這對於建構需要特定領域整合的專業代理至關重要。
範例代理工具配置:
用法範例:
使用 MCP 工具時,您必須使用 --allowedTools
標誌明確允許它們。MCP 工具名稱遵循 mcp__<serverName>__<toolName>
模式,其中:
serverName
是來自您的 MCP 配置檔案的金鑰toolName
是該伺服器提供的特定工具
這種安全措施確保 MCP 工具只有在明確允許時才會被使用。
如果您只指定伺服器名稱(即 mcp__<serverName>
),該伺服器的所有工具都將被允許。
不支援萬用字元模式(例如 mcp__go*
)。
自訂權限提示工具
可選地,使用 --permission-prompt-tool
傳入一個 MCP 工具,我們將使用它來檢查使用者是否授予模型調用給定工具的權限。當模型調用工具時,會發生以下情況:
- 我們首先檢查權限設定:所有 settings.json 檔案,以及傳入 SDK 的
--allowedTools
和--disallowedTools
;如果其中一個允許或拒絕工具調用,我們就繼續進行工具調用 - 否則,我們調用您在
--permission-prompt-tool
中提供的 MCP 工具
--permission-prompt-tool
MCP 工具會傳遞工具名稱和輸入,並且必須返回帶有結果的 JSON 字串化有效負載。有效負載必須是以下之一:
實作範例:
使用注意事項:
- 使用
updatedInput
告訴模型權限提示改變了其輸入;否則,將updatedInput
設定為原始輸入,如上例所示。例如,如果工具向使用者顯示檔案編輯差異並讓他們手動編輯差異,權限提示工具應該返回該更新的編輯。 - 有效負載必須是 JSON 字串化的
輸出格式
SDK 支援多種輸出格式:
文字輸出(預設)
JSON 輸出
返回包含元資料的結構化資料:
回應格式:
串流 JSON 輸出
在收到每個訊息時串流:
每個對話都以初始 init
系統訊息開始,接著是使用者和助理訊息清單,最後是帶有統計資料的最終 result
系統訊息。每個訊息都作為單獨的 JSON 物件發出。
訊息架構
從 JSON API 返回的訊息根據以下架構嚴格類型化:
我們很快將以 JSONSchema 相容格式發布這些類型。我們對主要 Claude Code 套件使用語義版本控制來傳達此格式的重大變更。
Message
和 MessageParam
類型在 Anthropic SDK 中可用。例如,請參閱 Anthropic TypeScript 和 Python SDK。
輸入格式
SDK 支援多種輸入格式:
文字輸入(預設)
串流 JSON 輸入
透過 stdin
提供的訊息串流,其中每個訊息代表一個使用者輪次。這允許多輪對話而無需重新啟動 claude
二進位檔案,並允許在模型處理請求時向模型提供指導。
每個訊息都是一個 JSON ‘使用者訊息’ 物件,遵循與輸出訊息架構相同的格式。訊息使用 jsonl 格式格式化,其中每行輸入都是一個完整的 JSON 物件。串流 JSON 輸入需要 -p
和 --output-format stream-json
。
目前這僅限於純文字使用者訊息。
代理整合範例
SRE 事件回應機器人
自動化安全審查
多輪法律助理
Python 特定最佳實踐
關鍵模式
IPython/Jupyter 提示
最佳實踐
-
使用 JSON 輸出格式 進行程式化回應解析:
-
優雅地處理錯誤 - 檢查退出碼和 stderr:
-
使用會話管理 在多輪對話中維護上下文
-
考慮超時 對於長時間執行的操作:
-
尊重速率限制 在進行多個請求時,在調用之間新增延遲
相關資源
- CLI 用法和控制 - 完整的 CLI 文件
- GitHub Actions 整合 - 使用 Claude 自動化您的 GitHub 工作流程
- 常見工作流程 - 常見用例的逐步指南