SDK PHP
Installez et configurez le SDK PHP Anthropic avec des objets valeur et des patrons de construction (builders)
La bibliothèque PHP Anthropic offre un accès pratique à l'API Claude depuis n'importe quelle application PHP 8.1.0+.
Installation
Le SDK utilise PSR-18 pour HTTP et détecte automatiquement tout client PSR-18 installé. Guzzle est recommandé, car le SDK le configure pour le « streaming » (streaming) sans configuration supplémentaire :
composer require "anthropic-ai/sdk" "guzzlehttp/guzzle:^7"Prérequis
PHP 8.1.0 ou supérieur.
Utilisation
Cette bibliothèque utilise des paramètres nommés pour spécifier les arguments optionnels. Les paramètres ayant une valeur par défaut doivent être définis par leur nom.
$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;Pour les options d'authentification, y compris Workload Identity Federation, consultez Authentification. Si votre clé API est une clé personnelle ou de compte de service ayant accès à plusieurs espaces de travail, définissez l'identifiant de l'espace de travail dans l'en-tête de requête anthropic-workspace-id ; Sélectionner un espace de travail présente l'option par requête pour ce SDK.
Objets valeur
Il est recommandé d'utiliser le constructeur statique with Base64ImageSource::with(data: "U3RhaW5sZXNzIHJvY2tz", ...) et des paramètres nommés pour initialiser les « value objects » (objets valeur).
Cependant, des « builders » (constructeurs fluides) sont également fournis : (new Base64ImageSource)->withData("U3RhaW5sZXNzIHJvY2tz").
Streaming
Le SDK prend en charge les réponses en streaming à l'aide des « Server-Sent Events » (événements envoyés par le serveur), ou 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;
}Le streaming nécessite un client HTTP qui renvoie le corps de la réponse de manière incrémentale. Lorsque Guzzle est le client PSR-18 détecté, le SDK le configure automatiquement pour le streaming. Avec un client qui met en mémoire tampon, la boucle foreach produit tous les événements d'un seul coup lorsque la réponse est terminée, au lieu de les produire de manière incrémentale ; si vous observez ce symptôme, installez Guzzle ou fournissez un client PSR-18 compatible avec le streaming via l'option de requête streamingTransporter :
$client = new Anthropic\Client(
requestOptions: Anthropic\RequestOptions::with(streamingTransporter: $myStreamingClient),
);Gestion des erreurs
Lorsque la bibliothèque ne parvient pas à se connecter à l'API, ou si l'API renvoie un code de statut indiquant un échec (c'est-à-dire une réponse 4xx ou 5xx), une sous-classe de Anthropic\Core\Exceptions\APIException est levée :
<?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();
}Les codes d'erreur sont les suivants :
| Cause | Type d'erreur |
|---|---|
| HTTP 400 | BadRequestException |
| HTTP 401 | AuthenticationException |
| HTTP 403 | PermissionDeniedException |
| HTTP 404 | NotFoundException |
| HTTP 409 | ConflictException |
| HTTP 422 | UnprocessableEntityException |
| HTTP 429 | RateLimitException |
| HTTP >= 500 | InternalServerException |
| Autre erreur HTTP | APIStatusException |
| Délai d'expiration | APITimeoutException |
| Erreur réseau | APIConnectionException |
Nouvelles tentatives
Certaines erreurs font automatiquement l'objet de deux nouvelles tentatives par défaut, avec un court délai d'attente exponentiel (« exponential backoff »).
Les erreurs de connexion (par exemple, en raison d'un problème de connectivité réseau), 408 Request Timeout, 409 Conflict, 429 Rate Limit (limite de débit), les erreurs internes >=500 et les délais d'expiration font tous l'objet de nouvelles tentatives par défaut.
Vous pouvez utiliser l'option maxRetries pour configurer ou désactiver ce comportement :
use Anthropic\RequestOptions;
// Configurez la valeur par défaut pour toutes les requêtes :
$client = new Client(requestOptions: RequestOptions::with(maxRetries: 0));
// Ou configurez-la par requête :
$result = $client->messages->create(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5',
requestOptions: RequestOptions::with(maxRetries: 5),
);Pagination
Les méthodes de liste de l'API Claude sont paginées.
Cette bibliothèque fournit des itérateurs à pagination automatique avec chaque réponse de liste, de sorte que vous n'avez pas à demander manuellement les pages successives :
$client = new Client();
$page = $client->beta->messages->batches->list(limit: 20);
// récupérer les éléments de la page actuelle
foreach ($page->getItems() as $item) {
echo $item->id, PHP_EOL;
}
// effectuer des requêtes réseau supplémentaires pour récupérer les éléments de toutes les pages, y compris la page actuelle et les suivantes
foreach ($page->pagingEachItem() as $item) {
echo $item->id, PHP_EOL;
}Utilisation avancée
Propriétés non documentées
Vous pouvez envoyer des paramètres non documentés à n'importe quel point de terminaison, et lire des propriétés de réponse non documentées, comme suit :
<?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'],
),
);Paramètres de requête non documentés
Si vous souhaitez envoyer explicitement un paramètre supplémentaire, vous pouvez le faire avec les options extraQueryParams, extraBodyParams et extraHeaders sous RequestOptions::with() lors de l'envoi d'une requête, comme illustré dans l'exemple précédent.
Points de terminaison non documentés
Pour effectuer des requêtes vers des points de terminaison non documentés tout en conservant les avantages de l'authentification, des nouvelles tentatives et des autres fonctionnalités du client, vous pouvez effectuer des requêtes à l'aide de client->request, comme suit :
$client = new Client();
$response = $client->request(
method: "post",
path: '/undocumented/endpoint',
query: ['dog' => 'woof'],
headers: ['useful-header' => 'interesting-value'],
body: ['hello' => 'world']
);Intégrations de plateformes
Le SDK PHP prend en charge les plateformes suivantes :
- Agent Platform :
Anthropic\Vertex\Client. Utilisez::fromEnvironment(). - Bedrock :
Anthropic\Bedrock\MantleClient. Utiliseznew MantleClient(awsRegion: ...). - Bedrock (ancienne version) :
Anthropic\Bedrock\Client. Utilisez::fromEnvironment()ou::withCredentials(). - Claude Platform sur AWS :
Anthropic\Aws\Client(nécessiteaws/aws-sdk-phpcomme dépendance optionnelle). Utiliseznew Anthropic\Aws\Client(workspaceId: ...)ou définissezANTHROPIC_AWS_WORKSPACE_ID. Disponible en version bêta. - Foundry :
Anthropic\Foundry\Client. Utilisez::withCredentials().
Utilisez MantleClient pour les nouveaux projets ; Anthropic\Bedrock\Client reste disponible pour les applications existantes utilisant l'API InvokeModel de Bedrock.
Gestion sémantique de version
Ce paquet suit les conventions SemVer. Comme la bibliothèque est en phase initiale de développement et possède une version majeure 0, les API peuvent changer à tout moment.
Ce paquet considère les améliorations apportées aux définitions de types PHPDoc (hors exécution) comme des changements non cassants.
Ressources supplémentaires
Was this page helpful?