首页
学习
活动
专区
圈层
工具
发布

Claude Code SDK 完整指南

嗨,朋友你好,我是是诗康妈咪。致力于探索如何把AI应用于普通人生活的方方面面。

今天给大家继续分享claude code使用的方法——Claude Code SDK 完整指南。

1. 概述

Claude Code SDK 支持将 Claude Code 作为子进程运行,提供了一种构建 AI 驱动的编码助手和工具的方法,利用 Claude 的能力。

SDK 可用于命令行、TypeScript 和 Python 使用。

2. 身份验证

要使用 Claude Code SDK,我们建议创建一个专用的 API 密钥:

Anthropic Console 中创建一个 Anthropic API 密钥

然后,设置ANTHROPIC_API_KEY环境变量。我们建议安全地存储此密钥(例如,使用 Github

secret)

3. 基本 SDK 使用

Claude Code SDK 允许您在应用程序中以非交互模式使用 Claude Code。

3.1 命令行

以下是命令行 SDK 的一些基本示例:

# 运行单个提示并退出(打印模式)

$ claude -p "编写一个计算斐波那契数的函数"

# 使用管道提供标准输入

$ echo"解释这段代码"| claude -p

# 以 JSON 格式输出并包含元数据

$ claude -p "生成一个 hello world 函数" --output-format json

# 在到达时流式传输 JSON 输出

$ claude -p "构建一个 React 组件" --output-format stream-json

3.2 TypeScript

TypeScript SDK 包含在 NPM 上的主要@anthropic-ai/claude-code包中:

import{ query,typeSDKMessage}from"@anthropic-ai/claude-code";

const messages:SDKMessage[]=[];

forawait(const message ofquery({

prompt:"为 foo.py 写一首俳句",

abortController:newAbortController(),

options:{

  maxTurns:3,

},

})){

messages.push(message);

}

console.log(messages);

TypeScript SDK 接受命令行 SDK 支持的所有参数,以及:

3.3 Python

Python SDK 在 PyPI 上作为claude-code-sdk提供:

pip install claude-code-sdk

先决条件:

Python 3.10+

Node.js

Claude Code CLI:npm install -g @anthropic-ai/claude-code

基本使用:

import anyio

from claude_code_sdk import query, ClaudeCodeOptions, Message

asyncdefmain():

  messages:list[Message]=[]

asyncfor message in query(

      prompt="为 foo.py 写一首俳句",

      options=ClaudeCodeOptions(max_turns=3)

):

      messages.append(message)

print(messages)

anyio.run(main)

Python SDK 通过ClaudeCodeOptions类接受命令行 SDK 支持的所有参数:

from claude_code_sdk import query, ClaudeCodeOptions

from pathlib import Path

options = ClaudeCodeOptions(

  max_turns=3,

  system_prompt="你是一个有用的助手",

  cwd=Path("/path/to/project"),# 可以是字符串或 Path

  allowed_tools=["Read","Write","Bash"],

  permission_mode="acceptEdits"

)

asyncfor message in query(prompt="你好", options=options):

print(message)

4. 高级使用

下面的文档使用命令行 SDK 作为示例,但也可以与 TypeScript 和 Python SDK 一起使用。

4.1 多轮对话

对于多轮对话,您可以恢复对话或从最近的会话继续:

# 继续最近的对话

$ claude --continue

# 继续并提供新的提示

$ claude --continue "现在重构这个以获得更好的性能"

# 通过会话 ID 恢复特定对话

$ claude --resume 550e8400-e29b-41d4-a716-446655440000

# 在打印模式下恢复(非交互式)

$ claude -p --resume 550e8400-e29b-41d4-a716-446655440000 "更新测试"

# 在打印模式下继续(非交互式)

$ claude -p --continue "添加错误处理"

4.2 自定义系统提示

您可以提供自定义系统提示来指导 Claude 的行为:

# 覆盖系统提示(仅适用于 --print)

$ claude -p "构建一个 REST API" --system-prompt "你是一个高级后端工程师。专注于安全性、性能和可维护性。"

# 具有特定要求的系统提示

$ claude -p "创建一个数据库架构" --system-prompt "你是一个数据库架构师。使用 PostgreSQL 最佳实践并包含适当的索引。"

您还可以将指令附加到默认系统提示:

# 附加系统提示(仅适用于 --print)

$ claude -p "构建一个 REST API" --append-system-prompt "编写代码后,请务必进行代码审查。"

4.3 MCP 配置

模型上下文协议(MCP)允许您使用来自外部服务器的附加工具和资源扩展 Claude Code。使用--mcp-config标志,您可以加载提供专门功能的 MCP 服务器,如数据库访问、API 集成或自定义工具。

创建一个包含您的 MCP 服务器的 JSON 配置文件:

{

"mcpServers":{

"filesystem":{

"command":"npx",

"args":[

"-y",

"@modelcontextprotocol/server-filesystem",

"/path/to/allowed/files"

]

},

"github":{

"command":"npx",

"args":["-y","@modelcontextprotocol/server-github"],

"env":{

"GITHUB_TOKEN":"your-github-token"

}

}

}

}

然后与 Claude Code 一起使用:

# 从配置加载 MCP 服务器

$ claude -p "列出项目中的所有文件" --mcp-config mcp-servers.json

# 重要:必须使用 --allowedTools 明确允许 MCP 工具

# MCP 工具遵循格式:mcp__$serverName__$toolName

$ claude -p "搜索 TODO 注释"\

--mcp-config mcp-servers.json \

--allowedTools "mcp__filesystem__read_file,mcp__filesystem__list_directory"

# 使用 MCP 工具在非交互模式下处理权限提示

$ claude -p "部署应用程序"\

--mcp-config mcp-servers.json \

--allowedTools "mcp__permissions__approve"\

--permission-prompt-tool mcp__permissions__approve

**注意:**使用 MCP 工具时,您必须使用--allowedTools标志明确允许它们。MCP 工具名称遵循模式mcp__<serverName>__<toolName>,其中:

serverName是您的 MCP 配置文件中的键

toolName是该服务器提供的特定工具

这种安全措施确保 MCP 工具仅在明确允许时使用。

如果您只指定服务器名称(即mcp__<serverName>),则该服务器的所有工具都将被允许。

不支持通配符模式(例如mcp__go*)。

4.4 自定义权限提示工具

可选地,使用--permission-prompt-tool传入一个 MCP 工具,我们将使用它来检查用户是否授予模型调用给定工具的权限。当模型调用工具时,会发生以下情况:

我们首先检查权限设置:所有 settings.json 文件,以及传递给 SDK 的--allowedTools和--disallowedTools;如果其中之一允许或拒绝工具调用,我们继续进行工具调用

否则,我们调用您在--permission-prompt-tool中提供的 MCP 工具

--permission-prompt-toolMCP 工具会传递工具名称和输入,并且必须返回一个带有结果的 JSON 字符串化载荷。载荷必须是以下之一:

// 工具调用被允许

{

"behavior":"allow",

"updatedInput":{...},// 更新的输入,或者只是返回原始输入

}

// 工具调用被拒绝

{

"behavior":"deny",

"message":"..."// 解释为什么权限被拒绝的人类可读字符串

}

例如,TypeScript MCP 权限提示工具实现可能如下所示:

const server =newMcpServer({

name:"测试权限提示 MCP 服务器",

version:"0.0.1",

});

server.tool(

"approval_prompt",

'模拟权限检查 - 如果输入包含 "allow",则批准,否则拒绝',

{

  tool_name: z.string().describe("请求权限的工具"),

  input: z.object({}).passthrough().describe("工具的输入"),

},

async({ tool_name, input })=>{

return{

    content:[

{

        type:"text",

        text:JSON.stringify(

JSON.stringify(input).includes("allow")

?{

                behavior:"allow",

                updatedInput: input,

}

:{

                behavior:"deny",

                message:"被测试 approval_prompt 工具拒绝权限",

}

),

},

],

};

}

);

要使用此工具,添加您的 MCP 服务器(例如使用--mcp-config),然后像这样调用 SDK:

claude -p "..." \

--permission-prompt-tool mcp__test-server__approval_prompt \

--mcp-config my-config.json

使用说明:

使用updatedInput告诉模型权限提示改变了其输入;否则,将updatedInput设置为原始输入,如上面的示例所示。例如,如果工具向用户显示文件编辑差异并让他们手动编辑差异,权限提示工具应该返回该更新的编辑。

载荷必须是 JSON 字符串化的

5. 可用的 CLI 选项

SDK 利用 Claude Code 中可用的所有 CLI 选项。以下是 SDK 使用的关键选项:

6. 输出格式

SDK 支持多种输出格式:

6.1 文本输出(默认)

仅返回响应文本:

$ claude -p "解释文件 src/components/Header.tsx"

# 输出:这是一个 React 组件,显示...

6.2 JSON 输出

返回包括元数据的结构化数据:

$ claude -p "数据层是如何工作的?" --output-format json

响应格式:

{

"type":"result",

"subtype":"success",

"total_cost_usd":0.003,

"is_error":false,

"duration_ms":1234,

"duration_api_ms":800,

"num_turns":6,

"result":"响应文本在这里...",

"session_id":"abc123"

}

6.3 流式 JSON 输出

在接收到每条消息时流式传输:

$ claude -p "构建一个应用程序" --output-format stream-json

每个对话都以初始的init系统消息开始,然后是用户和助手消息列表,最后是带有统计信息的最终result系统消息。每条消息都作为单独的 JSON 对象发出。

7. 消息模式

从 JSON API 返回的消息根据严格的类型模式:

typeSDKMessage=

// 助手消息

|{

    type:"assistant";

    message:Message;// 来自 Anthropic SDK

    session_id:string;

}

// 用户消息

|{

    type:"user";

    message:MessageParam;// 来自 Anthropic SDK

    session_id:string;

}

// 作为最后一条消息发出

|{

    type:"result";

    subtype:"success";

    duration_ms: float;

    duration_api_ms: float;

    is_error:boolean;

    num_turns: int;

    result:string;

    session_id:string;

    total_cost_usd: float;

}

// 作为最后一条消息发出,当我们达到最大轮次时

|{

    type:"result";

    subtype:"error_max_turns"|"error_during_execution";

    duration_ms: float;

    duration_api_ms: float;

    is_error:boolean;

    num_turns: int;

    session_id:string;

    total_cost_usd: float;

}

// 在对话开始时作为第一条消息发出

|{

    type:"system";

    subtype:"init";

    apiKeySource:string;

    cwd:string;

    session_id:string;

    tools:string[];

    mcp_servers:{

      name:string;

      status:string;

}[];

    model:string;

    permissionMode:"default"|"acceptEdits"|"bypassPermissions"|"plan";

};

我们将很快以 JSONSchema 兼容格式发布这些类型。我们对主要的 Claude Code 包使用语义版本控制来传达此格式的重大更改。

8. 输入格式

SDK 支持多种输入格式:

8.1 文本输入(默认)

输入文本可以作为参数提供:

$ claude -p "解释这段代码"

或者输入文本可以通过 stdin 管道传输:

$ echo"解释这段代码"| claude -p

8.2 流式 JSON 输入

通过stdin提供的消息流,其中每条消息代表一个用户轮次。这允许对话的多个轮次而无需重新启动claude二进制文件,并允许在模型处理请求时向模型提供指导。

每条消息都是一个 JSON '用户消息' 对象,遵循与输出消息模式相同的格式。消息使用 jsonl 格式格式化,其中输入的每一行都是一个完整的 JSON 对象。流式 JSON 输入需要-p和--output-format stream-json。

目前这仅限于纯文本用户消息。

$ echo'{"type":"user","message":{"role":"user","content":[{"type":"text","text":"解释这段代码"}]}}'| claude -p --output-format=stream-json --input-format=stream-json --verbose

9. 示例

9.1 简单脚本集成

#!/bin/bash

# 运行 Claude 并检查退出代码的简单函数

run_claude(){

localprompt="$1"

localoutput_format="${2:-text}"

if claude -p "$prompt" --output-format "$output_format";then

echo"成功!"

else

echo"错误:Claude 失败,退出代码 $?">&2

return1

fi

}

# 使用示例

run_claude "编写一个读取 CSV 文件的 Python 函数"

run_claude "优化这个数据库查询""json"

9.2 使用 Claude 处理文件

# 通过 Claude 处理文件

$ cat mycode.py | claude -p "检查这段代码中的错误"

# 处理多个文件

$ forfilein *.js;do

echo"处理 $file..."

  claude -p "为这个文件添加 JSDoc 注释:"<"$file">"${file}.documented"

done

# 在管道中使用 Claude

$ grep -l "TODO" *.py |whilereadfile;do

  claude -p "修复这个文件中的所有 TODO 项"<"$file"

done

9.3 会话管理

# 启动会话并捕获会话 ID

$ claude -p "初始化一个新项目" --output-format json | jq -r '.session_id'> session.txt

# 使用相同会话继续

$ claude -p --resume "$(cat session.txt)""添加单元测试"

10. 最佳实践

使用 JSON 输出格式进行响应的程序化解析:

# 使用 jq 解析 JSON 响应

result=$(claude -p "生成代码" --output-format json)

code=$(echo"$result"| jq -r '.result')

cost=$(echo"$result"| jq -r '.cost_usd')

优雅地处理错误- 检查退出代码和 stderr:

if! claude -p "$prompt"2>error.log;then

echo"发生错误:">&2

cat error.log >&2

exit1

fi

使用会话管理在多轮对话中维护上下文

考虑超时对于长时间运行的操作:

timeout300 claude -p "$complex_prompt"||echo"5 分钟后超时"

尊重速率限制在进行多个请求时通过在调用之间添加延迟

11. 实际应用

Claude Code SDK 能够与您的开发工作流程进行强大的集成。一个值得注意的例子是 Claude Code GitHub Actions,它使用 SDK 直接在您的 GitHub 工作流程中提供自动化代码审查、PR 创建和问题分类功能。

通过这些功能,您可以:

自动化代码审查流程

生成和优化代码

处理文档生成

实现智能代码分析

构建定制的 AI 编程助手

Claude Code SDK 为开发者提供了一个强大而灵活的工具,可以将 AI 能力无缝集成到现有的开发工作流程中。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OPhWytn9YfaFbOZUe0bZxBnA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

领券