Anthropic Python SDKは、PythonアプリケーションからAnthropic REST APIへの便利なアクセスを提供します。同期および非同期の操作、ストリーミング、さらにAmazon Bedrock、Vertex AI、Microsoft Foundry、AWS上のClaude Platformとの統合をサポートしています。
コード例を含むAPI機能のドキュメントについては、APIリファレンスを参照してください。このページでは、Python固有のSDK機能と設定について説明します。
pip install anthropicプラットフォーム固有の統合や非同期パフォーマンスの向上のために、エクストラ付きでインストールします。
# Amazon Bedrockサポート用
pip install "anthropic[bedrock]"
# Vertex AIサポート用
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-4-8",
)
print(message.content)APIキーをソース管理に保存しないように、python-dotenvを使用して.envファイルにANTHROPIC_API_KEY="my-anthropic-api-key"を追加することを検討してください。
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-4-8",
)
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-4-8",
)
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-4-8",
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-4-8",
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-4-8",
) 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-4-8", messages=[{"role": "user", "content": "Hello, world"}]
)
print(count.input_tokens) # 10このSDKは、「function calling」(関数呼び出し)としても知られるツール使用をサポートしています。詳細については、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-4-8",
tools=[get_weather],
messages=[
{"role": "user", "content": "What is the weather in SF?"},
],
)
for message in runner:
print(message)各イテレーションでAPIリクエストが行われます。Claudeが指定されたツールのいずれかを呼び出したい場合、それは自動的に呼び出され、結果は次のイテレーションでモデルに直接返されます。
この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-4-8",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello, world"}],
},
},
{
"custom_id": "my-second-request",
"params": {
"model": "claude-opus-4-8",
"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-4-8",
)
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-4-8",
)
print(message._request_id) # e.g., req_018EeWyXxfu5pfWkrYcMdjWG_プレフィックスを使用する他のプロパティとは異なり、_request_idプロパティはパブリックです。特に文書化されていない限り、他のすべての_プレフィックスのプロパティ、メソッド、モジュールはプライベートです。
特定のエラーは、デフォルトで短い指数バックオフを使用して自動的に2回リトライされます。接続エラー(例:ネットワーク接続の問題による)、408 Request Timeout、409 Conflict、429 Rate Limit、および>=500 Internalエラーはすべてデフォルトでリトライされます。
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-4-8",
)デフォルトでは、リクエストは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-4-8",
)タイムアウト時には、APITimeoutErrorがスローされます。
タイムアウトしたリクエストは、デフォルトで2回リトライされることに注意してください。
実行時間の長いリクエストには、ストリーミングMessages APIの使用を検討してください。
ストリーミングを使用せずに大きなmax_tokens値を設定することは避けてください。一部のネットワークでは、一定時間後にアイドル接続が切断される場合があり、Anthropicからレスポンスを受信せずにリクエストが失敗したりタイムアウトしたりする可能性があります。
非ストリーミングリクエストが約10分以上かかると予想される場合、SDKはValueErrorをスローします。stream=Trueを渡すか、クライアントまたはリクエストレベルでtimeoutオプションをオーバーライドすると、このエラーは無効になります。
非ストリーミングリクエストで予想されるリクエストの「latency」(レイテンシ)がタイムアウトよりも長い場合、クライアントはレスポンスを受信せずに接続を終了してリトライします。
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-4-8",
extra_headers={"anthropic-version": "My-Custom-Value"},
)ネストされたリクエストパラメータはTypedDictです。レスポンスは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-4-8",
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-4-8",
)
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-4-8",
) 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-4-8",
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パッケージに含まれています。
| プロバイダー | クライアント | 追加の依存関係 |
|---|---|---|
| Bedrock | from anthropic import AnthropicBedrockMantle | pip install "anthropic[bedrock]" |
Bedrock(bedrock-runtimeパス) | from anthropic import AnthropicBedrock | pip install "anthropic[bedrock]" |
| Vertex AI | from anthropic import AnthropicVertex | pip install "anthropic[vertex]" |
| Foundry | from anthropic import AnthropicFoundry | なし |
| AWS上のClaude Platform | from anthropic import AnthropicAWS | pip install "anthropic[aws]" |
AnthropicAWSクライアントはベータ版です。コンストラクタにworkspace_idを渡すか、ANTHROPIC_AWS_WORKSPACE_ID環境変数を設定してください。
新しいプロジェクトにはAnthropicBedrockMantleを使用してください。AnthropicBedrockは、BedrockのInvokeModel APIを使用している既存のアプリケーション向けに引き続き利用可能です。
このパッケージは一般的にSemVerの規約に従いますが、特定の後方互換性のない変更がマイナーバージョンとしてリリースされる場合があります。
最新バージョンにアップグレードしたにもかかわらず、期待していた新機能が表示されない場合、Python環境がまだ古いバージョンを使用している可能性があります。ランタイムで使用されているバージョンは、以下で確認できます。
print(anthropic.__version__)Was this page helpful?