クロードAPI
プロンプト キャッシュ、ストリーミング、ツールの使用、モデル移行ワークフローを使用して、Claude API および Anthropic SDK アプリを構築、デバッグ、最適化するためのエージェント スキル ガイド。
出典: anthropics/skills (MIT) を基にしたコンテンツ。
このスキルは、Claude を使用して LLM を利用したアプリケーションを構築するのに役立ちます。ニーズに基づいて適切なサーフェスを選択し、プロジェクト言語を検出して、関連する言語固有のドキュメントを読みます。
始める前に
ターゲット ファイル (ターゲット ファイルがない場合は、プロンプトとプロジェクト) をスキャンして、非 Anthropic プロバイダー マーカー (import openai、from openai、langchain_openai、OpenAI(、gpt-4、gpt-5、agent-openai.pyや*-generic.pyなどのファイル名)、またはコードをプロバイダー中立に保つための明示的な指示を探します。見つけた場合は、停止して、このスキルが Claude/Anthropic SDK コードを生成することをユーザーに伝えます。ファイルを Claude に切り替えるか、それとも Claude 以外の実装を希望するかを尋ねます。 Anthropic SDK 呼び出しを使用して非 Anthropic ファイルを編集しないでください。
出力要件
ユーザーが Claude 機能の追加、変更、または実装を要求した場合、コードは次のいずれかを介して Claude を呼び出す必要があります。
- プロジェクトの言語 (
anthropic、@anthropic-ai/sdk、com.anthropic.*など) の公式 Anthropic SDK。これは、サポートされている SDK がプロジェクトに存在する場合のデフォルトです。 - Raw HTTP (
curl、requests、fetch、httpxなど) - ユーザーが明示的に cURL/REST/raw HTTP を要求した場合、プロジェクトがシェル/cURL プロジェクトである場合、または言語に公式 SDK がない場合のみ。
この 2 つを決して混合しないでください。軽いと感じるからといって、Python または TypeScript プロジェクトでrequests/fetchを使用しないでください。 OpenAI 互換の shim には決してフォールバックしないでください。
SDK の使用法を推測しないでください。 関数名、クラス名、名前空間、メソッド シグネチャ、およびインポート パスは、明示的なドキュメント (このスキルの{lang}/ファイル、公式 SDK リポジトリ、またはshared/live-sources.mdにリストされているドキュメント リンク) から取得する必要があります。必要なバインディングがスキル ファイルに明示的に文書化されていない場合は、コードを記述する前にshared/live-sources.mdから関連する SDK リポジトリを WebFetch します。 Ruby/Java/Go/PHP/C# API を cURL シェイプまたは別の言語の SDK から推論しないでください。
デフォルト
ユーザーが別の要求をしない限り、次のようになります。
クロード モデルのバージョンについては、正確なモデル文字列claude-opus-4-7を介してアクセスできるクロード Opus 4.7 を使用してください。リモートで複雑なものについては、デフォルトで適応的思考 (thinking: {type: "adaptive"}) を使用してください。最後に、長い入力、長い出力、または高いmax_tokensを伴う可能性のあるリクエストについては、デフォルトでストリーミングを行ってください。これにより、リクエストのタイムアウトが発生するのを防ぎます。個別のストリーム イベントを処理する必要がない場合は、SDK の.get_final_message()/.finalMessage()ヘルパーを使用して完全な応答を取得します
サブコマンド
このプロンプトの下部にあるユーザー リクエストが単なるサブコマンド文字列 (散文なし) である場合は、このドキュメントのすべての サブコマンド テーブル (以下に追加されたセクション内のテーブルも含む) を検索し、一致する [アクション] 列を直接たどります。これにより、ユーザーは/claude-api <subcommand>経由で特定のフローを呼び出すことができます。ドキュメント内に一致するテーブルがない場合は、リクエストを通常の散文として扱います。
言語検出
コード例を読む前に、ユーザーがどの言語を使用しているかを確認してください。
-
プロジェクト ファイルを確認して、言語を推測します。
*.py、requirements.txt、pyproject.toml、setup.py、Pipfile-> Python -python/から読み取り*.ts、*.tsx、package.json、tsconfig.json-> TypeScript -typescript/から読み取り*.js、*.jsx(.tsファイルが存在しない) -> TypeScript - JS は同じ SDK を使用し、typescript/から読み取ります*.java、pom.xml、build.gradle-> Java -java/から読み取り*.kt、*.kts、build.gradle.kts-> Java - Kotlin は Java SDK を使用し、java/から読み取ります*.scala、build.sbt-> Java - Scala は Java SDK を使用し、java/から読み取ります*.go、go.mod-> Go -go/から読み取り*.rb、Gemfile-> Ruby -ruby/から読み取り*.cs、*.csproj-> C# -csharp/から読み取り*.php、composer.json-> PHP -php/から読み取り
-
複数の言語が検出された場合 (例: Python ファイルと TypeScript ファイルの両方):
- ユーザーの現在のファイルまたは質問がどの言語に関連しているかを確認します
- それでも曖昧な場合は、「Python ファイルと TypeScript ファイルの両方を検出しました。Claude API 統合にはどの言語を使用していますか?」と尋ねます。
-
言語を推測できない場合 (空のプロジェクト、ソース ファイルがない、またはサポートされていない言語):
- AskUserQuestion を次のオプションで使用します: Python、TypeScript、Java、Go、Ruby、cURL/raw HTTP、C#、PHP
- AskUserQuestion が利用できない場合は、デフォルトで Python の例を表示し、「Python の例を表示しています。別の言語が必要な場合はお知らせください。」と注意してください。
-
サポートされていない言語が検出された場合 (Rust、Swift、C++、Elixir など):
curl/から cURL/raw HTTP の例を提案し、コミュニティ SDK が存在する可能性があることに注意してください- リファレンス実装として Python または TypeScript の例を示すことを申し出る
-
ユーザーが cURL/生の HTTP サンプルを必要とする場合、
curl/から読んでください。
言語固有の機能のサポート
| 言語 | ツールランナー | 管理対象エージェント | メモ |
|---|---|---|---|
| パイソン | はい (ベータ版) | はい (ベータ版) | フルサポート -@beta_toolデコレータ |
| タイプスクリプト | はい (ベータ版) | はい (ベータ版) | フルサポート -betaZodTool+ Zod |
| ジャワ | はい (ベータ版) | はい (ベータ版) | 注釈付きクラスでのベータ ツールの使用 |
| 行く | はい (ベータ版) | はい (ベータ版) | BetaToolRunnerのtoolrunnerパッケージ |
| ルビー | はい (ベータ版) | はい (ベータ版) | ベータ版のBaseTool+tool_runner |
| C# | いいえ | いいえ | 公式SDK |
| PHP | はい (ベータ版) | はい (ベータ版) | BetaRunnableTool+toolRunner() |
| cURL | 該当なし | はい (ベータ版) | 生の HTTP、SDK 機能なし |
マネージド エージェントのコード例: Python、TypeScript、Go、Ruby、PHP、Java、および cURL ({lang}/managed-agents/README.md、curl/managed-agents.md) については、専用の言語固有の README が提供されています。ご使用の言語の README と、言語に依存しないshared/managed-agents-*.mdコンセプト ファイルをお読みください。 エージェントは永続的です - 一度作成され、ID によって参照されます。agents.createから返されたエージェント ID を保存し、それを後続のすべてのsessions.createに渡します。リクエストパスでagents.createを呼び出さないでください。 Anthropic CLI は、バージョン管理された YAML からエージェントと環境を作成する便利な方法の 1 つです。その URL はshared/live-sources.mdにあります。必要なバインディングが README に記載されていない場合は、推測するのではなく、shared/live-sources.mdから関連するエントリを WebFetch してください。 C# は現在、管理対象エージェントをサポートしていません。 API に対して cURL スタイルの生の HTTP リクエストを使用します。
どの表面を使用すればよいですか?
シンプルから始めます。 デフォルトは、ニーズを満たす最もシンプルな層です。単一の API 呼び出しとワークフローは、ほとんどのユースケースを処理します。タスクが本当にオープンエンドのモデル駆動型探索を必要とする場合にのみ、エージェントに連絡します。
| 使用例 | 階層 | 推奨表面 | なぜ |
|---|---|---|---|
| 分類・要約・抽出・Q&A | 単一の LLM 呼び出し | クロード API | 1 つのリクエスト、1 つの応答 |
| バッチ処理または埋め込み | 単一の LLM 呼び出し | クロード API | 特殊なエンドポイント |
| コード制御ロジックによるマルチステップ パイプライン | ワークフロー | Claude API + ツールの使用 | ループを調整する |
| 独自のツールを使用したカスタム エージェント | エージェント | Claude API + ツールの使用 | 最大限の柔軟性 |
| ワークスペースを備えたサーバー管理のステートフル エージェント | エージェント | 管理対象エージェント | Anthropic はループを実行し、ツール実行サンドボックスをホストします。 |
| 永続化され、バージョン管理されたエージェント構成 | エージェント | 管理対象エージェント | エージェントは保存されたオブジェクトです。セッションはバージョンに固定されます |
| ファイル マウントを使用した長期実行マルチターン エージェント | エージェント | 管理対象エージェント | セッションごとのコンテナー、SSE イベント ストリーム、スキル + MCP |
注意: Anthropic でエージェント ループを実行し、* ツールが実行されるコンテナーをホストする場合、マネージド エージェントは正しい選択です。ファイル操作、bash、コード実行はすべてセッションごとのワークスペースで実行されます。自分でコンピューティングをホストするか、独自のカスタム ツール ランタイムを実行する場合は、Claude API + ツールの使用が正しい選択です。自動ループ処理にはツール ランナーを使用し、きめの細かい制御 (承認ゲート、カスタム ログ、条件付き実行) には手動ループを使用します。
サードパーティ プロバイダー (Amazon Bedrock、Google Vertex AI、Microsoft Foundry): マネージド エージェントは、Bedrock、Vertex、または Foundry では利用できません。サードパーティ プロバイダーを通じてデプロイする場合は、管理対象エージェントが推奨されるサーフェスを含むすべてのユースケースで Claude API + ツールの使用 を使用してください。
デシジョンツリー
What does your application need?
0. Are you deploying through Amazon Bedrock, Google Vertex AI, or Microsoft Foundry?
Yes -> Claude API (+ tool use for agents) - Managed Agents is 1P only.
No -> continue.
1. Single LLM call (classification, summarization, extraction, Q&A)
Claude API - one request, one response
2. Do you want Anthropic to run the agent loop and host a per-session
container where Claude executes tools (bash, file ops, code)?
Yes -> Managed Agents - server-managed sessions, persisted agent configs,
SSE event stream, Skills + MCP, file mounts.
Examples: "stateful coding agent with a workspace per task",
"long-running research agent that streams events to a UI",
"agent with persisted, versioned config used across many sessions"
3. Workflow (multi-step, code-orchestrated, with your own tools)
Claude API with tool use - you control the loop
4. Open-ended agent (model decides its own trajectory, your own tools, you host the compute)
Claude API agentic loop (maximum flexibility)エージェントを構築する必要がありますか?
エージェント層を選択する前に、次の 4 つの基準をすべて確認してください。
- 複雑さ - タスクは複数のステップに分かれており、事前に完全に指定するのは困難ですか? (例: 「このデザイン ドキュメントを PR に変換する」 vs. 「この PDF からタイトルを抽出する」)
- 価値 - コストとレイテンシーの増加に見合った結果が得られますか?
- 実行可能性 - クロードはこの種類のタスクを実行できますか?
- エラーのコスト - エラーを見つけて回復することはできますか? (テスト、レビュー、ロールバック)
これらのいずれかに対する答えが「いいえ」の場合は、より単純な層 (単一の呼び出しまたはワークフロー) に留まります。
建築
すべてはPOST /v1/messagesを通過します。ツールと出力制約は、個別の API ではなく、この単一のエンドポイントの機能です。
ユーザー定義ツール - ツールを (デコレーター、Zod スキーマ、または生の JSON 経由で) 定義すると、SDK のツール ランナーが API の呼び出し、関数の実行、および Claude が完了するまでのループを処理します。完全に制御するには、ループを手動で作成します。
サーバー側ツール - Anthropic のインフラストラクチャ上で実行される、Anthropic がホストするツール。コードの実行は完全にサーバー側で行われます (toolsで宣言し、Claude がコードを自動的に実行します)。コンピュータの使用は、サーバーホストまたはセルフホストで行うことができます。
構造化された出力 - メッセージ API 応答形式 (output_config.format) および/またはツール パラメーター検証 (strict: true) を制限します。推奨されるアプローチは、スキーマに対して応答を自動的に検証するclient.messages.parse()です。注: 古いoutput_formatパラメータは非推奨になりました。messages.create()でoutput_config: {format: {...}}を使用します。
サポートされるエンドポイント - バッチ (POST /v1/messages/batches)、ファイル (POST /v1/files)、トークンカウント、およびモデル (GET /v1/models、GET /v1/models/{id}- ライブ機能/コンテキストウィンドウ検出) は、メッセージ API リクエストにフィードされるか、メッセージ API リクエストをサポートします。
現在のモデル (キャッシュ: 2026-04-15)
| モデル | モデルID | コンテキスト | $/1M を入力 | 出力 $/1M |
|---|---|---|---|---|
| クロード作品4.7 | claude-opus-4-7 | 1M | $5.00 | $25.00 |
| クロード作品4.6 | claude-opus-4-6 | 1M | $5.00 | $25.00 |
| クロード・ソネット 4.6 | claude-sonnet-4-6 | 1M | $3.00 | $15.00 |
| クロード俳句 4.5 | claude-haiku-4-5 | 200K | $1.00 | $5.00 |
ユーザーが明示的に別のモデルを指定しない限り、常にclaude-opus-4-7を使用してください。 これは交渉の余地がありません。ユーザーが文字通り「ソネットを使用する」または「俳句を使用する」と指示しない限り、claude-sonnet-4-6、claude-sonnet-4-5、またはその他のモデルを使用しないでください。コストを理由にダウングレードしないでください。それはユーザーの決定であり、あなたの決定ではありません。
重要: 上の表の正確なモデル ID 文字列のみを使用してください。これらは現状のままで完全です。日付接尾辞を追加しないでください。 たとえば、claude-sonnet-4-5を使用し、claude-sonnet-4-5-20250514や、トレーニング データから思い出す可能性があるその他の日付接尾辞が付いているバリアントは決して使用しないでください。ユーザーが表にない古いモデル (「opus 4.5」、「sonnet 3.7」など) を要求した場合は、正確な ID についてshared/models.mdを読んでください。自分で作成しないでください。
注: 上記のモデル文字列のいずれかが見慣れないものである場合、それは想定内のことです。それは、それらがトレーニング データのカットオフ後にリリースされたことを意味します。これらは本物のモデルですのでご安心ください。私たちはあなたをそのように台無しにするつもりはありません。
ライブ機能ルックアップ: 上記のテーブルはキャッシュされています。ユーザーが「X のコンテキスト ウィンドウは何ですか」、「X はビジョン/思考/努力をサポートしていますか」、「どのモデルが Y をサポートしていますか」と尋ねたら、モデル API (client.models.retrieve(id)/client.models.list()) をクエリします。フィールド参照と機能フィルターの例については、shared/models.mdを参照してください。
思考と努力 (クイックリファレンス)
作品 4.7 - 適応的思考のみ:thinking: {type: "adaptive"}を使用します。thinking: {type: "enabled", budget_tokens: N}は Opus 4.7 で 400 を返します - アダプティブが唯一のオンモードです。{type: "disabled"}とthinkingを省略した場合は両方とも機能します。サンプリング パラメータ (temperature、top_p、top_k) も削除され、400 になります。完全な互換性を破る変更リストについては、「shared/model-migration.md-> Opus 4.7 への移行」を参照してください。
作品 4.6 - 適応的思考 (推奨):thinking: {type: "adaptive"}を使用します。クロードは、いつ、どのくらい考えるかを動的に決定します。budget_tokensは必要ありません -budget_tokensは Opus 4.6 および Sonnet 4.6 では非推奨となっているため、新しいコードには使用しないでください。適応的思考により、インターリーブ思考も自動的に有効になります (ベータ ヘッダーは必要ありません)。 ユーザーが「拡張思考」、「思考予算」、またはbudget_tokensを要求した場合、常に Opus 4.7 または 4.6 とthinking: {type: "adaptive"}を使用してください。思考のための固定トークン予算の概念は廃止され、適応的思考がそれに置き換えられます。新しい 4.6/4.7 コードにはbudget_tokensを使用しないでください。また、古いモデルに切り替えないでください。 段階的移行カーブアウト:budget_tokensは、Opus 4.6 および Sonnet 4.6 でも移行期のエスケープ ハッチとして機能します。既存のコードを移行していて、effortを調整する前にハード トークンの上限が必要な場合は、次を参照してください。shared/model-migration.md-> 移行用避難ハッチ。注: このカーブアウトは Opus 4.7 には適用されません - そこではbudget_tokensが完全に削除されています。
努力パラメータ (GA、ベータヘッダーなし):output_config: {effort: "low"|"medium"|"high"|"max"}(トップレベルではなく、output_config内) を介して思考の深さと全体的なトークン支出を制御します。デフォルトはhighです(省略した場合と同等)。maxは Opus 層のみです (Opus 4.6 以降 - Sonnet や Haiku ではありません)。 Opus 4.7 では、"xhigh"(highとmaxの間) が追加されています。これは、4.7 のほとんどのコーディングおよびエージェントの使用例に最適な設定であり、Claude Code のデフォルトです。ほとんどのインテリジェンスが重要な作業には、少なくともhighを使用します。オーパス 4.5、オーパス 4.6、オーパス 4.7、ソネット 4.6 で動作します。 Sonnet 4.5 / Haiku 4.5 ではエラーが発生します。 Opus 4.7 では、以前の Opus よりも労力が重要です。移行時に再調整してください。適応的思考と組み合わせて、コストと品質の最適なトレードオフを実現します。労力が少ないということは、ツールの呼び出しが少なく統合され、プリアンブルが少なく、簡潔な確認が行われることを意味します。多くの場合、highが品質とトークン効率のバランスをとるスイート スポットです。コストよりも正確さが重要な場合は、maxを使用します。サブエージェントまたは単純なタスクにはlowを使用します。
Opus 4.7 - デフォルトで省略された思考コンテンツ:thinkingブロックは引き続きストリーミングされますが、thinking: {type: "adaptive", display: "summarized"}(デフォルトは"omitted") でオプトインしない限り、テキストは空です。サイレント変更 - エラーはありません。推論をユーザーにストリーミングする場合、デフォルトでは出力の前に長い一時停止があるように見えます。"summarized"を設定して、目に見える進行状況を復元します。
タスク予算 (ベータ版、Opus 4.7):output_config: {task_budget: {type: "tokens", total: N}}は、完全なエージェント ループに必要なトークンの数をモデルに伝えます。実行中のカウントダウンが表示され、自己管理されます (最小 20,000、ベータ ヘッダーtask-budgets-2026-03-13)。モデルが認識しない応答ごとに強制される上限であるmax_tokensとは異なります。 「shared/model-migration.md-> タスクの予算」を参照してください。
ソネット 4.6: 適応的思考 (thinking: {type: "adaptive"}) をサポートします。budget_tokensは Sonnet 4.6 では非推奨になりました - 代わりに適応的思考を使用してください。
古いモデル (明示的に要求された場合のみ): ユーザーが特に Sonnet 4.5 または別の古いモデルを要求した場合は、thinking: {type: "enabled", budget_tokens: N}を使用します。budget_tokensはmax_tokens(最小 1024) 未満である必要があります。ユーザーがbudget_tokensに言及したからといって、決して古いモデルを選択しないでください。代わりに、適応的思考を備えた Opus 4.7 を使用してください。
圧縮 (クイックリファレンス)
ベータ、Opus 4.7、Opus 4.6、および Sonnet 4.6. 1M コンテキスト ウィンドウを超える可能性がある長時間の会話の場合は、サーバー側の圧縮を有効にします。 API は、トリガーのしきい値 (デフォルト: 150K トークン) に近づくと、以前のコンテキストを自動的に要約します。ベータヘッダーcompact-2026-01-12が必要です。
重要: 毎ターン、メッセージにresponse.content(テキストだけでなく) を追加します。応答内の圧縮ブロックは保存する必要があります。API はそれらを使用して、次のリクエストで圧縮された履歴を置き換えます。テキスト文字列のみを抽出して追加すると、圧縮状態が静かに失われます。
コード例については、{lang}/claude-api/README.md(圧縮セクション) を参照してください。shared/live-sources.mdの WebFetch 経由の完全なドキュメント。
プロンプト キャッシュ (クイック リファレンス)
プレフィックス一致。 プレフィックス内の任意のバイトが変更されると、それ以降のすべてが無効になります。レンダリング順序はtools->system->messagesです。安定したコンテンツ (凍結されたシステム プロンプト、決定論的なツール リスト) を最初に保持し、揮発性コンテンツ (タイムスタンプ、リクエストごとの ID、さまざまな質問) を最後のcache_controlブレークポイントの後に置きます。
トップレベルの自動キャッシュ (messages.create()のcache_control: {type: "ephemeral"}) は、きめ細かい配置が必要ない場合の最も簡単なオプションです。リクエストごとに最大 4 つのブレークポイント。キャッシュ可能なプレフィックスの最小値は ~1024 トークンです。これより短いプレフィックスは暗黙的にキャッシュされません。
usage.cache_read_input_tokensで確認します - 繰り返されたリクエスト全体でゼロの場合は、サイレント無効化機能が動作しています (システム プロンプトのdatetime.now()、未ソートの JSON、さまざまなツール セット)。
配置パターン、アーキテクチャ ガイダンス、およびサイレント インバリデータ監査チェックリストについては、shared/prompt-caching.mdを参照してください。言語固有の構文:{lang}/claude-api/README.md(プロンプト キャッシュ セクション)。
管理対象エージェント (ベータ版)
管理対象エージェント は 3 番目の面であり、Anthropic がホストするツールの実行を備えたサーバー管理のステートフル エージェントです。永続化され、バージョン管理されたエージェント構成 (POST /v1/agents) を作成し、それを参照するセッションを開始します。各セッションは、エージェントのワークスペースとしてコンテナをプロビジョニングします。そこで bash、ファイル操作、およびコード実行が実行されます。エージェント ループ自体は Anthropic のオーケストレーション レイヤー上で実行され、ツールを介してコンテナーに作用します。セッションはイベントをストリーミングします。メッセージとツールの結果を送り返します。
マネージド エージェントはファーストパーティのみです。 Amazon Bedrock、Google Vertex AI、または Microsoft Foundry では利用できません。サードパーティプロバイダーのエージェントの場合は、Claude API + ツールの使用を使用します。
必須フロー: エージェント (1 回) -> セッション (実行ごと)。model/system/toolsは、セッションではなくエージェント上でライブになります。完全な読書ガイド、ベータヘッダー、および落とし穴については、shared/managed-agents-overview.mdを参照してください。
ベータヘッダー:managed-agents-2026-04-01- SDK は、すべてのclient.beta.{agents,environments,sessions,vaults,memory_stores}.*呼び出しに対してこれを自動的に設定します。 Skills API はskills-2025-10-02を使用し、Files API はfiles-api-2025-04-14を使用しますが、/v1/skillsと/v1/files以外のエンドポイントにこれらを明示的に渡す必要はありません。
サブコマンド -/claude-api <subcommand>で直接呼び出します。
| サブコマンド | アクション |
|---|---|
managed-agents-onboard | 管理対象エージェントを最初からセットアップする手順をユーザーに説明します。 今すぐshared/managed-agents-onboarding.mdを読んで、そのインタビュー スクリプトに従ってください:メンタル モデル -> 知識または探索ブランチ -> テンプレート設定 -> セッション セットアップ -> コードの出力。要約せずにインタビューを実行してください。 |
読書ガイド:shared/managed-agents-overview.mdから始めて、次にトピックのshared/managed-agents-*.mdファイル (コア、環境、ツール、イベント、結果、マルチエージェント、Webhook、メモリ、クライアント パターン、オンボーディング、API リファレンス) を読んでください。 Python、TypeScript、Go、Ruby、PHP、および Java のコード例については、{lang}/managed-agents/README.mdを参照してください。 cURL については、curl/managed-agents.mdを読み取ります。 エージェントは永続的です - 一度作成され、ID によって参照されます。agents.createから返されたエージェント ID を保存し、後続のすべてのsessions.createに渡します。リクエストパスでagents.createを呼び出さないでください。 Anthropic CLI は、バージョン管理された YAML (shared/live-sources.mdの URL) からエージェントと環境を作成する便利な方法の 1 つです。必要なバインディングが言語の README に示されていない場合は、推測するのではなく、shared/live-sources.mdから関連するエントリを WebFetch してください。 C# は現在、管理対象エージェントをサポートしていません。curl/managed-agents.mdの生の HTTP を参照として使用してください。
ユーザーが管理対象エージェントを最初からセットアップしたい場合 (例: 「開始方法」、「エージェントの作成手順を説明する」、「新しいエージェントをセットアップする」):shared/managed-agents-onboarding.mdを読み取り、そのインタビューを実行します。これは、managed-agents-onboardサブコマンドと同じフローです。
ユーザーが「X のクライアント コードをどのように記述すればよいか」と尋ねた場合:shared/managed-agents-client-patterns.mdに到達 - ロスレス ストリームの再接続、processed_atキューに入れられた/処理されたゲート、割り込み、tool_confirmationラウンドトリップ、正しいアイドル/終了したブレーク ゲート、アイドル後のステータス競合、ストリーム優先順序付け、ファイル マウントの問題、カスタム ツールによるホスト側の資格情報の保持などをカバーします。
読書ガイド
言語を検出したら、ユーザーのニーズに基づいて関連ファイルを読み取ります。
クイックタスクリファレンス
単一テキストの分類/要約/抽出/Q&A:
-> 読み取り専用{lang}/claude-api/README.md
チャット UI またはリアルタイム応答表示:
->{lang}/claude-api/README.md+{lang}/claude-api/streaming.mdを読む
長時間実行される会話 (コンテキスト ウィンドウを超える可能性があります):
->{lang}/claude-api/README.mdを読む - 圧縮セクションを参照
新しいモデル (Opus 4.7 / Opus 4.6 / Sonnet 4.6) への移行、または廃止されたモデルの置き換え:
->shared/model-migration.mdを読む
プロンプト キャッシュ / キャッシュの最適化 / 「キャッシュ ヒット率が低いのはなぜですか」:
->shared/prompt-caching.md+{lang}/claude-api/README.md(プロンプト キャッシュ セクション) を読む
関数の呼び出し / ツールの使用 / エージェント:
->{lang}/claude-api/README.md+shared/tool-use-concepts.md+{lang}/claude-api/tool-use.mdを読む
エージェントの設計 (ツール サーフェス、コンテキスト管理、キャッシュ戦略):
->shared/agent-design.mdを読む
バッチ処理 (遅延の影響を受けない):
->{lang}/claude-api/README.md+{lang}/claude-api/batches.mdを読む
複数のリクエストにわたるファイルのアップロード:
->{lang}/claude-api/README.md+{lang}/claude-api/files-api.mdを読む
管理対象エージェント (ワークスペースを備えたサーバー管理のステートフル エージェント):
->shared/managed-agents-overview.md+ 残りのshared/managed-agents-*.mdファイルを読み取ります。 Python、TypeScript、Go、Ruby、PHP、および Java のコード例については、{lang}/managed-agents/README.mdを参照してください。 cURL については、curl/managed-agents.mdを読み取ります。 エージェントは永続的です - 一度作成され、ID によって参照されます。agents.createから返されたエージェント ID を保存し、後続のすべてのsessions.createに渡します。リクエストパスでagents.createを呼び出さないでください。 Anthropic CLI は、バージョン管理された YAML (shared/live-sources.mdの URL) からエージェントと環境を作成する便利な方法の 1 つです。必要なバインディングが言語の README に示されていない場合は、推測するのではなく、shared/live-sources.mdから関連するエントリを WebFetch してください。 C# は現在、管理対象エージェントをサポートしていません。curl/managed-agents.mdの生の HTTP を参照として使用してください。
Claude API (完全なファイル リファレンス)
言語固有の Claude API フォルダー ({language}/claude-api/) を読み取ります。
{language}/claude-api/README.md- 最初にお読みください。 インストール、クイック スタート、一般的なパターン、エラー処理。shared/tool-use-concepts.md- ユーザーが関数呼び出し、コード実行、メモリ、または構造化出力を必要とするときに読み取ります。概念的な基礎をカバーします。shared/agent-design.md- エージェントを設計するときに読んでください: bash と専用ツール、プログラムによるツールの呼び出し、ツールの検索/スキル、コンテキスト編集と圧縮とメモリ、キャッシュの原則。{language}/claude-api/tool-use.md- 言語固有のツール使用コード例 (ツール ランナー、手動ループ、コード実行、メモリ、構造化出力) についてお読みください。{language}/claude-api/streaming.md- 応答を段階的に表示するチャット UI またはインターフェイスを構築するときに読み取ります。{language}/claude-api/batches.md- 多くのリクエストをオフラインで処理するときに読み取ります (遅延に敏感ではありません)。 50% のコストで非同期的に実行されます。{language}/claude-api/files-api.md- 再アップロードせずに複数のリクエストにわたって同じファイルを送信するときに読み取ります。shared/prompt-caching.md- プロンプト キャッシュを追加または最適化するときに読み取ります。プレフィックス安定性の設計、ブレークポイントの配置、サイレントにキャッシュを無効にするアンチパターンについて説明します。shared/error-codes.md- HTTP エラーをデバッグするとき、またはエラー処理を実装するときに読み取ります。shared/model-migration.md- 新しいモデルへのアップグレード、廃止されたモデルの交換、またはbudget_tokens/ プレフィル パターンを現在の API に変換するときに読み取ります。shared/live-sources.md- 最新の公式ドキュメントを取得するための WebFetch URL。
注意: Java、Go、Ruby、C#、PHP、および cURL の場合、これらにはすべての基本をカバーする 1 つのファイルがあります。そのファイルに加えて、必要に応じてshared/tool-use-concepts.mdおよびshared/error-codes.mdを読み取ります。
注意: 管理対象エージェント ファイルのリファレンスについては、上記の## Managed Agents (Beta)セクションを参照してください。すべてのshared/managed-agents-*.mdファイルと言語固有の README がリストされています。
WebFetch を使用する場合
次の場合に WebFetch を使用して最新のドキュメントを取得します。
- ユーザーは「最新」または「現在の」情報を要求します
- キャッシュされたデータが間違っているようです
- ここで説明されていない機能についてユーザーが質問する
ライブ ドキュメントの URL はshared/live-sources.mdにあります。
よくある落とし穴
- ファイルまたはコンテンツを API に渡すときに入力を切り捨てないでください。コンテンツが長すぎてコンテキスト ウィンドウに収まらない場合は、黙って切り詰めるのではなく、ユーザーに通知し、オプション (チャンク化、要約など) について話し合ってください。
- Opus 4.7 の考え方: アダプティブのみ。 Opus 4.7 では、
thinking: {type: "enabled", budget_tokens: N}は 400 を返します。budget_tokensはそこで完全に削除されます (temperature、top_p、top_kとともに)。thinking: {type: "adaptive"}を使用してください。 - Opus 4.6 / Sonnet 4.6 の考え方:
thinking: {type: "adaptive"}を使用します - 新しい 4.6 コードにはbudget_tokensを使用しないでください (Opus 4.6 と Sonnet 4.6 の両方で非推奨です。既存のコードの段階的な移行については、shared/model-migration.mdの移行的エスケープ ハッチを参照してください。このカーブアウトは Opus 4.7 には適用されないことに注意してください)。古いモデルの場合、budget_tokensはmax_tokens(最小 1024) 未満である必要があります。これを間違えるとエラーがスローされます。 - 4.6/4.7 ファミリーのプリフィルが削除されました: アシスタント メッセージ プリフィル (最終アシスタント ターン プリフィル) は、Opus 4.6、Opus 4.7、および Sonnet 4.6 で 400 エラーを返します。代わりに、構造化出力 (
output_config.format) またはシステム プロンプト命令を使用して、応答形式を制御します。 - 編集前に移行スコープを確認してください: ユーザーが特定のファイル、ディレクトリ、またはファイル リストを指定せずにコードを新しいクロード モデルに移行するように要求した場合は、どのスコープを最初に適用するかを尋ねます (作業ディレクトリ全体、特定のサブディレクトリ、または特定のファイルのセット)。ユーザーが確認するまで編集を開始しないでください。 「コードベースを移行する」、「プロジェクトを X に移行する」、「Sonnet 4.6 にアップグレードする」、または単なる「Opus 4.7 に移行する」などの命令的な表現は まだ曖昧です - 何をすべきかは教えてくれますが、どこで行うべきかは教えてくれないので、尋ねてください。プロンプトが正確なファイル、特定のディレクトリ、または明示的なファイル リスト (「
app.pyを移行する」、「services/の下にあるすべてを移行する」、「a.pyおよびb.pyを更新する」) を指定する場合にのみ、質問せずに続行します。shared/model-migration.mdステップ 0 を参照してください。 max_tokensのデフォルト:max_tokensをローボールにしないでください。キャップに達すると、思考の途中で出力が切り捨てられ、再試行が必要になります。非ストリーミング要求の場合、デフォルトは~16000です (応答は SDK HTTP タイムアウト内に保持されます)。ストリーミング リクエストの場合、デフォルトは~64000です (タイムアウトは問題ではないため、モデルに余裕を与えてください)。分類 (~256)、コストの上限、または意図的に生産量を減らすなど、明確な理由がある場合にのみ低くしてください。- 128K の出力トークン: Opus 4.6 および Opus 4.7 は最大 128K
max_tokensをサポートしますが、SDK では HTTP タイムアウトを回避するために大きな値のストリーミングが必要です。.stream()は.get_final_message()/.finalMessage()と一緒に使用します。 - ツール呼び出しの JSON 解析 (4.6/4.7 ファミリ): Opus 4.6、Opus 4.7、および Sonnet 4.6 は、ツール呼び出し
inputフィールドで異なる JSON 文字列エスケープを生成する場合があります (例: Unicode またはスラッシュ エスケープ)。ツール入力は常にjson.loads()/JSON.parse()で解析します。シリアル化された入力に対して生の文字列のマッチングを行わないでください。 - 構造化出力 (すべてのモデル):
messages.create()の非推奨のoutput_formatパラメータの代わりにoutput_config: {format: {...}}を使用します。これは一般的な API の変更であり、4.6 固有の変更ではありません。 - SDK 機能を再実装しないでください。 SDK は高レベルのヘルパーを提供します。最初から構築するのではなく、それらを使用してください。具体的には、
.on()イベントをnew Promise()でラップする代わりに、stream.finalMessage()を使用します。文字列一致エラー メッセージの代わりに、型指定された例外クラス (Anthropic.RateLimitErrorなど) を使用します。同等のインターフェイスを再定義する代わりに、SDK タイプ (Anthropic.MessageParam、Anthropic.Tool、Anthropic.Messageなど) を使用します。 - SDK データ構造にはカスタム タイプを定義しないでください。 SDK はすべての API オブジェクトのタイプをエクスポートします。メッセージには
Anthropic.MessageParam、ツール定義にはAnthropic.Tool、ツールの結果にはAnthropic.ToolUseBlock/Anthropic.ToolResultBlockParam、応答にはAnthropic.Messageを使用します。独自のinterface ChatMessage { role: string; content: unknown }を定義すると、SDK がすでに提供しているものと重複するため、タイプ セーフが失われます。 - レポートとドキュメントの出力: レポート、ドキュメント、またはビジュアライゼーションを作成するタスクの場合、コード実行サンドボックスには
python-docx、python-pptx、matplotlib、pillow、およびpypdfがプリインストールされています。 Claude は、フォーマットされたファイル (DOCX、PDF、チャート) を生成し、Files API 経由で返すことができます。プレーンな標準出力テキストではなく、「レポート」または「ドキュメント」タイプのリクエストの場合にこれを検討してください。
リソースファイル
ライセンス.txt
バイナリリソース
csharp/claude-api.md
バイナリリソース
カール/example.md
バイナリリソース
カール/管理対象エージェント.md
curl/managed-agents.md をダウンロード
バイナリリソース
go/claude-api.md
バイナリリソース
go/管理対象エージェント/README.md
go/managed-agents/README.md をダウンロード
バイナリリソース
java/claude-api.md
バイナリリソース
java/管理対象エージェント/README.md
java/managed-agents/README.md をダウンロード
バイナリリソース
php/claude-api.md
バイナリリソース
php/managed-agents/README.md
php/managed-agents/README.md をダウンロード
バイナリリソース
python/claude-api/README.md
Python/claude-api/README.md をダウンロード
バイナリリソース
python/claude-api/batches.md
Python/claude-api/batches.md をダウンロード
# Message Batches API — Python
The Batches API (`POST /v1/messages/batches`) processes Messages API requests asynchronously at 50% of standard prices.
## Key Facts
- Up to 100,000 requests or 256 MB per batch
- Most batches complete within 1 hour; maximum 24 hours
- Results available for 29 days after creation
- 50% cost reduction on all token usage
- All Messages API features supported (vision, tools, caching, etc.)
---
## Create a Batch
```python
輸入人間
anthropic.types.message_create_params から import MessageCreateParamsNonStreaming
anthropic.types.messages.batch_create_params インポート リクエストから
client = anthropic.Anthropic()
message_batch = client.messages.batches.create(
リクエスト=[
リクエスト(
カスタムid="リクエスト-1",
params=MessageCreateParamsNonStreaming(
モデル = "クロード-作品-4-7",
max_tokens=16000、
messages=[{"role": "user", "content": "気候変動の影響の概要"}]
)
)、
リクエスト(
カスタムid="リクエスト-2",
params=MessageCreateParamsNonStreaming(
モデル = "クロード-作品-4-7",
max_tokens=16000、
messages=[{"role": "user", "content": "量子コンピューティングの基礎を説明する"}]
)
)、
】
)
print(f"バッチID:{message_batch.id}")
print(f"ステータス: {message_batch.processing_status}")Poll for Completion
インポート時間
True の場合:
バッチ = client.messages.batches.retrieve(message_batch.id)
バッチ.processing_status == "終了"の場合:
休憩
print(f"ステータス: {batch.processing_status}、処理中: {batch.request_counts.processing}")
時間.睡眠(60)
print("バッチ完了!")
print(f"成功しました: {batch.request_counts.succeeded}")
print(f"エラー: {batch.request_counts.errored}")Retrieve Results
Note: Examples below use match/case syntax, requiring Python 3.10+. For earlier versions, use if/elif chains instead.
client.messages.batches.results(message_batch.id) の結果:
一致結果.結果.タイプ:
ケース「成功」:
msg = 結果.結果.メッセージ
text = next((b.type == "text"の場合、msg.contentのbのb.text), "")
print(f"[{result.custom_id}] {text[:100]}")
ケース「エラー」:
if result.result.error.type == "invalid_request":
print(f"[{result.custom_id}] 検証エラー - リクエストを修正して再試行してください")
それ以外の場合:
print(f"[{result.custom_id}] サーバー エラー - 再試行しても安全です")
ケースが「キャンセルされました」:
print(f"[{result.custom_id}] キャンセルされました")
ケース「期限切れ」:
print(f"[{result.custom_id}] 期限切れ - 再送信")Cancel a Batch
キャンセルされました = client.messages.batches.cancel(message_batch.id)
print(f"ステータス: {cancelled.processing_status}") # "キャンセル中"Batch with Prompt Caching
共有システム = [
{"type": "text", "text": "あなたは文学アナリストです。"},
{
"タイプ": "テキスト",
"text":large_document_text、#すべてのリクエスト間で共有されます
"cache_control": {"type": "ephemeral"}
}
】
message_batch = client.messages.batches.create(
リクエスト=[
リクエスト(
Custom_id=f"分析-{i}",
params=MessageCreateParamsNonStreaming(
モデル = "クロード-作品-4-7",
max_tokens=16000、
システム=共有システム、
メッセージ=[{"役割": "ユーザー", "コンテンツ": 質問}]
)
)
for i、enumerate(questions) の質問
】
)Full End-to-End Example
輸入人間
インポート時間
anthropic.types.message_create_params から import MessageCreateParamsNonStreaming
anthropic.types.messages.batch_create_params インポート リクエストから
client = anthropic.Anthropic()
# 1. リクエストの準備
分類する項目 = [
「製品の品質は素晴らしいです!」、
「ひどい顧客サービス、二度とありません。」、
「大丈夫、特に何もないよ。」
】
リクエスト = [
リクエスト(
Custom_id=f"classify-{i}",
params=MessageCreateParamsNonStreaming(
モデル = "クロード-俳句-4-5",
max_tokens=50、
メッセージ=[{
"ロール": "ユーザー",
"content": f"ポジティブ/ネガティブ/ニュートラルに分類 (1 単語): {text}"
}]
)
)
for i、enumerate(items_to_classify) のテキスト
】
# 2. バッチの作成
バッチ = client.messages.batches.create(requests=リクエスト)
print(f"作成されたバッチ: {batch.id}")
# 3. 完了を待ちます
True の場合:
バッチ = client.messages.batches.retrieve(batch.id)
バッチ.processing_status == "終了"の場合:
休憩
時間.睡眠(10)
# 4. 結果を収集する
結果 = {}
client.messages.batches.results(batch.id) の結果の場合:
result.result.type == "成功"の場合:
msg = 結果.結果.メッセージ
results[result.custom_id] = next((b.type == "text"の場合、msg.contentのbのb.text), "")
Custom_id の場合、sorted(results.items()) での分類:
print(f"{custom_id}: {classification}")
### python/claude-api/files-api.md
[Python/claude-api/files-api.md をダウンロード](/skills/claude-api/python/claude-api/files-api.md)
```markdown
# Files API — Python
The Files API uploads files for use in Messages API requests. Reference files via `file_id` in content blocks, avoiding re-uploads across multiple API calls.
**Beta:** Pass `betas=["files-api-2025-04-14"]` in your API calls (the SDK sets the required header automatically).
## Key Facts
- Maximum file size: 500 MB
- Total storage: 100 GB per organization
- Files persist until deleted
- File operations (upload, list, delete) are free; content used in messages is billed as input tokens
- Not available on Amazon Bedrock or Google Vertex AI
---
## Upload a File
```python
輸入人間
client = anthropic.Anthropic()
アップロード = client.beta.files.upload(
file=("レポート.pdf", open("レポート.pdf", "rb"), "アプリケーション/pdf"),
)
print(f"ファイルID:{uploaded.id}")
print(f"サイズ: {uploaded.size_bytes} バイト")Use a File in Messages
PDF / Text Document
応答 = client.beta.messages.create(
モデル = "クロード-作品-4-7",
max_tokens=16000、
メッセージ=[{
"ロール": "ユーザー",
「コンテンツ」: [
{"type": "text", "text": "このレポートの主な調査結果を要約します。"},
{
"タイプ": "ドキュメント",
"ソース": {"タイプ": "ファイル", "file_id": アップロードされた.id},
"title": "第 4 四半期レポート"、# オプション
"citations": {"enabled": True} # オプション、引用を有効にします
}
】
}]、
betas=["files-api-2025-04-14"],
)
response.content のブロックの場合:
block.type == "テキスト"の場合:
print(ブロック.テキスト)Image
image_file = client.beta.files.upload(
file=("photo.png", open("photo.png", "rb"), "image/png"),
)
応答 = client.beta.messages.create(
モデル = "クロード-作品-4-7",
max_tokens=16000、
メッセージ=[{
"ロール": "ユーザー",
「コンテンツ」: [
{"type": "text", "text": "この画像には何が入っていますか?"},
{
"タイプ": "画像",
"ソース": {"タイプ": "ファイル", "ファイルID": 画像ファイルID}
}
】
}]、
betas=["files-api-2025-04-14"],
)Manage Files
List Files
ファイル = client.beta.files.list()
files.data の f の場合:
print(f"{f.id}: {f.filename} ({f.size_bytes} バイト)")Get File Metadata
file_info = client.beta.files.retrieve_metadata("file_011CNha8iCJcU1wXNR6q4V8w")
print(f"ファイル名: {file_info.filename}")
print(f"MIMEタイプ: {file_info.mime_type}")Delete a File
client.beta.files.delete("file_011CNha8iCJcU1wXNR6q4V8w")Download a File
Only files created by the code execution tool or skills can be downloaded (not user-uploaded files).
file_content = client.beta.files.download("file_011CNha8iCJcU1wXNR6q4V8w")
file_content.write_to_file("output.txt")Full End-to-End Example
Upload a document once, ask multiple questions about it:
輸入人間
client = anthropic.Anthropic()
# 1.一度アップロードする
アップロード = client.beta.files.upload(
file=("contract.pdf", open("contract.pdf", "rb"), "application/pdf"),
)
print(f"アップロード済み: {uploaded.id}")
# 2. 同じ file_id を使用して複数の質問をする
質問 = [
「重要な利用規約は何ですか?」、
「解約条項とは何ですか?」
"支払いスケジュールを要約します。",
】
質問中の質問について:
応答 = client.beta.messages.create(
モデル = "クロード-作品-4-7",
max_tokens=16000、
メッセージ=[{
"ロール": "ユーザー",
「コンテンツ」: [
{"タイプ": "テキスト", "テキスト": 質問},
{
"タイプ": "ドキュメント",
"ソース": {"タイプ": "ファイル", "ファイルID": アップロードされた.ID}
}
】
}]、
betas=["files-api-2025-04-14"],
)
print(f"\nQ: {question}")
text = next((response.contentのbのb.text if b.type == "text"), "")
print(f"A: {text[:200]}")
# 3. 終わったら片付ける
client.beta.files.delete(uploaded.id)
### python/claude-api/streaming.md
[Python/claude-api/streaming.md をダウンロード](/skills/claude-api/python/claude-api/streaming.md)
```markdown
# Streaming — Python
## Quick Start
```python
client.messages.stream( を使用)
モデル = "クロード-作品-4-7",
max_tokens=64000、
メッセージ=[{"役割": "ユーザー", "コンテンツ": "ストーリーを書く"}]
) ストリームとして:
stream.text_stream 内のテキストの場合:
print(text, end="", flash=True)Async
async_client.messages.stream( との非同期)
モデル = "クロード-作品-4-7",
max_tokens=64000、
メッセージ=[{"役割": "ユーザー", "コンテンツ": "ストーリーを書く"}]
) ストリームとして:
stream.text_stream 内のテキストの非同期:
print(text, end="", flash=True)Handling Different Content Types
Claude may return text, thinking blocks, or tool use. Handle each appropriately:
Opus 4.7 / Opus 4.6: Use thinking: {type: "adaptive"}. On older models, use thinking: {type: "enabled", budget_tokens: N} instead.
client.messages.stream( を使用)
モデル = "クロード-作品-4-7",
max_tokens=64000、
Thinking={"タイプ": "アダプティブ"},
メッセージ=[{"役割": "ユーザー", "コンテンツ": "この問題を分析する"}]
) ストリームとして:
ストリーム内のイベントの場合:
イベントタイプ == "content_block_start" の場合:
ifevent.content_block.type == "思考":
print("\n[考え中...]")
elifevent.content_block.type == "テキスト":
print("\n[応答:]")
elif イベント.タイプ == "content_block_delta":
ifevent.delta.type == " Thinking_delta ":
print(event.delta. Thinking, end="", flash=True)
elifevent.delta.type == "text_delta":
print(event.delta.text, end="", flash=True)Streaming with Tool Use
The Python tool runner currently returns complete messages. Use streaming for individual API calls within a manual loop if you need per-token streaming with tools:
client.messages.stream( を使用)
モデル = "クロード-作品-4-7",
max_tokens=64000、
ツール=道具、
メッセージ=メッセージ
) ストリームとして:
stream.text_stream 内のテキストの場合:
print(text, end="", flash=True)
応答 = stream.get_final_message()
# response.stop_reason == "tool_use" の場合、ツールの実行を続行します。Getting the Final Message
client.messages.stream( を使用)
モデル = "クロード-作品-4-7",
max_tokens=64000、
メッセージ=[{"役割": "ユーザー", "コンテンツ": "こんにちは"}]
) ストリームとして:
stream.text_stream 内のテキストの場合:
print(text, end="", flash=True)
# ストリーミング後に完全なメッセージを取得する
Final_message = stream.get_final_message()
print(f"\n\n使用されたトークン: {final_message.usage.output_tokens}")Streaming with Progress Updates
def stream_with_progress(client, **kwargs):
"""進捗状況の更新を含む応答をストリーミングします。"""
total_tokens = 0
コンテンツパーツ = []
client.messages.stream(**kwargs) をストリームとして使用:
ストリーム内のイベントの場合:
イベントタイプ == "content_block_delta" の場合:
イベント.デルタ.タイプ == "テキストデルタ"の場合:
テキスト = イベント.デルタ.テキスト
content_parts.append(テキスト)
print(text, end="", flash=True)
elif イベント.タイプ == "message_delta":
event.usage とevent.usage.output_tokens が None でない場合:
total_tokens = イベント.使用量.出力トークン
Final_message = stream.get_final_message()
print(f"\n\n[使用されたトークン: {total_tokens}]")
return "".join(content_parts)Error Handling in Streams
試してみてください:
client.messages.stream( を使用)
モデル = "クロード-作品-4-7",
max_tokens=64000、
メッセージ=[{"役割": "ユーザー", "コンテンツ": "ストーリーを書く"}]
) ストリームとして:
stream.text_stream 内のテキストの場合:
print(text, end="", flash=True)
anthropic.APIConnectionError を除く:
print("\n接続が失われました。再試行してください。")
anthropic.RateLimitError を除く:
print("\nレートが制限されています。待ってから再試行してください。")
e としての anthropic.APIStatusError を除く:
print(f"\nAPI エラー: {e.status_code}")Stream Event Types
| Event Type | Description | When it fires |
|---|---|---|
message_start | Contains message metadata | Once at the beginning |
content_block_start | New content block beginning | When a text/tool_use block starts |
content_block_delta | Incremental content update | For each token/chunk |
content_block_stop | Content block complete | When a block finishes |
message_delta | Message-level updates | Contains stop_reason, usage |
message_stop | Message complete | Once at the end |
Best Practices
- Always flush output — Use
flush=Trueto show tokens immediately - Handle partial responses — If the stream is interrupted, you may have incomplete content
- Track token usage — The
message_deltaevent contains usage information - Use timeouts — Set appropriate timeouts for your application
- Default to streaming — Use
.get_final_message()to get the complete response even when streaming, giving you timeout protection without needing to handle individual events
### python/claude-api/tool-use.md
[Python/claude-api/tool-use.md をダウンロード](/skills/claude-api/python/claude-api/tool-use.md)
_バイナリリソース_
### python/管理対象エージェント/README.md
[Python/管理対象エージェント/README.md をダウンロード](/skills/claude-api/python/管理対象エージェント/README.md)
_バイナリリソース_
### ルビー/クロード-api.md
[ruby/claude-api.md をダウンロード](/skills/claude-api/ruby/claude-api.md)
```markdown
# Claude API — Ruby
> **Note:** The Ruby SDK supports the Claude API. A tool runner is available in beta via `client.beta.messages.tool_runner()`. Agent SDK is not yet available for Ruby.
## Installation
```bash
gem インストール anthropicClient Initialization
「人間性」が必要
# デフォルト (ANTHROPIC_API_KEY 環境変数を使用)
client = Anthropic::Client.new
# 明示的な API キー
client = Anthropic::Client.new(api_key: "あなたの API キー")Basic Message Request
メッセージ = client.messages.create(
モデル::"クロード-作品-4-7",
max_tokens: 16000、
メッセージ: [
{ 役割: "ユーザー"、内容: 「フランスの首都はどこですか?」 }
】
)
# content は多態性ブロック オブジェクト (TextBlock、ThinkingBlock、
# ツール使用ブロック、...)。.type はシンボルです。「text」ではなく、:text と比較してください。
# .text は、TextBlock 以外のエントリに対して NoMethodError を発生させます。
message.content.each は |block| を実行します。
block.type ==:text の場合、block.text を配置します
終わりStreaming
ストリーム = client.messages.stream(
モデル::"クロード-作品-4-7",
max_tokens: 64000、
メッセージ: [{ 役割: "ユーザー"、コンテンツ: "俳句を書く" }]
)
stream.text.each { |text|印刷(テキスト) }Tool Use
The Ruby SDK supports tool use via raw JSON schema definitions and also provides a beta tool runner for automatic tool execution.
Tool Runner (Beta)
クラス GetWeatherInput < Anthropic::BaseModel
必須:location, String, doc: "都市と州、例: カリフォルニア州サンフランシスコ"
終わり
クラス GetWeather < Anthropic::BaseTool
ドキュメント「場所の現在の天気を取得する」
input_schema GetWeatherInput
デフォルト呼び出し(入力)
「#{input.location}の天気は晴れ、気温は72°Fです。」
終わり
終わり
client.beta.messages.tool_runner(
モデル::「クロード作品-4-7」、
max_tokens: 16000、
ツール: [GetWeather.new]、
メッセージ: [{ 役割: "ユーザー"、コンテンツ: "サンフランシスコの天気はどうですか?" }]
).each_message は |message| を実行します。
message.content を挿入します
終わりManual Loop
See the shared tool use concepts for the tool definition format and agentic loop pattern.
Prompt Caching
system_: (trailing underscore — avoids shadowing Kernel#system) takes an array of text blocks; set cache_control on the last block. Plain hashes work via the OrHash type alias. For placement patterns and the silent-invalidator audit checklist, see shared/prompt-caching.md.
メッセージ = client.messages.create(
モデル::"クロード-作品-4-7",
max_tokens: 16000、
システム_: [
{ タイプ: "テキスト"、テキスト: long_system_prompt、キャッシュ_コントロール: { タイプ: "一時的" } }
]、
メッセージ: [{ 役割: "ユーザー"、コンテンツ: "重要なポイントをまとめます" }]
)For 1-hour TTL: cache_control: { type: "ephemeral", ttl: "1h" }. There's also a top-level cache_control: on messages.create that auto-places on the last cacheable block.
Verify hits via message.usage.cache_creation_input_tokens / message.usage.cache_read_input_tokens.
### Ruby/管理対象エージェント/README.md
[ruby/管理対象エージェント/README.md をダウンロード](/skills/claude-api/ruby/管理対象エージェント/README.md)
_バイナリリソース_
### 共有/エージェントデザイン.md
[shared/agent-design.md をダウンロード](/skills/claude-api/shared/agent-design.md)
_バイナリリソース_
### 共有/エラーコード.md
[shared/error-codes.md をダウンロード](/skills/claude-api/shared/error-codes.md)
_バイナリリソース_
### 共有/ライブソース.md
[shared/live-sources.md をダウンロード](/skills/claude-api/shared/live-sources.md)
_バイナリリソース_
### 共有/管理対象エージェント-api-reference.md
[shared/managed-agents-api-reference.md をダウンロード](/skills/claude-api/shared/managed-agents-api-reference.md)
_バイナリリソース_
### 共有/管理対象エージェント-クライアント-パターン.md
[shared/managed-agents-client-patterns.md をダウンロード](/skills/claude-api/shared/managed-agents-client-patterns.md)
_バイナリリソース_
### 共有/管理対象エージェント-core.md
[shared/managed-agents-core.md をダウンロード](/skills/claude-api/shared/managed-agents-core.md)
_バイナリリソース_
### 共有/管理対象エージェント環境.md
[shared/managed-agents-environments.md をダウンロード](/skills/claude-api/shared/managed-agents-environments.md)
_バイナリリソース_
### 共有/管理対象エージェント-イベント.md
[shared/managed-agents-events.md をダウンロード](/skills/claude-api/shared/managed-agents-events.md)
_バイナリリソース_
### 共有/管理対象エージェント-メモリ.md
[shared/managed-agents-memory.md をダウンロード](/skills/claude-api/shared/managed-agents-memory.md)
_バイナリリソース_
### 共有/管理対象エージェント-multiagent.md
[shared/managed-agents-multiagent.md をダウンロード](/skills/claude-api/shared/managed-agents-multiagent.md)
_バイナリリソース_
### 共有/管理対象エージェント-onboarding.md
[shared/managed-agents-onboarding.md をダウンロード](/skills/claude-api/shared/managed-agents-onboarding.md)
_バイナリリソース_
### 共有/管理対象エージェント-結果.md
[shared/managed-agents-outcomes.md をダウンロード](/skills/claude-api/shared/managed-agents-outcomes.md)
_バイナリリソース_
### 共有/管理対象エージェントの概要.md
[shared/managed-agents-overview.md をダウンロード](/skills/claude-api/shared/managed-agents-overview.md)
_バイナリリソース_
### 共有/管理対象エージェント-ツール.md
[shared/managed-agents-tools.md をダウンロード](/skills/claude-api/shared/managed-agents-tools.md)
_バイナリリソース_
### 共有/管理エージェント-webhooks.md
[shared/managed-agents-webhooks.md をダウンロード](/skills/claude-api/shared/managed-agents-webhooks.md)
```markdown
# Managed Agents — Webhooks
Anthropic can POST to your HTTPS endpoint when a Managed Agents resource changes state — an alternative to holding an SSE stream or polling. Payloads are **thin** (event type + resource IDs only); on receipt, fetch the resource for current state. Every delivery is HMAC-signed.
> **Direction matters.** This page covers *Anthropic → you* notifications about session/vault state. It does **not** cover *third-party → you* webhooks that *trigger* a session (e.g. a GitHub push handler that calls `sessions.create()`) — that's ordinary application code on your side with no Anthropic-specific wire format.
---
## Register an endpoint (Console only)
Console → **Manage → Webhooks**. There is no programmatic endpoint-management API yet. Secret rotation is supported from the same page.
| Field | Constraint |
|---|---|
| URL | HTTPS on port 443, publicly resolvable hostname |
| Event types | Subscribe per `data.type` — you only receive subscribed types (plus test events) |
| Signing secret | `whsec_`-prefixed, 32 bytes, **shown once at creation** — store it |
---
## Verify the signature
Every delivery is HMAC-signed. **Use the SDK's `client.beta.webhooks.unwrap()`** — it verifies the signature, rejects payloads more than ~5 minutes old, and returns the parsed event. It reads the `whsec_` secret from `ANTHROPIC_WEBHOOK_SIGNING_KEY`.
```python
輸入人間
フラスコからのインポート Flask、リクエスト
client = anthropic.Anthropic() # 環境から ANTHROPIC_WEBHOOK_SIGNING_KEY を読み取ります
app = Flask(__name__)
@app.route("/webhook",methods=["POST"])
def webhook():
試してみてください:
イベント = client.beta.webhooks.unwrap(
request.get_data(as_text=True),
headers=dict(request.headers),
)
例外を除く:
「無効な署名」を返します、400
ifevent.id in seen_event_ids: 重複排除再試行回数 — ID は配信ごとではなくイベントごとです
""を返します、204
seen_event_ids.add(イベント.id)
一致event.data.type:
ケース「session.status_idled」:
session = client.beta.sessions.retrieve(event.data.id)
通知ユーザー(セッション)
ケース「vault_credential.refresh_failed」:
アラート_オンコール(event.data.id)
""を返します、204Pass the raw request body to unwrap() — frameworks that re-serialize JSON (Express .json(), Flask .get_json()) change the bytes and break the MAC. For other languages, look up the beta.webhooks.unwrap binding in the SDK repo (shared/live-sources.md); don't hand-roll verification.
Payload envelope
{
"タイプ": "イベント",
"id": "event_01ABC...",
"created_at": "2026-03-18T14:05:22Z",
「データ」: {
"タイプ": "セッション.ステータス_アイドル",
"id": "session_01XYZ...",
"組織ID": "8a3d2f1e-...",
"workspace_id": "c7b0e4d9-..."
}
}Switch on data.type, fetch the resource by data.id, return any 2xx to acknowledge. created_at is when the state transition happened, not when the webhook fired.
Supported data.type values
data.type | Fires when |
|---|---|
session.status_scheduled | Session created and ready to accept events |
session.status_run_started | Agent execution kicked off (every transition to running) |
session.status_idled | Agent awaiting input (tool approval, custom tool result, or next message) |
session.status_terminated | Session hit a terminal error |
session.thread_created | Multiagent: coordinator opened a new subagent thread |
session.thread_idled | Multiagent: a subagent thread is waiting for input |
session.outcome_evaluation_ended | Outcome grader finished one iteration |
vault.archived | Vault was archived |
vault.created | Vault was created |
vault.deleted | Vault was deleted |
vault_credential.archived | Vault credential was archived |
vault_credential.created | Vault credential was created |
vault_credential.deleted | Vault credential was deleted |
vault_credential.refresh_failed | MCP OAuth vault credential failed to refresh |
These are webhook data.type values — a separate namespace from SSE event types (session.status_idle, span.outcome_evaluation_end, etc. in shared/managed-agents-events.md). Don't reuse SSE constants in webhook handlers.
Delivery behavior & pitfalls
- No ordering guarantee.
session.status_idledmay arrive beforesession.outcome_evaluation_endedeven if the evaluation finished first. Sort by envelopecreated_atif order matters. - Retries carry the same
event.id. At least one retry on non-2xx. Dedupe onevent.id. - 3xx is failure. Redirects are not followed — update the URL in Console if your endpoint moves.
- Auto-disable after ~20 consecutive failed deliveries, or immediately if the hostname resolves to a private IP or returns a redirect. Re-enable manually in Console.
- Thin payload is intentional. Don't expect
stop_reason,outcome_evaluations, credential secrets, etc. on the webhook body — fetch the resource.
### 共有/モデル-移行.md
[shared/model-migration.md をダウンロード](/skills/claude-api/shared/model-migration.md)
_バイナリリソース_
### 共有/models.md
[shared/models.md をダウンロード](/skills/claude-api/shared/models.md)
_バイナリリソース_
### 共有/プロンプト-キャッシング.md
[shared/prompt-caching.md をダウンロード](/skills/claude-api/shared/prompt-caching.md)
_バイナリリソース_
### 共有/ツール使用コンセプト.md
[shared/tool-use-concepts.md をダウンロード](/skills/claude-api/shared/tool-use-concepts.md)
_バイナリリソース_
### typescript/claude-api/README.md
[typescript/claude-api/README.md をダウンロード](/skills/claude-api/typescript/claude-api/README.md)
_バイナリリソース_
### typescript/claude-api/batches.md
[typescript/claude-api/batches.md をダウンロード](/skills/claude-api/typescript/claude-api/batches.md)
```markdown
# Message Batches API — TypeScript
The Batches API (`POST /v1/messages/batches`) processes Messages API requests asynchronously at 50% of standard prices.
## Key Facts
- Up to 100,000 requests or 256 MB per batch
- Most batches complete within 1 hour; maximum 24 hours
- Results available for 29 days after creation
- 50% cost reduction on all token usage
- All Messages API features supported (vision, tools, caching, etc.)
---
## Create a Batch
```typescript
"@anthropic-ai/sdk" から Anthropic をインポートします。
const client = new Anthropic();
const messageBatch = await client.messages.batches.create({
リクエスト: [
{
カスタムID: "リクエスト-1",
パラメータ: {
モデル: "クロード-作品-4-7",
max_tokens: 16000、
メッセージ: [
{ 役割: "ユーザー"、コンテンツ: "気候変動の影響の概要" },
]、
}、
}、
{
カスタムID: "リクエスト-2",
パラメータ: {
モデル: "クロード-作品-4-7",
max_tokens: 16000、
メッセージ: [
{ 役割: "ユーザー"、内容: "量子コンピューティングの基礎を説明する" },
]、
}、
}、
]、
});
コンソール.ログ(`Batch ID: ${messageBatch.id}`);
コンソール.ログ(`Status: ${messageBatch.processing_status}`);Poll for Completion
バッチをさせてください。
while (true) {
バッチ = 待機 client.messages.batches.retrieve(messageBatch.id);
if (batch.processing_status === "終了") ブレーク;
コンソール.log(
`Status: ${batch.processing_status}, processing: ${batch.request_counts.processing}`、
);
await new Promise((resolve) => setTimeout(resolve, 60_000));
}
console.log("バッチが完了しました!");
コンソール.ログ(`Succeeded: ${batch.request_counts.succeeded}`);
コンソール.ログ(`Errored: ${batch.request_counts.errored}`);Retrieve Results
for await (await の const 結果 client.messages.batches.results(
messageBatch.id、
)){
スイッチ (結果.結果.タイプ) {
ケース「成功」:
コンソール.log(
`[${result.custom_id}] ${result.result.message.content[0].text.slice(0, 100)}`、
);
壊す;
ケース「エラー」:
if (result.result.error.type === "invalid_request") {
コンソール.ログ(`[${result.custom_id}] Validation error - fix and retry`);
} それ以外の場合は {
コンソール.ログ(`[${result.custom_id}] Server error - safe to retry`);
}
壊す;
ケース「期限切れ」:
コンソール.ログ(`[${result.custom_id}] Expired - resubmit`);
壊す;
}
}Cancel a Batch
const canceled = await client.messages.batches.cancel(messageBatch.id);
コンソール.ログ(`Status: ${cancelled.processing_status}`); // 「キャンセル」
### typescript/claude-api/files-api.md
[typescript/claude-api/files-api.md をダウンロード](/skills/claude-api/typescript/claude-api/files-api.md)
```markdown
# Files API — TypeScript
The Files API uploads files for use in Messages API requests. Reference files via `file_id` in content blocks, avoiding re-uploads across multiple API calls.
**Beta:** Pass `betas: ["files-api-2025-04-14"]` in your API calls (the SDK sets the required header automatically).
## Key Facts
- Maximum file size: 500 MB
- Total storage: 100 GB per organization
- Files persist until deleted
- File operations (upload, list, delete) are free; content used in messages is billed as input tokens
- Not available on Amazon Bedrock or Google Vertex AI
---
## Upload a File
```typescript
import Anthropic, { toFile } from "@anthropic-ai/sdk";
「fs」から fs をインポートします。
const client = new Anthropic();
const updated = await client.beta.files.upload({
ファイル: await toFile(fs.createReadStream("report.pdf")、未定義、{
タイプ: "アプリケーション/pdf",
})、
ベータ: ["files-api-2025-04-14"]、
});
コンソール.ログ(`File ID: ${uploaded.id}`);
コンソール.ログ(`Size: ${uploaded.size_bytes} bytes`);Use a File in Messages
PDF / Text Document
const response = await client.beta.messages.create({
モデル: "クロード-作品-4-7",
max_tokens: 16000、
メッセージ: [
{
役割: 「ユーザー」、
内容: [
{ type: "text", text: "このレポートの主な調査結果を要約します。" }、
{
タイプ: "ドキュメント",
ソース: { タイプ: "ファイル"、ファイル ID: アップロードされた.id }、
タイトル: 「第 4 四半期レポート」、
引用: { 有効: true }、
}、
]、
}、
]、
ベータ: ["files-api-2025-04-14"]、
});
console.log(response.content[0].text);Manage Files
List Files
const files = await client.beta.files.list({
ベータ: ["files-api-2025-04-14"]、
});
for (files.data の const f) {
コンソール.ログ(`${f.id}: ${f.filename} (${f.size_bytes} bytes)`);
}Delete a File
await client.beta.files.delete("file_011CNha8iCJcU1wXNR6q4V8w", {
ベータ: ["files-api-2025-04-14"]、
});Download a File
const response = await client.beta.files.download(
"file_011CNha8iCJcU1wXNR6q4V8w",
{ ベータ版: ["files-api-2025-04-14"] },
);
const content = Buffer.from(応答を待つ.arrayBuffer());
await fs.promises.writeFile("output.txt", content);
### typescript/claude-api/streaming.md
[typescript/claude-api/streaming.md をダウンロード](/skills/claude-api/typescript/claude-api/streaming.md)
```markdown
# Streaming — TypeScript
## Quick Start
```typescript
const stream = client.messages.stream({
モデル: "クロード-作品-4-7",
max_tokens: 64000、
メッセージ: [{ 役割: "ユーザー"、コンテンツ: "ストーリーを書く" }]、
});
for await (ストリームの定数イベント) {
もし(
イベント.タイプ === "content_block_delta" &&
イベント.デルタ.タイプ === "テキストデルタ"
) {
process.stdout.write(event.delta.text);
}
}Handling Different Content Types
Opus 4.7 / Opus 4.6: Use thinking: {type: "adaptive"}. On older models, use thinking: {type: "enabled", budget_tokens: N} instead.
const stream = client.messages.stream({
モデル: "クロード-作品-4-7",
max_tokens: 64000、
思考: { タイプ: "アダプティブ" },
メッセージ: [{ 役割: "ユーザー"、内容: "この問題を分析します" }]、
});
for await (ストリームの定数イベント) {
スイッチ (event.type) {
ケース「content_block_start」:
スイッチ (event.content_block.type) {
「思考」の場合:
console.log("\n[考え中...]");
壊す;
「テキスト」の場合:
console.log("\n[応答:]");
壊す;
}
壊す;
ケース「content_block_delta」:
スイッチ (event.delta.type) {
ケース「思考デルタ」:
process.stdout.write(event.delta. Thinking);
壊す;
ケース「テキストデルタ」:
process.stdout.write(event.delta.text);
壊す;
}
壊す;
}
}Streaming with Tool Use (Tool Runner)
Use the tool runner with stream: true. The outer loop iterates over tool runner iterations (messages), the inner loop processes stream events:
"@anthropic-ai/sdk" から Anthropic をインポートします。
import { betaZodTool } から "@anthropic-ai/sdk/helpers/beta/zod";
「zod」から { z } をインポートします。
const client = new Anthropic();
const getWeather = betaZodTool({
名前: "get_weather",
説明: "場所の現在の天気を取得する",
inputSchema: z.object({
location: z.string().describe("都市と州、例: カリフォルニア州サンフランシスコ"),
})、
実行: async ({ location }) =>`72°F and sunny in ${location}`、
});
const ランナー = client.beta.messages.toolRunner({
モデル: "クロード-作品-4-7",
max_tokens: 64000、
ツール: [getWeather]、
メッセージ: [
{ 役割: "ユーザー"、内容: 「パリとロンドンの天気は?」 }、
]、
ストリーム: true、
});
// 外側のループ: 各ツール ランナーの反復
for await (ランナーの const messageStream) {
// 内部ループ: この反復のストリーム イベント
for await (messageStream の const イベント) {
スイッチ (event.type) {
ケース「content_block_delta」:
スイッチ (event.delta.type) {
ケース「テキストデルタ」:
process.stdout.write(event.delta.text);
壊す;
ケース「input_json_delta」:
// ストリーミングされるツール入力
休憩;
}
壊す;
}
}
}Getting the Final Message
const stream = client.messages.stream({
モデル: "クロード-作品-4-7",
max_tokens: 64000、
メッセージ: [{ 役割: "ユーザー"、コンテンツ: "こんにちは" }]、
});
for await (ストリームの定数イベント) {
// イベントを処理します...
}
const FinalMessage = await stream.finalMessage();
コンソール.ログ(`Tokens used: ${finalMessage.usage.output_tokens}`);Stream Event Types
| Event Type | Description | When it fires |
|---|---|---|
message_start | Contains message metadata | Once at the beginning |
content_block_start | New content block beginning | When a text/tool_use block starts |
content_block_delta | Incremental content update | For each token/chunk |
content_block_stop | Content block complete | When a block finishes |
message_delta | Message-level updates | Contains stop_reason, usage |
message_stop | Message complete | Once at the end |
Best Practices
- Always flush output — Use
process.stdout.write()for immediate display - Handle partial responses — If the stream is interrupted, you may have incomplete content
- Track token usage — The
message_deltaevent contains usage information - Use
finalMessage()— Get the completeAnthropic.Messageobject even when streaming. Don't wrap.on()events innew Promise()—finalMessage()handles all completion/error/abort states internally - Buffer for web UIs — Consider buffering a few tokens before rendering to avoid excessive DOM updates
- Use
stream.on("text", ...)for deltas — Thetextevent provides just the delta string, simpler than manually filteringcontent_block_deltaevents - For agentic loops with streaming — See the Streaming Manual Loop section in tool-use.md for combining
stream()+finalMessage()with a tool-use loop
Raw SSE Format
If using raw HTTP (not SDKs), the stream returns Server-Sent Events:
イベント: message_start
データ: {"タイプ":"メッセージ開始","メッセージ":{"id":"msg_...","タイプ":"メッセージ",...}}
イベント: content_block_start
データ: {"タイプ":"コンテンツブロック開始","インデックス":0,"コンテンツブロック":{"タイプ":"テキスト","テキスト":""}}
イベント: content_block_delta
データ: {"タイプ":"コンテンツブロックデルタ","インデックス":0,"デルタ":{"タイプ":"テキストデルタ","テキスト":"Hello"}}
イベント: content_block_stop
データ: {"タイプ":"コンテンツブロックストップ","インデックス":0}
イベント: メッセージデルタ
データ: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":12}}
イベント: message_stop
データ: {"タイプ":"メッセージストップ"}
### typescript/claude-api/tool-use.md
[typescript/claude-api/tool-use.md をダウンロード](/skills/claude-api/typescript/claude-api/tool-use.md)
_バイナリリソース_
### typescript/管理対象エージェント/README.md
[タイプスクリプト/管理対象エージェント/README.md をダウンロード](/skills/claude-api/typescript/管理対象エージェント/README.md)
_バイナリリソース_
## GitHub で見る
[GitHub で見る](https://github.com/anthropics/skills/tree/main/claude-api)
クロードスキルのドキュメント