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.
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.
with client.messages.stream(
model="claude-sonnet-4-0",
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)
System Prompt
message = client.messages.create(
model="claude-sonnet-4-0",
max_tokens=1024,
system="You are a senior Python developer. Be concise.",
messages=[{"role": "user", "content": "Review this function"}]
)
import time
batch = client.messages.batches.create(
requests=[
{
"custom_id": f"request-{i}",
"params": {
"model": "claude-sonnet-4-0",
"max_tokens": 1024,
"messages": [{"role": "user", "content": prompt}]
}
}
for i, prompt inenumerate(prompts)
]
)
# Poll for completionwhileTrue:
status = client.messages.batches.retrieve(batch.id)
if status.processing_status == "ended":
break
time.sleep(30)
# Get resultsfor 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 docsimport 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"}]
whileTrue:
response = client.messages.create(
model="claude-sonnet-4-0",
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
コスト最適化
戦略
削減効果
使用タイミング
Prompt caching
キャッシュトークンで最大90%
繰り返しのシステムプロンプトやコンテキスト
Batches API
50%
時間に制約のない大量処理
Sonnet の代わりに Haiku
約75%
シンプルなタスク、分類、抽出
短い max_tokens
可変
出力が短いことが分かっている場合
Streaming
なし(同一コスト)
より良い 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 backoffpassexcept APIError as e:
print(f"API error {e.status_code}: {e.message}")
環境設定
# Requiredexport ANTHROPIC_API_KEY="your-api-key-here"# Optional: set default modelexport ANTHROPIC_MODEL="claude-sonnet-4-0"