La bibliothèque Ruby d'Anthropic offre un accès pratique à l'API REST d'Anthropic depuis n'importe quelle application Ruby 3.2.0+. Elle est livrée avec des types complets et des docstrings en Yard, RBS et RBI. La bibliothèque standard net/http est utilisée comme transport HTTP, avec un « connection pooling » (pooling de connexions) via le gem connection_pool.
Pour la documentation des fonctionnalités de l'API avec des exemples de code, consultez la référence API. Cette page couvre les fonctionnalités et la configuration du SDK spécifiques à Ruby.
Ajoutez le gem au Gemfile de votre application avec Bundler :
bundle add anthropicRuby 3.2.0 ou supérieur.
anthropic = Anthropic::Client.new(
api_key: ENV["ANTHROPIC_API_KEY"] # This is the default and can be omitted
)
message = anthropic.messages.create(
max_tokens: 1024,
messages: [{role: "user", content: "Hello, Claude"}],
model: :"claude-opus-5"
)
message.content.each do |block|
puts block.text if block.type == :text
endPour les options d'authentification, y compris Workload Identity Federation, consultez Authentification.
Le SDK prend en charge le streaming des réponses à l'aide des « Server-Sent Events » (événements envoyés par le serveur), ou SSE.
anthropic = Anthropic::Client.new
stream = anthropic.messages.stream(
max_tokens: 1024,
messages: [{role: "user", content: "Hello, Claude"}],
model: :"claude-opus-5"
)
stream.each do |message|
puts(message.type)
endCette bibliothèque fournit plusieurs commodités pour le streaming de messages, par exemple :
anthropic = Anthropic::Client.new
stream = anthropic.messages.stream(
max_tokens: 1024,
messages: [{role: :user, content: "Say hello there!"}],
model: :"claude-opus-5"
)
stream.text.each do |text|
print(text)
endLe streaming avec anthropic.messages.stream(...) expose divers assistants, notamment l'accumulation et des événements spécifiques au SDK.
Le SDK fournit des mécanismes d'assistance pour définir des classes de données structurées pour les outils et laisser Claude les exécuter automatiquement. Pour une documentation détaillée sur les modèles d'utilisation d'outils, y compris le tool runner, consultez Tool Runner (SDK).
anthropic = Anthropic::Client.new
class CalculatorInput < Anthropic::BaseModel
required :lhs, Float
required :rhs, Float
required :operator, Anthropic::InputSchema::EnumOf[:+, :-, :*, :/]
end
class Calculator < Anthropic::BaseTool
input_schema CalculatorInput
def call(expr)
expr.lhs.public_send(expr.operator, expr.rhs)
end
end
# Gère automatiquement la boucle d'exécution des outils
anthropic.beta.messages.tool_runner(
model: "claude-opus-5",
max_tokens: 1024,
messages: [{role: "user", content: "What's 15 * 7?"}],
tools: [Calculator.new]
).each_message { |message| puts message.content }Pour la documentation complète sur les sorties structurées, y compris des exemples Ruby, consultez Sorties structurées.
Lorsque la bibliothèque ne parvient pas à se connecter à l'API, ou si l'API renvoie un code de statut de non-réussite (c'est-à-dire une réponse 4xx ou 5xx), une sous-classe de Anthropic::Errors::APIError est levée :
anthropic = Anthropic::Client.new
begin
message = anthropic.messages.create(
max_tokens: 1024,
messages: [{role: "user", content: "Hello, Claude"}],
model: :"claude-opus-5"
)
rescue Anthropic::Errors::APIConnectionError => e
puts("The server could not be reached")
puts(e.cause) # an underlying Exception, likely raised within `net/http`
rescue Anthropic::Errors::RateLimitError => e
puts("A 429 status code was received; we should back off a bit.")
rescue Anthropic::Errors::APIStatusError => e
puts("Another non-200-range status code was received")
puts(e.status)
endLes codes d'erreur sont les suivants :
| Cause | Type d'erreur |
|---|---|
| HTTP 400 | BadRequestError |
| HTTP 401 | AuthenticationError |
| HTTP 403 | PermissionDeniedError |
| HTTP 404 | NotFoundError |
| HTTP 409 | ConflictError |
| HTTP 422 | UnprocessableEntityError |
| HTTP 429 | RateLimitError |
| HTTP >= 500 | InternalServerError |
| Autre erreur HTTP | APIStatusError |
| Timeout | APITimeoutError |
| Erreur réseau | APIConnectionError |
Certaines erreurs font automatiquement l'objet de 2 nouvelles tentatives par défaut, avec un court backoff exponentiel.
Les erreurs de connexion (par exemple, en raison d'un problème de connectivité réseau), 408 Request Timeout, 409 Conflict, 429 Rate Limit, les erreurs internes >=500 et les timeouts font tous l'objet de nouvelles tentatives par défaut.
Vous pouvez utiliser l'option max_retries pour configurer ou désactiver ce comportement :
# Configurez la valeur par défaut pour toutes les requêtes :
anthropic = Anthropic::Client.new(
max_retries: 0 # default is 2
)
# Ou configurez par requête :
anthropic.messages.create(
max_tokens: 1024,
messages: [{role: "user", content: "Hello, Claude"}],
model: :"claude-opus-5",
request_options: {max_retries: 5}
)Par défaut, les requêtes expirent après 10 minutes. Vous pouvez utiliser l'option timeout pour configurer cela :
# Configurez la valeur par défaut pour toutes les requêtes :
anthropic = Anthropic::Client.new(
timeout: 20 # 20 seconds (default is 10 minutes)
)
# Ou configurez par requête :
anthropic.messages.create(
max_tokens: 1024,
messages: [{role: "user", content: "Hello, Claude"}],
model: :"claude-opus-5",
request_options: {timeout: 5}
)En cas de timeout, Anthropic::Errors::APITimeoutError est levée.
Notez que les requêtes qui expirent font l'objet de nouvelles tentatives par défaut.
Les méthodes de liste dans 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 :
anthropic = Anthropic::Client.new
page = anthropic.messages.batches.list(limit: 20)
# Récupère un seul élément de la page.
batch = page.data[0]
puts(batch.id)
# Récupère automatiquement des pages supplémentaires si nécessaire.
page.auto_paging_each do |batch|
puts(batch.id)
endAlternativement, vous pouvez utiliser les méthodes #next_page? et #next_page pour un contrôle plus granulaire lors du travail avec les pages.
anthropic = Anthropic::Client.new
page = anthropic.messages.batches.list(limit: 20)
loop do
page.data&.each { |batch| puts(batch.id) }
break unless page.next_page?
page = page.next_page
endLes paramètres de requête qui correspondent à des téléversements de fichiers peuvent être transmis sous forme de contenu brut, d'une instance Pathname, de StringIO, et plus encore.
anthropic = Anthropic::Client.new
require "pathname"
# Utilisez `Pathname` pour envoyer le nom du fichier et/ou éviter de charger un fichier volumineux en mémoire :
file_metadata = anthropic.beta.files.upload(file: Pathname("/path/to/file"))
# Vous pouvez aussi passer directement le contenu du fichier ou un `StringIO` :
file_metadata = anthropic.beta.files.upload(file: File.read("/path/to/file"))
# Ou, pour contrôler le nom du fichier et/ou le type de contenu :
file = Anthropic::FilePart.new(File.read("/path/to/file"), filename: "/path/to/file", content_type: "...")
file_metadata = anthropic.beta.files.upload(file: file)
puts(file_metadata.id)Notez que vous pouvez également transmettre un descripteur IO brut, mais cela désactive les nouvelles tentatives, car la bibliothèque ne peut pas être sûre que le descripteur est un fichier ou un pipe (qui ne peut pas être rembobiné).
Cette bibliothèque fournit des définitions RBI complètes et n'a aucune dépendance à sorbet-runtime.
Vous pouvez fournir des paramètres de requête typés de manière sûre comme ceci :
anthropic = Anthropic::Client.new
anthropic.messages.create(
max_tokens: 1024,
messages: [Anthropic::MessageParam.new(role: "user", content: "Hello, Claude")],
model: :"claude-opus-5"
)Ou, de manière équivalente :
anthropic = Anthropic::Client.new
# Les hashes fonctionnent, mais ne sont pas typés :
anthropic.messages.create(
max_tokens: 1024,
messages: [{role: "user", content: "Hello, Claude"}],
model: :"claude-opus-5"
)
# Vous pouvez aussi utiliser le splat sur une classe Params complète :
params = Anthropic::MessageCreateParams.new(
max_tokens: 1024,
messages: [Anthropic::MessageParam.new(role: "user", content: "Hello, Claude")],
model: :"claude-opus-5"
)
anthropic.messages.create(**params)Étant donné que cette bibliothèque ne dépend pas de sorbet-runtime, elle ne peut pas fournir d'instances T::Enum. À la place, le SDK fournit des « tagged symbols » (symboles étiquetés), qui sont toujours une primitive à l'exécution :
# :auto
puts(Anthropic::MessageCreateParams::ServiceTier::AUTO)
# Type révélé : `T.all(Anthropic::MessageCreateParams::ServiceTier, Symbol)`
T.reveal_type(Anthropic::MessageCreateParams::ServiceTier::AUTO)Les paramètres d'enum ont un type « assoupli », vous pouvez donc transmettre soit des constantes d'enum, soit leur valeur littérale :
# L'utilisation des constantes d'énumération préserve les informations de type étiqueté :
anthropic.messages.create(
service_tier: Anthropic::MessageCreateParams::ServiceTier::AUTO,
# ...
)
# Les valeurs littérales sont également autorisées :
anthropic.messages.create(
service_tier: :auto,
# ...
)Tous les objets de paramètres et de réponses héritent de Anthropic::Internal::Type::BaseModel, qui offre plusieurs commodités, notamment :
Tous les champs, y compris les champs inconnus, sont accessibles avec la syntaxe obj[:prop], et peuvent être déstructurés avec obj => {prop: prop} ou la syntaxe de pattern-matching.
Équivalence structurelle pour l'égalité ; si deux appels API renvoient les mêmes valeurs, la comparaison des réponses avec == renverra true.
Les instances et les classes elles-mêmes peuvent être affichées de manière lisible (pretty-printed).
Des assistants tels que #to_h, #deep_to_h, #to_json et #to_yaml.
Les instances Anthropic::Client sont thread-safe, mais ne sont fork-safe que lorsqu'il n'y a aucune requête HTTP en cours.
Chaque instance de Anthropic::Client possède son propre pool de connexions HTTP avec une taille par défaut de 99. Par conséquent, la recommandation est de créer le client une seule fois par application dans la plupart des contextes.
Lorsque toutes les connexions disponibles du pool sont utilisées, les requêtes attendent qu'une nouvelle connexion devienne disponible, le temps d'attente en file étant comptabilisé dans le timeout de la requête.
Sauf indication contraire, les autres classes du SDK ne disposent pas de verrous protégeant leur structure de données sous-jacente.
Vous pouvez envoyer des paramètres non documentés à n'importe quel endpoint, et lire des propriétés de réponse non documentées, comme ceci :
Les paramètres extra_ du même nom remplacent les paramètres documentés. Pour des raisons de sécurité, assurez-vous que ces méthodes ne sont utilisées qu'avec des données d'entrée de confiance.
anthropic = Anthropic::Client.new
value = "example"
message =
anthropic.messages.create(
max_tokens: 1024,
messages: [{role: "user", content: "Hello, Claude"}],
model: :"claude-opus-5",
request_options: {
extra_query: {my_query_parameter: value},
extra_body: {my_body_parameter: value},
extra_headers: {"my-header": value}
}
)
puts(message[:my_undocumented_property])Si vous souhaitez envoyer explicitement un paramètre supplémentaire, vous pouvez le faire avec extra_query, extra_body et extra_headers sous le paramètre request_options: lors d'une requête, comme illustré dans les exemples ci-dessus.
Pour effectuer des requêtes vers des endpoints non documentés tout en conservant les avantages de l'authentification, des nouvelles tentatives, etc., vous pouvez effectuer des requêtes en utilisant anthropic.request, comme ceci :
response = anthropic.request(
method: :post,
path: '/undocumented/endpoint',
query: {"dog": "woof"},
headers: {"useful-header": "interesting-value"},
body: {"hello": "world"}
)Pour des guides détaillés de configuration de plateforme avec des exemples de code, consultez :
Le SDK Ruby prend en charge les plateformes suivantes :
Anthropic::VertexClient. Nécessite le gem googleauth.Anthropic::BedrockMantleClient, ou Anthropic::BedrockClient pour le chemin bedrock-runtime. Anthropic::BedrockMantleClient nécessite le gem aws-sdk-core ; Anthropic::BedrockClient nécessite le gem aws-sdk-bedrockruntime.anthropic (nécessite le gem aws-sdk-core). Fournit Anthropic::AWSClient. Transmettez workspace_id: au constructeur ou définissez la variable d'environnement ANTHROPIC_AWS_WORKSPACE_ID (voir Espaces de travail). Disponible en version bêta.Utilisez Anthropic::BedrockMantleClient pour les nouveaux projets ; Anthropic::BedrockClient reste disponible pour les applications existantes utilisant l'API InvokeModel de Bedrock.
Ce package suit les conventions SemVer. Comme la bibliothèque est en développement initial et a une version majeure de 0, les API peuvent changer à tout moment.
Ce package considère les améliorations apportées aux définitions de types (non-runtime) *.rbi et *.rbs comme des changements non cassants.
Was this page helpful?