[ PROMPT_NODE_23824 ]
claude-api
[ SKILL_DOCUMENTATION ]
# Claude API — PHP
> **注意:** PHP SDK 是 Anthropic 官方提供的 PHP SDK。测试版工具运行器可通过 `$client->beta->messages->toolRunner()` 使用。结构化输出助手通过 `StructuredOutputModel` 类提供支持。暂不支持智能体 SDK。支持 Bedrock、Vertex AI 和 Foundry 客户端。
## 安装
bash
composer require "anthropic-ai/sdk"
## 客户端初始化
php
use AnthropicClient;
// 使用环境变量中的 API 密钥
$client = new Client(apiKey: getenv("ANTHROPIC_API_KEY"));
### Amazon Bedrock
php
use AnthropicBedrock;
// 构造函数为私有 — 请使用静态工厂方法。从环境变量读取 AWS 凭证。
$client = BedrockClient::fromEnvironment(region: 'us-east-1');
### Google Vertex AI
php
use AnthropicVertex;
// 构造函数为私有。参数为 `location` 而非 `region`。
$client = VertexClient::fromEnvironment(
location: 'us-east5',
projectId: 'my-project-id',
);
### Anthropic Foundry
php
use AnthropicFoundry;
// 构造函数为私有。需要 baseUrl 或 resource。
$client = FoundryClient::withCredentials(
authToken: getenv('ANTHROPIC_FOUNDRY_AUTH_TOKEN'),
baseUrl: 'https://.services.ai.azure.com/anthropic',
);
---
## 基础消息请求
php
$message = $client->messages->create(
model: 'claude-opus-4-7',
maxTokens: 16000,
messages: [
['role' => 'user', 'content' => 'What is the capital of France?'],
],
);
// content 是多态块(TextBlock, ToolUseBlock, ThinkingBlock)的数组。
// 如果第一个块不是 TextBlock(例如启用了扩展思考且首先出现 ThinkingBlock),
// 不经检查直接访问 content[0]->text 会抛出异常。请务必进行保护:
foreach ($message->content as $block) {
if ($block->type === 'text') {
echo $block->text;
}
}
如果您只需要第一个文本块:
php
foreach ($message->content as $block) {
if ($block->type === 'text') {
echo $block->text;
break;
}
}
---
## 流式传输
> **需要 SDK v0.5.0+。** v0.4.0 及更早版本使用单个 `$params` 数组;使用命名参数调用会抛出 `Unknown named parameter $model`。升级方式:`composer require "anthropic-ai/sdk:^0.7"`
php
use AnthropicMessagesRawContentBlockDeltaEvent;
use AnthropicMessagesTextDelta;
$stream = $client->messages->createStream(
model: 'claude-opus-4-7',
maxTokens: 64000,
me