本节摘要:除 Python 与 TypeScript 两大主力,官方还提供 Go、Java、PHP、Ruby、C# 五种语言 SDK,以及原始 HTTP(curl)形态。它们在概念上与 Python/TS 完全一致——同样的
messages.create、同样的 system/tools/messages、同样的缓存与思考参数——差异只在语言层面:包名、客户端构造方式、异常类命名、异步模型、是否提供 Tool Runner 与托管代理 SDK。本节合并对照这六种形态的配置差异,不逐篇重复翻译,只讲「与 Python/TS 不同的地方」。读完本节,你能用任一语言接入 Claude API,并知道各 SDK 的能力覆盖边界。
内容来源:Anthropic 官方 Claude API 文档各语言 README(Go/Java/PHP/Ruby/C#/curl,随 Claude Code 分发,从泄露素材库提取),汉化并合并对照。
阅读完本节,你应当能够:
messages 请求。BadRequestError vs Ruby Anthropic::Errors::BadRequestError vs Java BadRequestException 等)。先看一张总表,各 SDK 的能力覆盖一目了然。概念层全一致,差异在生态成熟度:
| 语言 | 包/标识 | 客户端构造 | Tool Runner | 托管代理 | 批处理 | 文件 API |
|---|---|---|---|---|---|---|
| Python | anthropic(pip) |
anthropic.Anthropic() |
有 | 有 | 有 | 有 |
| TypeScript | @anthropic-ai/sdk(npm) |
new Anthropic() |
有 | 有 | 有 | 有 |
| Java | com.anthropic.*(Maven) |
AnthropicClient.create() |
有 | 有 | 有 | 有 |
| Go | github.com/anthropics/anthropic-sdk-go |
anthropic.NewClient() |
beta(BetaToolRunner) |
有 | 无 | 有 |
| Ruby | anthropic(gem) |
Anthropic::Client.new |
有 | 有 | 无 | 无 |
| PHP | anthropic-internal/anthropic-sdk(composer) |
Client::create() |
有 | 无 | 有 | 有 |
| C# | Anthropic.SDK(nuget) |
new AnthropicClient() |
beta | 无 | 有 | 有 |
| curl | 原始 HTTP | 无 | 无(手写循环) | 手写 | 手写 | 手写 |
💡 读表提示:Python/TS 是全能力主力 SDK;Java 紧随其后;Go 的 Tool Runner 与托管代理都是较新加入;Ruby/PHP/C# 各有侧重缺口(如 PHP/C# 无托管代理,Go/Ruby 无批处理)。选型时先确认你要用的特性在该语言是否支持,不支持就考虑 Python/TS 或原始 HTTP。
import ( "github.com/anthropics/anthropic-sdk-go" "github.com/anthropics/anthropic-sdk-go/option" ) client := anthropic.NewClient() // 默认读 ANTHROPIC_API_KEY client := anthropic.NewClient(option.WithAPIKey("...")) // 显式 key response, err := client.Messages.New(ctx, anthropic.MessageNewParams{ Model: anthropic.ModelClaudeOpus4_8, // 类型常量,非字符串 MaxTokens: 16000, Messages: []anthropic.MessageParam{ anthropic.NewUserMessage(anthropic.NewTextBlock("Hello")), }, })
Go 的特色:
anthropic.ModelClaudeOpus4_8 这类常量,而非字符串字面量——编译期防拼错。block.AsAny().(type) 分支处理 TextBlock 等,与 TS 的判别联合思路一致。*anthropic.Error,用 errors.As 解包后按 StatusCode 分支(详见第 2 章 06 节),不像其它语言每个状态码一个异常类。⚠️ Go 的限制:Tool Runner 是 beta(
BetaToolRunner);托管代理已支持;批处理暂不支持——需要批处理就用 Python/TS 或 curl。Agent SDK(Go)尚未提供。
import com.anthropic.client.AnthropicClient; import com.anthropic.models.*; AnthropicClient client = AnthropicClient.create(); // 默认读环境变量 MessageCreateParams params = MessageCreateParams.builder() .model(Model.CLAUDE_OPUS_4_8) .maxTokens(16000) .messages(MessageParam.builder() .role("user").content("Hello").build()) .build(); Message response = client.messages().create(params);
Java 的特色:异常类名以 Exception 结尾(BadRequestException、RateLimitException、UnauthorizedException、NotFoundException、AnthropicServiceException 基类),符合 Java 命名惯例。错误类型查询用 .errorType() 方法。Tool Runner、托管代理、批处理、文件 API 均支持。Kotlin 与 Scala 共用 Java SDK。
$client = \Anthropic\Client::create(); // 默认读环境变量 $response = $client->messages()->create([ 'model' => 'claude-opus-4-8', 'max_tokens' => 16000, 'messages' => [['role' => 'user', 'content' => 'Hello']], ]); echo $response->content[0]->text;
PHP 的特色与坑:
maxTokens),不是 snake_case wire 名。但嵌套数组键随特性变化(如 'taskBudget'、'skillID')——要从文档示例里复制确切键名,别批量转换。这是 PHP SDK 最易踩的 API 漂移点。Anthropic\Core\Exceptions\RateLimitException 等,要写全命名空间,不是裸 Anthropic\RateLimitException。$message->usage->cacheReadInputTokens(camelCase 方法)。⚠️ 支持范围:PHP 有 Tool Runner、批处理、文件 API,但无托管代理 SDK。需要托管代理就用 Python/TS/Java/Go/Ruby。
require "anthropic" client = Anthropic::Client.new # 默认读环境变量 response = client.messages.create( model: "claude-opus-4-8", max_tokens: 16000, messages: [{ role: "user", content: "Hello" }], ) puts response.content.first.text
Ruby 的特色:
Anthropic::Errors::RateLimitError、Anthropic::Errors::BadRequestError 等,要写全 Anthropic::Errors:: 前缀。using Anthropic.SDK; var client = new AnthropicClient(); // 默认读环境变量 var response = await client.Messages.CreateAsync(new MessageParameters { Model = "claude-opus-4-8", MaxTokens = 16000, Messages = new List<Message> { new() { Role = "user", Content = "Hello" } }, });
C# 的特色:
Anthropic 前缀(AnthropicBadRequestException、AnthropicRateLimitException、AnthropicNotFoundException),所有 4xx 异常还共继承自 Anthropic4xxException,5xx 用 Anthropic5xxException。curl(或任何语言的 requests/fetch/httpx)是原始 HTTP 形态,只在项目是 shell/cURL 工程、或语言无官方 SDK 时才用。其余情况优先用 SDK——SDK 替你处理认证、重试、超时、分页、错误类型化、beta 头注入。
curl https://api.anthropic.com/v1/messages \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-opus-4-8", "max_tokens": 16000, "messages": [{"role": "user", "content": "Hello"}] }'
⚠️ curl 要手处理的细节:(1)认证头用
x-api-key(或 OAuth 的Authorization: Bearer),别用错;(2)anthropic-version 头必填;(3)beta 特性(托管代理、文件 API、缓存)要手动加对应 beta 头(SDK 会自动加);(4)流式要自己解析 SSE(event:/data:行);(5)错误是 JSON 体,要自己解析error.type字段;(6)重试要自己写指数退避。
ModelClaudeOpus4_8)防拼错;单一 *anthropic.Error + errors.As + StatusCode 分支。Exception 结尾,错误类型用 .errorType();Kotlin/Scala 共用。maxTokens),嵌套键随特性变化要照抄文档;异常在 Anthropic\Core\Exceptions\ 命名空间。Anthropic::Errors::;C# 异常带 Anthropic 前缀,4xx 共基类 Anthropic4xxException。第 3 章到此结束——你已能任选语言接入 Claude API。第 4 章进入 Agent 设计与托管代理:如何设计工具表面、管理长程上下文,以及如何用 managed agents 让平台替你跑有状态的 agent 循环。