Библиотека Anthropic PHP предоставляет удобный доступ к REST API Anthropic из любого приложения на PHP 8.1.0+.
PHP SDK в настоящее время находится в бета-версии. API могут изменяться между версиями.
Документацию по функциям API с примерами кода см. в справочнике API. Эта страница охватывает специфичные для PHP функции SDK и его конфигурацию.
SDK использует PSR-18 для HTTP и автоматически обнаруживает любой установленный клиент PSR-18. Рекомендуется Guzzle, поскольку SDK настраивает его для потоковой передачи (streaming) без дополнительной настройки:
composer require "anthropic-ai/sdk" "guzzlehttp/guzzle:^7"PHP 8.1.0 или выше.
Эта библиотека использует именованные параметры для указания необязательных аргументов. Параметры со значением по умолчанию должны задаваться по имени.
$client = new Client();
$message = $client->messages->create(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5',
);
$textBlock = array_find($message->content, static fn ($block): bool => $block->type === 'text');
echo $textBlock->text;Информацию о вариантах аутентификации, включая Workload Identity Federation, см. в разделе Аутентификация.
Рекомендуется использовать статический конструктор with — Base64ImageSource::with(data: "U3RhaW5sZXNzIHJvY2tz", ...) — и именованные параметры для инициализации объектов-значений.
Однако также предоставляются построители: (new Base64ImageSource)->withData("U3RhaW5sZXNzIHJvY2tz").
SDK предоставляет поддержку потоковой передачи ответов с использованием Server-Sent Events (SSE).
$client = new Client();
$stream = $client->messages->createStream(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5',
);
foreach ($stream as $event) {
echo $event->type . PHP_EOL;
}Потоковая передача требует HTTP-клиента, который возвращает тело ответа инкрементально. Когда обнаруженным клиентом PSR-18 является Guzzle, SDK автоматически настраивает его для потоковой передачи. С буферизующим клиентом цикл foreach выдаёт все события сразу после завершения ответа, а не инкрементально; если вы наблюдаете этот симптом, установите Guzzle или предоставьте клиент PSR-18 с поддержкой потоковой передачи через опцию запроса streamingTransporter:
$client = new Anthropic\Client(
requestOptions: Anthropic\RequestOptions::with(streamingTransporter: $myStreamingClient),
);Когда библиотека не может подключиться к API или если API возвращает код состояния, отличный от успешного (то есть ответ 4xx или 5xx), выбрасывается подкласс Anthropic\Core\Exceptions\APIException:
<?php
use Anthropic\Core\Exceptions\APIConnectionException;
use Anthropic\Core\Exceptions\APIStatusException;
use Anthropic\Core\Exceptions\RateLimitException;
try {
$message = $client->messages->create(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5',
);
} catch (APIConnectionException $e) {
echo "The server could not be reached", PHP_EOL;
echo $e->getPrevious()?->getMessage(), PHP_EOL;
} catch (RateLimitException $_) {
echo "A 429 status code was received; we should back off a bit.", PHP_EOL;
} catch (APIStatusException $e) {
echo "Another non-200-range status code was received", PHP_EOL;
echo $e->getMessage();
}Коды ошибок следующие:
| Причина | Тип ошибки |
|---|---|
| HTTP 400 | BadRequestException |
| HTTP 401 | AuthenticationException |
| HTTP 403 | PermissionDeniedException |
| HTTP 404 | NotFoundException |
| HTTP 409 | ConflictException |
| HTTP 422 | UnprocessableEntityException |
| HTTP 429 | RateLimitException |
| HTTP >= 500 | InternalServerException |
| Другая ошибка HTTP | APIStatusException |
| Тайм-аут | APITimeoutException |
| Сетевая ошибка | APIConnectionException |
Определённые ошибки по умолчанию автоматически повторяются два раза с короткой экспоненциальной задержкой.
Ошибки соединения (например, из-за проблемы с сетевым подключением), 408 Request Timeout, 409 Conflict, 429 Rate Limit, внутренние ошибки >=500 и тайм-ауты по умолчанию повторяются.
Вы можете использовать опцию maxRetries, чтобы настроить или отключить это:
use Anthropic\RequestOptions;
// Настройте значение по умолчанию для всех запросов:
$client = new Client(requestOptions: RequestOptions::with(maxRetries: 0));
// Или настройте для отдельного запроса:
$result = $client->messages->create(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5',
requestOptions: RequestOptions::with(maxRetries: 5),
);Методы списков в Claude API поддерживают пагинацию.
Эта библиотека предоставляет автоматически пагинирующие итераторы с каждым ответом списка, поэтому вам не нужно вручную запрашивать последовательные страницы:
$client = new Client();
$page = $client->beta->messages->batches->list(limit: 20);
// получить элементы с текущей страницы
foreach ($page->getItems() as $item) {
echo $item->id, PHP_EOL;
}
// выполнить дополнительные сетевые запросы, чтобы получить элементы со всех страниц, включая текущую и последующие
foreach ($page->pagingEachItem() as $item) {
echo $item->id, PHP_EOL;
}Вы можете отправлять недокументированные параметры на любую конечную точку и читать недокументированные свойства ответа следующим образом:
Параметры extra* с тем же именем переопределяют документированные параметры.
<?php
use Anthropic\RequestOptions;
$message = $client->messages->create(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5',
requestOptions: RequestOptions::with(
extraQueryParams: ['my_query_parameter' => 'value'],
extraBodyParams: ['my_body_parameter' => 'value'],
extraHeaders: ['my-header' => 'value'],
),
);Если вы хотите явно отправить дополнительный параметр, вы можете сделать это с помощью опций extraQueryParams, extraBodyParams и extraHeaders в RequestOptions::with() при выполнении запроса, как показано в предыдущем примере.
Чтобы выполнять запросы к недокументированным конечным точкам, сохраняя преимущества аутентификации, повторных попыток и других функций клиента, вы можете выполнять запросы с помощью client->request следующим образом:
$client = new Client();
$response = $client->request(
method: "post",
path: '/undocumented/endpoint',
query: ['dog' => 'woof'],
headers: ['useful-header' => 'interesting-value'],
body: ['hello' => 'world']
);Подробные руководства по настройке платформ с примерами кода см. в:
PHP SDK поддерживает следующие платформы:
Anthropic\Vertex\Client. Используйте ::fromEnvironment().Anthropic\Bedrock\MantleClient. Используйте new MantleClient(awsRegion: ...).Anthropic\Bedrock\Client. Используйте ::fromEnvironment() или ::withCredentials().Anthropic\Aws\Client (требует aws/aws-sdk-php в качестве мягкой зависимости). Используйте new Anthropic\Aws\Client(workspaceId: ...) или установите ANTHROPIC_AWS_WORKSPACE_ID. Доступно в бета-версии.Anthropic\Foundry\Client. Используйте ::withCredentials().Используйте MantleClient для новых проектов; Anthropic\Bedrock\Client остаётся для существующих приложений, использующих API Bedrock InvokeModel.
Этот пакет следует соглашениям SemVer. Поскольку библиотека находится на начальной стадии разработки и имеет основную версию 0, API могут измениться в любое время.
Этот пакет считает улучшения определений типов PHPDoc (не влияющих на время выполнения) неломающими изменениями.
Was this page helpful?