PythonでClaude APIを使い始める
この記事では、Claude APIをPythonで使用するための環境設定、初回API呼び出し、レスポンスオブジェクトの解析、システムプロンプトの利用、ストリーミング応答について解説します。プロダクションアプリケーションの基礎を築くための実践的なガイドです。
本記事は、Python開発者向けのClaude API実践ガイドです。環境構築から最初のリクエストの送信、レスポンス処理、システムプロンプト、ストリーミングまでをカバーし、本番アプリケーション構築の基盤を提供します。
前提条件とインストール
必要なもの:Python 3.9以上、無料のClaude Consoleアカウント、ConsoleのSettings > API Keysページで生成したAPIキー。5ドル分のクレジットを追加しておくと、この記事の内容をすべて試せます。
SDKのインストール: pip install anthropic
APIキーはソースコードに直接記述せず、環境変数として設定します: export ANTHROPIC_API_KEY="YOUR-API-KEY-HERE"
または、python-dotenvを使用して.envファイルに追加します。SDKは自動的に環境変数からキーを読み取ります。
最初のAPI呼び出し
すべての操作のエントリポイントはclient.messages.create()です。モデルID、max_tokens制限、メッセージリストの3つを渡します。メッセージリストは常に「role」と「content」キーを持つ辞書のリストです。
import anthropic client = anthropic.Anthropic() response = client.messages.create( model="claude-sonnet-5", max_tokens=256, messages=[ {"role": "user", "content": "一文で、コンテキストウィンドウとは何ですか?"} ] ) print(response.content[0].text)
max_tokensは出力トークンのハード上限です。open-endedなリクエストの場合は十分な値を設定してください。メッセージリストは必ず「user」ターンで始める必要があります。
レスポンスオブジェクトの理解
messages.create()は型付けされたMessageオブジェクトを返します。主要なフィールド:
- id: メッセージの一意識別子
- type: 常に'message'
- role: 常に'assistant'
- content: テキストブロックのリスト(通常1つのTextBlock)
- model: 使用されたモデル
- stop_reason: 停止理由。'end_turn'は正常終了、'max_tokens'は上限による打ち切り
- stop_sequence: 停止シーケンス(通常None)
- usage: 入力トークン数(input_tokens)と出力トークン数(output_tokens)を含む
response.content[0].textでテキストを抽出します。
システムプロンプトの利用
システムプロンプトを使うと、Claudeに持続的な役割や制約を与えられます。messagesリストとは別に、トップレベルのsystemパラメータとして渡します。例:
response = client.messages.create( model="claude-sonnet-5", max_tokens=512, system="あなたはPythonコードレビュアーです。修正または改善したPythonコードのみを返してください。ユーザーが明示的に要求しない限り、変更を説明しないでください。", messages=[ {"role": "user", "content": "def get_user(id):\n db = connect()\n return db.query('SELECT * FROM users WHERE id=' + id)"} ] ) print(response.content[0].text)
システムプロンプトは会話全体を通して有効であり、役割指示やフォーマットルールを毎回繰り返す必要がありません。
ストリーミング応答
応答に時間がかかる場合、ストリーミングによりテキストが生成されるたびに表示できます。client.messages.stream()をコンテキストマネージャとして使用します:
with client.messages.stream( model="claude-sonnet-5", max_tokens=512, messages=[ {"role": "user", "content": "Pythonリストが初期容量を超えたときの動作を段階的に説明してください。"} ] ) as stream: for chunk in stream.text_stream: print(chunk, end="", flush=True)
コンテキストマネージャにより、例外発生時でもHTTP接続が適切に閉じられます。ストリーミング後に完全なMessageオブジェクト(トークン使用量を含む)が必要な場合は、ブロック終了前にstream.get_final_message()を呼び出します。
次のステップ
これで、リクエスト、構造化レスポンス、システムプロンプト、ストリーミングの基本を習得しました。次は、エラーハンドリング、トークン使用量の最適化、マルチターン会話について学ぶことをお勧めします。APIはステートレスであるため、各リクエストに会話履歴全体を含める必要があります。SDKドキュメントで推奨されるアプローチを参照してください。
APIリファレンスには、構造化出力やツール使用などの機能も含まれています。ぜひお試しください!