claude-api
PythonおよびTypeScriptにおけるAnthropic Claude APIのパターン集です。Messages API、ストリーミング、ツール使用、ビジョン、拡張思考、バッチ処理、プロンプトキャッシング、Claude Agent SDKに対応しています。Claude APIやAnthropic SDKを使用してアプリケーションを構築する際にご利用ください。
description の原文を見る
Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.
SKILL.md 本文
Claude API
Anthropic Claude API と SDK を使用してアプリケーションを構築します。
有効化するタイミング
- Claude API を呼び出すアプリケーションを構築している
- コードが
anthropic(Python)または@anthropic-ai/sdk(TypeScript)をインポートしている - Claude API のパターン、ツール使用、ストリーミング、またはビジョンについて質問されている
- Claude Agent SDK を使用したエージェントワークフローを実装している
- API コスト、トークン使用量、またはレイテンシを最適化している
モデル選択
| モデル | ID | 最適な用途 |
|---|---|---|
| Opus 4.6 | claude-opus-4-6 | 複雑な推論、アーキテクチャ、研究 |
| Sonnet 4.6 | claude-sonnet-4-6 | バランスの取れたコーディング、ほとんどの開発タスク |
| Haiku 4.5 | claude-haiku-4-5-20251001 | 高速応答、高ボリューム、コスト重視 |
特に深い推論が必要な場合(Opus)またはスピード/コスト最適化が必要な場合(Haiku)を除き、デフォルトで Sonnet 4.6 を使用します。
Python SDK
インストール
pip install anthropic
基本メッセージ
import anthropic
client = anthropic.Anthropic() # reads ANTHROPIC_API_KEY from env
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[
{"role": "user", "content": "Explain async/await in Python"}
]
)
print(message.content[0].text)
ストリーミング
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Write a haiku about coding"}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
システムプロンプト
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system="You are a senior Python developer. Be concise.",
messages=[{"role": "user", "content": "Review this function"}]
)
TypeScript SDK
インストール
npm install @anthropic-ai/sdk
基本メッセージ
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic(); // reads ANTHROPIC_API_KEY from env
const message = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages: [
{ role: "user", content: "Explain async/await in TypeScript" }
],
});
console.log(message.content[0].text);
ストリーミング
const stream = client.messages.stream({
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages: [{ role: "user", content: "Write a haiku" }],
});
for await (const event of stream) {
if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
process.stdout.write(event.delta.text);
}
}
ツール使用
ツールを定義して Claude に呼び出させます:
tools = [
{
"name": "get_weather",
"description": "Get current weather for a location",
"input_schema": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "City name"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["location"]
}
}
]
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "What's the weather in SF?"}]
)
# Handle tool use response
for block in message.content:
if block.type == "tool_use":
# Execute the tool with block.input
result = get_weather(**block.input)
# Send result back
follow_up = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=tools,
messages=[
{"role": "user", "content": "What's the weather in SF?"},
{"role": "assistant", "content": message.content},
{"role": "user", "content": [
{"type": "tool_result", "tool_use_id": block.id, "content": str(result)}
]}
]
)
ビジョン
分析用に画像を送信します:
import base64
with open("diagram.png", "rb") as f:
image_data = base64.standard_b64encode(f.read()).decode("utf-8")
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{
"role": "user",
"content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": image_data}},
{"type": "text", "text": "Describe this diagram"}
]
}]
)
拡張思考
複雑な推論タスク用:
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000
},
messages=[{"role": "user", "content": "Solve this math problem step by step..."}]
)
for block in message.content:
if block.type == "thinking":
print(f"Thinking: {block.thinking}")
elif block.type == "text":
print(f"Answer: {block.text}")
プロンプトキャッシング
大規模なシステムプロンプトまたはコンテキストをキャッシュしてコストを削減します:
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[
{"type": "text", "text": large_system_prompt, "cache_control": {"type": "ephemeral"}}
],
messages=[{"role": "user", "content": "Question about the cached context"}]
)
# Check cache usage
print(f"Cache read: {message.usage.cache_read_input_tokens}")
print(f"Cache creation: {message.usage.cache_creation_input_tokens}")
バッチAPI
大量処理を非同期で実行し、50% のコスト削減を実現します:
import time
batch = client.messages.batches.create(
requests=[
{
"custom_id": f"request-{i}",
"params": {
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"messages": [{"role": "user", "content": prompt}]
}
}
for i, prompt in enumerate(prompts)
]
)
# Poll for completion
while True:
status = client.messages.batches.retrieve(batch.id)
if status.processing_status == "ended":
break
time.sleep(30)
# Get results
for result in client.messages.batches.results(batch.id):
print(result.result.message.content[0].text)
Claude Agent SDK
マルチステップエージェントを構築します:
# Note: Agent SDK API surface may change — check official docs
import anthropic
# Define tools as functions
tools = [{
"name": "search_codebase",
"description": "Search the codebase for relevant code",
"input_schema": {
"type": "object",
"properties": {"query": {"type": "string"}},
"required": ["query"]
}
}]
# Run an agentic loop with tool use
client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Review the auth module for security issues"}]
while True:
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=4096,
tools=tools,
messages=messages,
)
if response.stop_reason == "end_turn":
break
# Handle tool calls and continue the loop
messages.append({"role": "assistant", "content": response.content})
# ... execute tools and append tool_result messages
コスト最適化
| 戦略 | 削減効果 | 使用する場合 |
|---|---|---|
| プロンプトキャッシング | キャッシュトークンで最大 90% | 繰り返されるシステムプロンプトまたはコンテキスト |
| バッチAPI | 50% | 時間非依存の一括処理 |
| Haiku の代わりに Sonnet を使用 | 約 75% | シンプルなタスク、分類、抽出 |
| max_tokens を短縮 | 変動 | 出力が短くなることが分かっている場合 |
| ストリーミング | なし(同じコスト) | より良い UX、同じ価格 |
エラーハンドリング
import time
from anthropic import APIError, RateLimitError, APIConnectionError
try:
message = client.messages.create(...)
except RateLimitError:
# Back off and retry
time.sleep(60)
except APIConnectionError:
# Network issue, retry with backoff
pass
except APIError as e:
print(f"API error {e.status_code}: {e.message}")
環境設定
# 必須
export ANTHROPIC_API_KEY="your-api-key-here"
# オプション:デフォルトモデルを設定
export ANTHROPIC_MODEL="claude-sonnet-4-6"
API キーをハードコードしないでください。常に環境変数を使用します。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mattnebr
- ライセンス
- MIT
- 最終更新
- 2026/5/8
Source: https://github.com/mattnebr/ai-assistant-foundry / ライセンス: MIT