Agent Skills by ALSEL
汎用LLM・AI開発⭐ リポ 0品質スコア 65/100

claude-api-patterns

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.1claude-opus-4-1複雑な推論、アーキテクチャ、研究
Sonnet 4claude-sonnet-4-0バランスの取れたコーディング、ほとんどの開発タスク
Haiku 3.5claude-3-5-haiku-latest高速応答、大量処理、コスト重視

タスクが深い推論を必要としない限り(Opus)、または速度・コスト最適化が必要でない限り(Haiku)、Sonnet 4をデフォルトとします。本番環境では、エイリアスより固定スナップショットIDを使用することが推奨されます。

Python SDK

インストール

pip install anthropic

基本的なメッセージ

import anthropic

client = anthropic.Anthropic()  # reads ANTHROPIC_API_KEY from env

message = client.messages.create(
    model="claude-sonnet-4-0",
    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-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)

システムプロンプト

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"}]
)

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-0",
  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-0",
  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-0",
    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-0",
            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-0",
    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-0",
    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-0",
    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-0",
                "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-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

コスト最適化

戦略削減率使用場面
プロンプトキャッシングキャッシュされたトークンで最大90%繰り返されるシステムプロンプトまたはコンテキスト
バッチAPI50%時間的制約のない大量処理
SonnetではなくHaikuを使用約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-0"

APIキーをハードコードしないでください。常に環境変数を使用してください。

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
chris-yyau
リポジトリ
chris-yyau/busdriver
ライセンス
MIT
最終更新
2026/5/11

Source: https://github.com/chris-yyau/busdriver / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: chris-yyau · chris-yyau/busdriver · ライセンス: MIT