Anthropic Python SDKは、PythonアプリケーションからAnthropic REST APIへの便利なアクセスを提供します。同期および非同期の両方の操作、ストリーミング、そしてAmazon Bedrock、Claude Platform on AWS、Google Cloud、Microsoft Foundryとの統合をサポートしています。
コード例を含むAPI機能のドキュメントについては、APIリファレンスを参照してください。このページでは、Python固有のSDK機能と設定について説明します。
pip install anthropicプラットフォーム固有の統合や非同期パフォーマンスの向上のためには、extrasを指定してインストールします。
# Amazon Bedrockサポート用
pip install "anthropic[bedrock]"
# Google Cloudサポート用
pip install "anthropic[vertex]"
# AWS上のClaude Platformサポート用
pip install "anthropic[aws]"
# Microsoft Foundryサポートは基本パッケージに含まれています
# aiohttpによる非同期パフォーマンス向上用
pip install "anthropic[aiohttp]"Python 3.9以降が必要です。
import os
from anthropic import Anthropic
client = Anthropic(
# これはデフォルトであり、省略可能です
api_key=os.environ.get("ANTHROPIC_API_KEY"),
)
message = client.messages.create(
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Hello, Claude",
}
],
model="claude-opus-5",
)
for block in message.content:
if block.type == "text":
print(block.text)python-dotenvを使用してANTHROPIC_API_KEY="my-anthropic-api-key"を.envファイルに追加することを検討してください。これにより、APIキーがソース管理に保存されなくなります。
Workload Identity Federationを含む認証オプションについては、認証を参照してください。
import os
import asyncio
from anthropic import AsyncAnthropic
client = AsyncAnthropic(
api_key=os.environ.get("ANTHROPIC_API_KEY"),
)
async def main() -> None:
message = await client.messages.create(
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Hello, Claude",
}
],
model="claude-opus-5",
)
print(message.content)
asyncio.run(main())非同期パフォーマンスを向上させるために、デフォルトのhttpxの代わりにaiohttp HTTPバックエンドを使用できます。
import os
import asyncio
from anthropic import AsyncAnthropic, DefaultAioHttpClient
async def main() -> None:
async with AsyncAnthropic(
api_key=os.environ.get("ANTHROPIC_API_KEY"),
http_client=DefaultAioHttpClient(),
) as client:
message = await client.messages.create(
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Hello, Claude",
}
],
model="claude-opus-5",
)
print(message.content)
asyncio.run(main())SDKは、Server-Sent Events(SSE)を使用したストリーミングレスポンスをサポートしています。
client = Anthropic()
stream = client.messages.create(
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Hello, Claude",
}
],
model="claude-opus-5",
stream=True,
)
for event in stream:
print(event.type)非同期クライアントもまったく同じインターフェースを使用します。
client = AsyncAnthropic()
stream = await client.messages.create(
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Hello, Claude",
}
],
model="claude-opus-5",
stream=True,
)
async for event in stream:
print(event.type)SDKは、コンテキストマネージャーを使用し、蓄積されたテキストと最終メッセージへのアクセスを提供するストリーミングヘルパーも提供しています。
async def main() -> None:
async with client.messages.stream(
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Say hello there!",
}
],
model="claude-opus-5",
) as stream:
async for text in stream.text_stream:
print(text, end="", flush=True)
print()
message = await stream.get_final_message()
print(message.to_json())
asyncio.run(main())client.messages.stream(...)を使用したストリーミングでは、蓄積やSDK固有のイベントなど、さまざまなヘルパーが利用できます。
あるいは、client.messages.create(..., stream=True)を使用することもできます。これはストリーム内のイベントのイテラブルのみを返し、使用するメモリが少なくなります(最終的なメッセージオブジェクトを構築しません)。
usageレスポンスプロパティを通じて、特定のリクエストの正確な使用量を確認できます。
message = client.messages.create(...)
print(message.usage)
# Usage(input_tokens=25, output_tokens=13)リクエストを行う前にトークンをカウントすることもできます。
count = client.messages.count_tokens(
model="claude-opus-5", messages=[{"role": "user", "content": "Hello, world"}]
)
print(count.input_tokens) # 10このSDKは、関数呼び出しとも呼ばれるツール使用をサポートしています。詳細については、Claudeでのツール使用を参照してください。
SDKは、純粋なPython関数としてツールを定義および実行するためのヘルパーを提供します。@beta_toolデコレーターは、関数シグネチャとdocstringからツールスキーマを生成します。
import json
from anthropic import Anthropic, beta_tool
client = Anthropic()
@beta_tool
def get_weather(location: str) -> str:
"""Get the weather for a given location.
Args:
location: The city and state, for example, San Francisco, CA
Returns:
A JSON-encoded string with the location, temperature, and weather condition.
"""
return json.dumps(
{
"location": location,
"temperature": "68°F",
"condition": "Sunny",
}
)
# tool_runnerを使用してツール呼び出しを自動的に処理します
runner = client.beta.messages.tool_runner(
max_tokens=1024,
model="claude-opus-5",
tools=[get_weather],
messages=[
{"role": "user", "content": "What is the weather in SF?"},
],
)
for message in runner:
print(message)各イテレーションでAPIリクエストが行われます。レスポンスに指定されたツールのいずれかへの呼び出しが含まれている場合、そのツールは自動的に呼び出され、結果は次のイテレーションでモデルに直接返されます。
このSDKは、client.messages.batchesの下でMessage Batches APIをサポートしています。
Message Batchesは、リクエストの配列を受け取ります。各オブジェクトにはcustom_id識別子と、標準のMessages APIと同じリクエストparamsがあります。
client.messages.batches.create(
requests=[
{
"custom_id": "my-first-request",
"params": {
"model": "claude-opus-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello, world"}],
},
},
{
"custom_id": "my-second-request",
"params": {
"model": "claude-opus-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hi again, friend"}],
},
},
]
)Message Batchが処理されると(.processing_status == 'ended'で示されます)、.batches.results()で結果にアクセスできます。
client = anthropic.Anthropic()
batch_id = "batch_abc123"
result_stream = client.messages.batches.results(batch_id)
for entry in result_stream:
if entry.result.type == "succeeded":
print(entry.result.message.content)ファイルアップロードに対応するリクエストパラメータは、さまざまな形式で渡すことができます。
PathLikeオブジェクト(例:pathlib.Path)(filename, content, content_type)のタプルBinaryIOファイルライクオブジェクトfrom pathlib import Path
from anthropic import Anthropic
client = Anthropic()
# ファイルパスを使用してアップロード
client.beta.files.upload(
file=Path("/path/to/file"),
)
# バイトを使用してアップロード
client.beta.files.upload(
file=("file.txt", b"my bytes", "text/plain"),
)非同期クライアントもまったく同じインターフェースを使用します。PathLikeインスタンスを渡すと、ファイルの内容は自動的に非同期で読み取られます。
ライブラリがAPIに接続できない場合、またはAPIが非成功ステータスコード(つまり、4xxまたは5xxレスポンス)を返す場合、APIErrorのサブクラスが発生します。
import anthropic
try:
message = client.messages.create(
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Hello, Claude",
}
],
model="claude-opus-5",
)
except anthropic.APIConnectionError as e:
print("The server could not be reached")
print(e.__cause__) # an underlying Exception, likely raised within httpx
except anthropic.RateLimitError as e:
print("A 429 status code was received; we should back off a bit.")
except anthropic.APIStatusError as e:
print("Another non-200-range status code was received")
print(e.status_code)
print(e.response)エラーコードは次のとおりです。
| ステータスコード | エラータイプ |
|---|---|
| 400 | BadRequestError |
| 401 | AuthenticationError |
| 403 | PermissionDeniedError |
| 404 | NotFoundError |
| 409 | ConflictError |
| 422 | UnprocessableEntityError |
| 429 | RateLimitError |
| >=500 | InternalServerError |
| N/A | APIConnectionError |
リクエストのデバッグの詳細については、リクエストIDを参照してください。
SDK内のすべてのオブジェクトレスポンスは、request-idレスポンスヘッダーから追加される_request_idプロパティを提供します。これにより、失敗したリクエストをすばやくログに記録し、Anthropicに報告できます。
message = client.messages.create(
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
model="claude-opus-5",
)
print(message._request_id) # e.g., req_018EeWyXxfu5pfWkrYcMdjWG_プレフィックスを使用する他のプロパティとは異なり、_request_idプロパティはパブリックです。特に記載がない限り、他のすべての_プレフィックスのプロパティ、メソッド、モジュールはプライベートです。
特定のエラーは、デフォルトで短い指数バックオフを伴って2回自動的にリトライされます。接続エラー(たとえば、ネットワーク接続の問題による)、408 Request Timeout、409 Conflict、429 Rate Limit、および>=500の内部エラーは、すべてデフォルトでリトライされます。
max_retriesオプションを使用して、これを設定または無効化できます。
# すべてのリクエストに対するデフォルトを設定します:
client = Anthropic(
max_retries=0, # default is 2
)
# または、リクエストごとに設定します:
client.with_options(max_retries=5).messages.create(
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
model="claude-opus-5",
)デフォルトでは、リクエストは10分後にタイムアウトします。これはtimeoutオプションで設定でき、floatまたはhttpx.Timeoutオブジェクトを受け付けます。
import httpx
from anthropic import Anthropic
# すべてのリクエストのデフォルトを設定:
client = Anthropic(
timeout=20.0, # 20 seconds (default is 10 minutes)
)
# より細かい制御:
client = Anthropic(
timeout=httpx.Timeout(60.0, read=5.0, write=10.0, connect=2.0),
)
# リクエストごとに上書き:
client.with_options(timeout=5.0).messages.create(
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
model="claude-opus-5",
)タイムアウト時、SDKはAPITimeoutErrorをスローします。
タイムアウトしたリクエストはデフォルトで2回リトライされることに注意してください。
長時間実行されるリクエストには、ストリーミングMessages APIの使用を検討してください。
ストリーミングを使用せずに大きなmax_tokens値を設定することは避けてください。一部のネットワークでは、一定時間後にアイドル接続が切断される可能性があり、Anthropicからレスポンスを受け取る前にリクエストが失敗したりタイムアウトしたりする原因となります。
SDKは、非ストリーミングリクエストが約10分以上かかると予想される場合、ValueErrorをスローします。stream=Trueを渡すか、クライアントまたはリクエストレベルでtimeoutオプションをオーバーライドすると、このエラーは無効になります。
非ストリーミングリクエストで予想されるリクエストレイテンシがタイムアウトより長い場合、クライアントはレスポンスを受け取ることなく接続を終了してリトライします。
SDKは、一部のネットワークでのアイドル接続タイムアウトの影響を軽減するために、TCPソケットキープアライブオプションを設定します。これは、クライアントにカスタムhttp_clientオプションを渡すことでオーバーライドできます。
Claude APIのリストメソッドはページネーションされています。for構文を使用して、すべてのページにわたってアイテムを反復処理できます。
client = Anthropic()
all_batches = []
# 必要に応じて自動的に追加のページを取得します。
for batch in client.messages.batches.list(limit=20):
all_batches.append(batch)
print(all_batches)非同期の反復処理の場合:
async def main() -> None:
all_batches = []
async for batch in client.messages.batches.list(limit=20):
all_batches.append(batch)
print(all_batches)
asyncio.run(main())あるいは、.has_next_page()、.next_page_info()、または.get_next_page()メソッドを使用して、ページをより細かく制御して操作することもできます。
first_page = await client.messages.batches.list(limit=20)
if first_page.has_next_page():
print(f"will fetch next page using these details: {first_page.next_page_info()}")
next_page = await first_page.get_next_page()
print(f"number of items we just fetched: {len(next_page.data)}")
# 非同期でない場合は`await`を削除します。または、返されたデータを直接操作することもできます。
first_page = await client.messages.batches.list(limit=20)
print(f"next page cursor: {first_page.last_id}")
for batch in first_page.data:
print(batch.id)
# 非同期でない場合は`await`を削除してください。SDKは、2023-06-01に設定されたanthropic-versionヘッダーを自動的に送信します。
必要に応じて、クライアントオブジェクトまたはリクエストごとにデフォルトヘッダーを設定してオーバーライドできます。
デフォルトヘッダーをオーバーライドすると、SDKで不正な型やその他の予期しないまたは未定義の動作が発生する可能性があります。
# クライアント上のすべてのリクエストにデフォルトヘッダーを設定します
client = Anthropic(
default_headers={"anthropic-version": "My-Custom-Value"},
)
# またはリクエストごとに上書きします
client.messages.with_raw_response.create(
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
model="claude-opus-5",
extra_headers={"anthropic-version": "My-Custom-Value"},
)ネストされたリクエストパラメータはTypedDictsです。レスポンスはPydanticモデルであり、JSONへのシリアライズなどのためのヘルパーメソッドも備えています(v1、v2)。
型付きのリクエストとレスポンスは、エディタ内でオートコンプリートとドキュメントを提供します。VS Codeで型エラーを表示してバグを早期に発見したい場合は、python.analysis.typeCheckingModeをbasicに設定してください。
Pydanticモデルを辞書に変換するには、ヘルパーメソッドを使用します。
message = client.messages.create(...)
# JSON文字列に変換
json_str = message.to_json()
# 辞書に変換
data = message.to_dict()レスポンスでは、明示的にnullであるフィールドと、返されなかった(欠落している)フィールドを区別できます。
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}],
)
if response.my_field is None:
if "my_field" not in response.model_fields_set:
print("field was not in the response")
else:
print("field was null")httpxによって返される「生の」Responseには、クライアントの.with_raw_responseプロパティを通じてアクセスできます。これは、レスポンスヘッダーやその他のメタデータにアクセスするのに便利です。
client = Anthropic()
response = client.messages.with_raw_response.create(
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
model="claude-opus-5",
)
print(response.headers.get("request-id"))
message = (
response.parse()
) # get the object that `messages.create()` would have returned
print(message.content)これらのメソッドはAPIResponseオブジェクトを返します。
.with_raw_responseアプローチは、リクエストを行うときにレスポンスボディ全体を即座に読み取ります。代わりにレスポンスボディをストリーミングするには、.with_streaming_responseを使用します。これにはコンテキストマネージャーが必要で、.read()、.text()、.json()、.iter_bytes()、.iter_text()、.iter_lines()、または.parse()を呼び出したときにのみレスポンスボディを読み取ります。非同期クライアントでは、これらは非同期メソッドです。
with client.messages.with_streaming_response.create(
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
model="claude-opus-5",
) as response:
print(response.headers.get("request-id"))
for line in response.iter_lines():
print(line)レスポンスが確実に閉じられるように、コンテキストマネージャーが必要です。
SDKは標準ライブラリのloggingモジュールを使用します。
環境変数ANTHROPIC_LOGをdebugまたはinfoに設定することで、ロギングを有効にできます。
export ANTHROPIC_LOG=debugこのライブラリは、ドキュメント化されたAPIへの便利なアクセスのために型付けされています。ドキュメント化されていないエンドポイント、パラメータ、またはレスポンスプロパティにアクセスする必要がある場合でも、このライブラリを使用できます。
ドキュメント化されていないエンドポイントにリクエストを行うには、client.get、client.post、およびその他のHTTP動詞を使用できます。これらのリクエストを行う際には、リトライなどのクライアントのオプションが尊重されます。
import httpx
response = client.post(
"/foo",
cast_to=httpx.Response,
body={"my_param": True},
)
print(response.json())追加のパラメータを明示的に送信したい場合は、extra_query、extra_body、およびextra_headersリクエストオプションを使用して行うことができます。
extra_パラメータは、同じ名前のドキュメント化されたパラメータをオーバーライドします。セキュリティ上の理由から、これらのメソッドは信頼できる入力データでのみ使用されるようにしてください。
ドキュメント化されていないレスポンスプロパティにアクセスするには、response.unknown_propのように追加フィールドにアクセスできます。また、response.model_extraを使用して、Pydanticモデル上のすべての追加フィールドをdictとして取得することもできます。
httpxクライアントを直接オーバーライドして、プロキシやトランスポートのサポートを含め、ユースケースに合わせてカスタマイズできます。
import httpx
from anthropic import Anthropic, DefaultHttpxClient
client = Anthropic(
# または環境変数 `ANTHROPIC_BASE_URL` を使用します
base_url="http://my.test.server.example.com:8083",
http_client=DefaultHttpxClient(
proxy="http://my.test.proxy.example.com",
transport=httpx.HTTPTransport(local_address="0.0.0.0"),
),
)with_options()を使用して、リクエストごとにクライアントをカスタマイズすることもできます。
client.with_options(http_client=DefaultHttpxClient(...))SDKのデフォルト設定(タイムアウトや接続制限など)が保持されるように、生のhttpx.Clientおよびhttpx.AsyncClientの代わりにDefaultHttpxClientおよびDefaultAsyncHttpxClientを使用してください。
デフォルトでは、ライブラリはクライアントがガベージコレクションされるたびに、基盤となるHTTP接続を閉じます。必要に応じて.close()メソッドを使用して手動でクライアントを閉じるか、終了時に閉じるコンテキストマネージャーを使用できます。
with Anthropic() as client:
message = client.messages.create(...)
# HTTPクライアントは自動的にクローズされますベータ機能は、早期のフィードバックを得て新機能をテストするために、一般リリース前に利用可能になります。Claudeのすべての機能とツールの利用可能状況は、Claudeで構築する概要で確認できます。
ほとんどのベータAPI機能には、クライアントのbetaプロパティを通じてアクセスできます。特定のベータ機能を有効にするには、メッセージを作成する際に適切なベータヘッダーをbetasフィールドに追加する必要があります。
たとえば、Files APIを使用するには:
client = Anthropic()
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Please summarize this document for me."},
{
"type": "document",
"source": {
"type": "file",
"file_id": "file_abc123",
},
},
],
},
],
betas=["files-api-2025-04-14"],
)コード例を含む詳細なプラットフォームセットアップガイドについては、以下を参照してください。
5つのクライアントクラスはすべて、ベースのanthropicパッケージに含まれています。
| プロバイダー | クライアント | 追加の依存関係 |
|---|---|---|
| Agent Platform | from anthropic import AnthropicVertex | pip install "anthropic[vertex]" |
| Bedrock | from anthropic import AnthropicBedrockMantle | pip install "anthropic[bedrock]" |
Bedrock(bedrock-runtimeパス) | from anthropic import AnthropicBedrock | pip install "anthropic[bedrock]" |
| Claude Platform on AWS | from anthropic import AnthropicAWS | pip install "anthropic[aws]" |
| Foundry | from anthropic import AnthropicFoundry | なし |
AnthropicAWSクライアントはベータ版です。コンストラクタにworkspace_idを渡すか、ANTHROPIC_AWS_WORKSPACE_ID環境変数を設定してください。
新しいプロジェクトにはAnthropicBedrockMantleを使用してください。AnthropicBedrockは、BedrockのInvokeModel APIを使用する既存のアプリケーション向けに残されています。
このパッケージは一般的にSemVerの規約に従いますが、特定の後方互換性のない変更がマイナーバージョンとしてリリースされる場合があります。
最新バージョンにアップグレードしたのに期待していた新機能が表示されない場合、Python環境がまだ古いバージョンを使用している可能性があります。実行時に使用されているバージョンは、次の方法で確認できます。
print(anthropic.__version__)Was this page helpful?