OpenAI SDKとの互換性
Anthropicは、OpenAI SDKを使用してClaude APIをテストできる互換性レイヤーを提供しています。わずかなコード変更で、Anthropicモデルの機能を評価できます。
OpenAI SDKを使い始める
OpenAI SDK互換性機能を使用するには、次のことを行う必要があります。
- 公式のOpenAI SDKを使用します。
- 次の点を変更します。
- ベースURLをClaude APIを指すように更新します。
- APIキーを、Claude Consoleで取得したClaude APIキーに置き換えます。
- キーがワークスペースにスコープされていない個人キーまたはサービスアカウントキーである場合は、すべてのリクエストで
anthropic-workspace-idヘッダーも送信してください(たとえば、Python SDKではdefault_headers、TypeScriptではdefaultHeaders)。ワークスペースを選択するを参照してください。 - モデル名をClaudeモデルを使用するように更新します。
- サポートされている機能については、以下のセクションを確認してください。
クイックスタートの例
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get("ANTHROPIC_API_KEY"), # Your Claude API key
base_url="https://api.anthropic.com/v1/", # the Claude API endpoint
)
response = client.chat.completions.create(
model="claude-opus-5-5", # Claude model name
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who are you?"},
],
)
print(response.choices[0].message.content)OpenAI互換性に関する重要な制限事項
APIの動作
OpenAIを使用する場合との最も大きな違いは次のとおりです。
- function callingの
strictパラメータは無視されます。つまり、ツール使用のJSONが指定されたスキーマに従うことは保証されません。スキーマへの準拠を保証するには、ネイティブの構造化出力を使用したClaude APIを使用してください。 - 音声入力はサポートされていません。無視され、入力から削除されます。
- プロンプトキャッシングはサポートされていませんが、Anthropic SDKではサポートされています。
- システム/開発者メッセージは、会話内のどこに出現しても、引き上げられてトップレベルの
systemフィールドに連結されます。会話の途中でシステム指示を追加するには、ネイティブのClaude APIで会話途中のシステムメッセージを使用してください。
サポートされていないフィールドのほとんどは、エラーを発生させるのではなく、暗黙的に無視されます。これらはすべて以下のセクションに記載されています。
出力品質に関する考慮事項
プロンプトを大幅に調整している場合、それはOpenAI向けに特化してチューニングされている可能性が高いです。プロンプトのベストプラクティスガイドを参考に、Claude向けに作り直すことを検討してください。
システム/開発者メッセージの引き上げ
OpenAI SDKへの入力のほとんどはClaude APIのパラメータに明確に直接対応しますが、明確な違いの1つはsystem / developerプロンプトの扱いです。OpenAI APIでは、これら2種類のプロンプトをチャット会話全体のどこにでも配置できます。互換性レイヤーはすべてのsystem/developerメッセージを取得し、それらの間に単一の改行(\n)を挟んで連結します。この完全な文字列は、すべてのメッセージの前に、トップレベルのsystemフィールドとして渡されます。
思考のサポート
thinkingパラメータを追加することで、思考を有効にできます。現在のモデルでは思考は適応型であり、Claudeがいつ、どの程度深く思考するかを判断します。また、Claude 5モデルではデフォルトで有効になっています。手動で設定する拡張思考はレガシーモードです。思考は複雑なタスクにおけるClaudeの推論を向上させますが、OpenAI SDKはClaudeの思考を返しません。要約された思考を含む完全な思考機能を利用するには、ネイティブのClaude APIを使用してください。
response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "Who are you?"}],
extra_body={"thinking": {"type": "enabled", "budget_tokens": 2000}},
)レート制限
「rate limit」(レート制限)は、/v1/messagesエンドポイントに対するAnthropicの標準の制限に従います。
OpenAI互換APIサポートの詳細
リクエストフィールド
単純なフィールド
| フィールド | サポート状況 |
|---|---|
model | Claudeモデル名を使用 |
max_tokens | 完全にサポート |
max_completion_tokens | 完全にサポート |
stream | 完全にサポート |
stream_options | 完全にサポート |
top_p | モデルにそのまま渡されます。Claude 4.7以降のモデルおよびClaude Mythos Previewでは、デフォルト値である0.99以外の値を指定すると400エラーが返されるため、省略してください。temperatureとtop_pの両方を設定したリクエストも400エラーを返します。Messages APIの使用を参照してください。 |
parallel_tool_calls | 完全にサポート |
stop | 空白以外のすべての停止シーケンスが機能 |
temperature | 0から1の間(両端を含む)。1より大きい値は1に制限されます。Claude 4.7以降のモデルおよびClaude Mythos Previewでは、1未満の値を指定すると400エラーが返されるため、省略してください。Messages APIの使用を参照してください。 |
n | 正確に1である必要があります |
logprobs | 無視 |
metadata | 無視 |
response_format | 無視されます。JSON出力には、ネイティブのClaude APIで構造化出力を使用してください。 |
prediction | 無視 |
presence_penalty | 無視 |
frequency_penalty | 無視 |
seed | 無視 |
service_tier | 無視 |
audio | 無視 |
logit_bias | 無視 |
store | 無視 |
user | 無視 |
modalities | 無視 |
top_logprobs | 無視 |
reasoning_effort | 無視 |
tools / functionsフィールド
messages配列フィールド
messages[n].role == "developer"のフィールド
| フィールド | サポート状況 |
|---|---|
content | 完全にサポート(ただし引き上げられます) |
name | 無視 |
messages[n].role == "system"のフィールド
| フィールド | サポート状況 |
|---|---|
content | 完全にサポート(ただし引き上げられます) |
name | 無視 |
messages[n].role == "user"のフィールド
| フィールド | バリアント | サブフィールド | サポート状況 |
|---|---|---|---|
content | string | 完全にサポート | |
array, type == "text" | 完全にサポート | ||
array, type == "image_url" | url | 完全にサポート | |
detail | 無視 | ||
array, type == "input_audio" | 無視 | ||
array, type == "file" | 無視 | ||
name | 無視 |
messages[n].role == "assistant"のフィールド
| フィールド | バリアント | サポート状況 |
|---|---|---|
content | string | 完全にサポート |
array, type == "text" | 完全にサポート | |
array, type == "refusal" | 無視 | |
tool_calls | 完全にサポート | |
function_call | 完全にサポート | |
audio | 無視 | |
refusal | 無視 |
messages[n].role == "tool"のフィールド
| フィールド | バリアント | サポート状況 |
|---|---|---|
content | string | 完全にサポート |
array, type == "text" | 完全にサポート | |
tool_call_id | 完全にサポート | |
tool_choice | サポートされています。"required"および名前付き関数の値はツール呼び出しを強制します。Claude Opus 5.5、Claude Sonnet 5.5、Claude Fable 5.1、Claude Mythos 5.1は強制的なツール使用をサポートしておらずエラーを返すため、これらのモデルでは"auto"を使用してください。ツール使用の強制を参照してください。 | |
name | 無視 |
messages[n].role == "function"のフィールド
| フィールド | バリアント | サポート状況 |
|---|---|---|
content | string | 完全にサポート |
array, type == "text" | 完全にサポート | |
tool_choice | サポートされています。"required"および名前付き関数の値はツール呼び出しを強制します。Claude Opus 5.5、Claude Sonnet 5.5、Claude Fable 5.1、Claude Mythos 5.1は強制的なツール使用をサポートしておらずエラーを返すため、これらのモデルでは"auto"を使用してください。ツール使用の強制を参照してください。 | |
name | 無視 |
レスポンスフィールド
| フィールド | サポート状況 |
|---|---|
id | 完全にサポート |
choices[] | 常に長さは1です |
choices[].finish_reason | 完全にサポート |
choices[].index | 完全にサポート |
choices[].message.role | 完全にサポート |
choices[].message.content | 完全にサポート |
choices[].message.tool_calls | 完全にサポート |
object | 完全にサポート |
created | 完全にサポート |
model | 完全にサポート |
finish_reason | 完全にサポート |
content | 完全にサポート |
usage.completion_tokens | 完全にサポート |
usage.prompt_tokens | 完全にサポート |
usage.total_tokens | 完全にサポート |
usage.completion_tokens_details | 常に空 |
usage.prompt_tokens_details | 常に空 |
choices[].message.refusal | 常に空 |
choices[].message.audio | 常に空 |
logprobs | 常に空 |
service_tier | 常に空 |
system_fingerprint | 常に空 |
エラーメッセージの互換性
互換性レイヤーは、OpenAI APIと一貫したエラー形式を維持します。ただし、詳細なエラーメッセージは同等ではありません。エラーメッセージはログ記録とデバッグにのみ使用してください。
ヘッダーの互換性
OpenAI SDKはヘッダーを自動的に管理しますが、ヘッダーを直接扱う必要がある開発者向けに、Claude APIがサポートするヘッダーの完全なリストを以下に示します。
| ヘッダー | サポート状況 |
|---|---|
x-ratelimit-limit-requests | 完全にサポート |
x-ratelimit-limit-tokens | 完全にサポート |
x-ratelimit-remaining-requests | 完全にサポート |
x-ratelimit-remaining-tokens | 完全にサポート |
x-ratelimit-reset-requests | 完全にサポート |
x-ratelimit-reset-tokens | 完全にサポート |
retry-after | 完全にサポート |
request-id | 完全にサポート |
openai-version | 常に2020-10-01 |
authorization | 完全にサポート |
openai-processing-ms | 常に空 |
Was this page helpful?