TypeScript
使用 Claude Code TypeScript SDK 建構自訂 AI 代理
先決條件
- Node.js 18+
安裝
從 NPM 安裝 @anthropic-ai/claude-code
:
要查看 TypeScript SDK 原始碼,請造訪 NPM 上的 @anthropic-ai/claude-code
頁面。
基本用法
透過 TypeScript SDK 的主要介面是 query
函數,它回傳一個非同步迭代器,在訊息到達時串流傳輸:
設定選項
參數 | 類型 | 描述 | 預設值 |
---|---|---|---|
abortController | AbortController | 用於取消操作的中止控制器 | new AbortController() |
additionalDirectories | string[] | 要包含在會話中的額外目錄 | undefined |
allowedTools | string[] | Claude 被允許使用的工具清單 | 預設啟用所有工具 |
appendSystemPrompt | string | 要附加到預設系統提示的文字 | undefined |
canUseTool | (toolName: string, input: any) => Promise<ToolPermissionResult> | 工具使用的自訂權限函數 | undefined |
continue | boolean | 繼續最近的會話 | false |
customSystemPrompt | string | 完全替換預設系統提示 | undefined |
cwd | string | 目前工作目錄 | process.cwd() |
disallowedTools | string[] | Claude 不被允許使用的工具清單 | undefined |
env | Dict<string> | 要設定的環境變數 | undefined |
executable | 'bun' | 'deno' | 'node' | 要使用的 JavaScript 執行時間 | 使用 Node.js 執行時為 node ,使用 Bun 執行時為 bun |
executableArgs | string[] | 要傳遞給可執行檔的參數 | [] |
fallbackModel | string | 主要模型失敗時使用的模型 | undefined |
hooks | Partial<Record<HookEvent, HookCallbackMatcher[]>> | 用於自訂的生命週期鉤子 | undefined |
includePartialMessages | boolean | 在訊息串流中包含部分串流事件 | false |
maxThinkingTokens | number | Claude 思考過程的最大代幣數 | undefined |
maxTurns | number | 對話輪次的最大數量 | undefined |
mcpServers | Record<string, McpServerConfig> | MCP 伺服器設定 | undefined |
model | string | 要使用的 Claude 模型 | 使用 CLI 設定的預設值 |
pathToClaudeCodeExecutable | string | Claude Code 可執行檔的路徑 | 與 @anthropic-ai/claude-code 一起提供的可執行檔 |
permissionMode | PermissionMode | 會話的權限模式 | "default" (選項:"default" 、"acceptEdits" 、"bypassPermissions" 、"plan" ) |
resume | string | 要恢復的會話 ID | undefined |
stderr | (data: string) => void | stderr 輸出的回調 | undefined |
strictMcpConfig | boolean | 強制執行嚴格的 MCP 設定驗證 | undefined |
部分訊息串流
當啟用 includePartialMessages
時,SDK 將發出包含來自 Claude API 的原始串流事件的 stream_event
訊息。這讓您可以在內容生成時存取部分內容,對於實現即時 UI 更新或進度指示器很有用。
每個 stream_event
訊息包含:
event
:來自 API 的原始串流事件session_id
:目前會話識別碼parent_tool_use_id
:正在執行的工具 ID(如果適用)uuid
:此事件的唯一識別碼
部分訊息串流主要對需要對串流回應進行細粒度控制的進階用例有用。對於大多數應用程式,預設行為(等待完整訊息)就足夠了。
多輪對話
對於多輪對話,您有兩個選項。
您可以生成回應並恢復它們,或者您可以使用串流輸入模式,它接受訊息陣列的非同步/生成器。目前,串流輸入模式是透過訊息附加圖片的唯一方式。
使用會話管理恢復
串流輸入模式
串流輸入模式允許您將訊息作為非同步可迭代物件提供,而不是單一字串。這啟用了多輪對話、圖片附件和動態訊息生成:
帶圖片的串流輸入
串流輸入模式是透過訊息附加圖片的唯一方式:
自訂系統提示
系統提示定義您的代理的角色、專業知識和行為:
MCP 伺服器整合
模型上下文協定(MCP)讓您為代理提供自訂工具和功能:
使用程序內 MCP 伺服器的自訂工具
SDK MCP 伺服器允許您建立直接在應用程式程序中執行的自訂工具,提供類型安全的工具執行,而無需單獨程序或網路通訊的開銷。
建立自訂工具
使用 createSdkMcpServer
和 tool
輔助函數來定義類型安全的自訂工具:
使用 Zod 的類型安全
tool
輔助函數從您的 Zod 模式提供完整的 TypeScript 類型推斷:
鉤子
鉤子允許您透過在代理生命週期的各個點執行自訂回調來自訂和擴展 Claude Code 的行為。與執行 bash 命令的 CLI 鉤子不同,SDK 鉤子是在程序內執行的 JavaScript/TypeScript 函數。
定義鉤子
鉤子按事件類型組織,具有可選的匹配器來篩選何時執行:
可用的鉤子事件
- PreToolUse:在工具執行前執行。可以阻止工具或提供回饋。
- PostToolUse:在成功工具執行後執行。
- UserPromptSubmit:當使用者提交提示時執行。
- SessionStart:當會話開始時執行。
- SessionEnd:當會話結束時執行。
- Stop:當 Claude 即將停止回應時執行。
- SubagentStop:當子代理即將停止時執行。
- PreCompact:在對話壓縮前執行。
- Notification:當發送通知時執行。
鉤子輸入類型
每個鉤子根據事件接收類型化輸入:
鉤子輸出
鉤子回傳控制執行流程的輸出:
實際範例
記錄和監控
檔案操作驗證
自動格式化程式碼
提示增強
自訂壓縮指令
鉤子執行行為
- 並行化:所有匹配的鉤子並行執行
- 超時:鉤子遵守選項中的中止信號
- 錯誤處理:鉤子錯誤會被記錄但不會停止執行
- 匹配器:支援正規表達式模式(例如
"Write|Edit"
)
結合鉤子與 canUseTool
雖然 canUseTool
提供權限控制,鉤子提供更廣泛的生命週期整合:
使用 canUseTool 的權限控制
canUseTool
回調提供對工具執行的細粒度控制。它在每次工具使用前被呼叫,可以允許、拒絕或修改工具輸入:
canUseTool 的使用案例
- 權限管理:在允許工具執行前檢查使用者權限
- 輸入驗證:在執行前驗證或清理工具輸入
- 速率限制:對昂貴操作實施速率限制
- 審計記錄:記錄工具使用以符合合規或除錯需求
- 動態權限:根據執行時條件啟用/停用工具
輸出格式
文字輸出(預設)
JSON 輸出
輸入格式
代理整合範例
SRE 事件回應代理
自動化安全審查
多輪法律助理
訊息模式
從 JSON API 回傳的訊息根據以下模式嚴格類型化:
額外的支援類型:
Message
、MessageParam
和 Usage
類型可在 Anthropic TypeScript SDK 中取得。
相關資源
- CLI 使用和控制 - 完整的 CLI 文件
- GitHub Actions 整合 - 使用 Claude 自動化您的 GitHub 工作流程
- 常見工作流程 - 常見用例的逐步指南