Die Anthropic PHP-Bibliothek bietet bequemen Zugriff auf die Anthropic REST API aus jeder PHP 8.1.0+ Anwendung.
Das PHP SDK befindet sich derzeit in der Beta-Phase. APIs können sich zwischen Versionen ändern.
Für die API-Funktionsdokumentation mit Codebeispielen siehe die API-Referenz. Diese Seite behandelt PHP-spezifische SDK-Funktionen und -Konfiguration.
Das SDK verwendet PSR-18 für HTTP und erkennt jeden installierten PSR-18-Client automatisch. Guzzle wird empfohlen, da das SDK es ohne zusätzliche Einrichtung für Streaming konfiguriert:
composer require "anthropic-ai/sdk" "guzzlehttp/guzzle:^7"PHP 8.1.0 oder höher.
Diese Bibliothek verwendet benannte Parameter, um optionale Argumente anzugeben. Parameter mit einem Standardwert müssen über ihren Namen gesetzt werden.
$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;Für Authentifizierungsoptionen einschließlich Workload Identity Federation siehe Authentifizierung.
Es wird empfohlen, den statischen with-Konstruktor Base64ImageSource::with(data: "U3RhaW5sZXNzIHJvY2tz", ...) und benannte Parameter zu verwenden, um Value Objects zu initialisieren.
Es werden jedoch auch Builder bereitgestellt: (new Base64ImageSource)->withData("U3RhaW5sZXNzIHJvY2tz").
Das SDK bietet Unterstützung für Streaming-Antworten mittels 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;
}Streaming erfordert einen HTTP-Client, der den Response-Body inkrementell zurückgibt. Wenn Guzzle der erkannte PSR-18-Client ist, konfiguriert das SDK ihn automatisch für Streaming. Bei einem puffernden Client liefert die foreach-Schleife alle Events auf einmal, sobald die Antwort abgeschlossen ist, statt inkrementell; wenn du dieses Symptom beobachtest, installiere Guzzle oder stelle einen Streaming-fähigen PSR-18-Client über die Request-Option streamingTransporter bereit:
$client = new Anthropic\Client(
requestOptions: Anthropic\RequestOptions::with(streamingTransporter: $myStreamingClient),
);Wenn die Bibliothek keine Verbindung zur API herstellen kann oder wenn die API einen nicht erfolgreichen Statuscode zurückgibt (d. h. eine 4xx- oder 5xx-Antwort), wird eine Unterklasse von Anthropic\Core\Exceptions\APIException geworfen:
<?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();
}Die Fehlercodes sind wie folgt:
| Ursache | Fehlertyp |
|---|---|
| HTTP 400 | BadRequestException |
| HTTP 401 | AuthenticationException |
| HTTP 403 | PermissionDeniedException |
| HTTP 404 | NotFoundException |
| HTTP 409 | ConflictException |
| HTTP 422 | UnprocessableEntityException |
| HTTP 429 | RateLimitException |
| HTTP >= 500 | InternalServerException |
| Anderer HTTP-Fehler | APIStatusException |
| Timeout | APITimeoutException |
| Netzwerkfehler | APIConnectionException |
Bestimmte Fehler werden standardmäßig zweimal automatisch wiederholt, mit einem kurzen exponentiellen Backoff.
Verbindungsfehler (zum Beispiel aufgrund eines Netzwerkverbindungsproblems), 408 Request Timeout, 409 Conflict, 429 Rate Limit, >=500 interne Fehler und Timeouts werden standardmäßig alle wiederholt.
Du kannst die Option maxRetries verwenden, um dies zu konfigurieren oder zu deaktivieren:
use Anthropic\RequestOptions;
// Konfiguriere den Standard für alle Anfragen:
$client = new Client(requestOptions: RequestOptions::with(maxRetries: 0));
// Oder konfiguriere es pro Anfrage:
$result = $client->messages->create(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5',
requestOptions: RequestOptions::with(maxRetries: 5),
);Listenmethoden in der Claude API sind paginiert.
Diese Bibliothek stellt mit jeder Listenantwort automatisch paginierende Iteratoren bereit, sodass du aufeinanderfolgende Seiten nicht manuell anfordern musst:
$client = new Client();
$page = $client->beta->messages->batches->list(limit: 20);
// Elemente von der aktuellen Seite abrufen
foreach ($page->getItems() as $item) {
echo $item->id, PHP_EOL;
}
// zusätzliche Netzwerkanfragen stellen, um Elemente von allen Seiten abzurufen, einschließlich der aktuellen Seite und der folgenden
foreach ($page->pagingEachItem() as $item) {
echo $item->id, PHP_EOL;
}Du kannst nicht dokumentierte Parameter an jeden Endpunkt senden und nicht dokumentierte Antworteigenschaften wie folgt lesen:
Die gleichnamigen extra*-Parameter überschreiben die dokumentierten Parameter.
<?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'],
),
);Wenn du explizit einen zusätzlichen Parameter senden möchtest, kannst du dies mit den Optionen extraQueryParams, extraBodyParams und extraHeaders unter RequestOptions::with() beim Stellen einer Anfrage tun, wie im vorherigen Beispiel gezeigt.
Um Anfragen an nicht dokumentierte Endpunkte zu stellen und dabei die Vorteile von Authentifizierung, Wiederholungsversuchen und anderen Client-Funktionen zu behalten, kannst du Anfragen mit client->request wie folgt stellen:
$client = new Client();
$response = $client->request(
method: "post",
path: '/undocumented/endpoint',
query: ['dog' => 'woof'],
headers: ['useful-header' => 'interesting-value'],
body: ['hello' => 'world']
);Detaillierte Anleitungen zur Plattformeinrichtung mit Codebeispielen findest du hier:
Das PHP SDK unterstützt die folgenden Plattformen:
Anthropic\Vertex\Client. Verwende ::fromEnvironment().Anthropic\Bedrock\MantleClient. Verwende new MantleClient(awsRegion: ...).Anthropic\Bedrock\Client. Verwende ::fromEnvironment() oder ::withCredentials().Anthropic\Aws\Client (erfordert aws/aws-sdk-php als Soft-Dependency). Verwende new Anthropic\Aws\Client(workspaceId: ...) oder setze ANTHROPIC_AWS_WORKSPACE_ID. Verfügbar in der Beta.Anthropic\Foundry\Client. Verwende ::withCredentials().Verwende MantleClient für neue Projekte; Anthropic\Bedrock\Client bleibt für bestehende Anwendungen erhalten, die die Bedrock InvokeModel API verwenden.
Dieses Paket folgt den SemVer-Konventionen. Da sich die Bibliothek in der anfänglichen Entwicklung befindet und eine Hauptversion von 0 hat, können sich APIs jederzeit ändern.
Dieses Paket betrachtet Verbesserungen an den (nicht zur Laufzeit relevanten) PHPDoc-Typdefinitionen als nicht-brechende Änderungen.
Was this page helpful?