メインコンテンツまでスキップ

本番環境での初めてのAPI呼び出し(コストを意識して)

中級

おもちゃのようなAPI呼び出しは1行で済みます。しかし本番環境の呼び出しは、エラーを処理し、出力をストリーミングし、コストを監視し、シークレットを安全に保ちます。それを順を追って構築しましょう。

ステップ1 — 設定からシークレットとモデルを取得する

export ANTHROPIC_API_KEY="sk-ant-..." # never in source control

モデルIDは設定に保持し、あちこちにリテラルを散在させないでください。そうすれば移行が簡単になります(理由)。慎重に選びましょう — モデルの選択

ステップ2 — 回復力があり、ストリーミングする呼び出し

import os, time, random, anthropic
client = anthropic.Anthropic()
MODEL = os.environ.get("CLAUDE_MODEL", "claude-sonnet-4-6")

def ask_stream(prompt, system=None, max_tokens=1024):
for attempt in range(5):
try:
with client.messages.stream(
model=MODEL, max_tokens=max_tokens,
system=system or anthropic.NOT_GIVEN,
messages=[{"role": "user", "content": prompt}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final = stream.get_final_message()
print()
usage = final.usage
print(f"\n[tokens in/out: {usage.input_tokens}/{usage.output_tokens}]")
return final
except (anthropic.RateLimitError, anthropic.APIStatusError):
if attempt == 4: raise
time.sleep(min(2 ** attempt + random.random(), 30))

ステップ3 — コストに気を配る

  • トークン使用量をログに記録する(上記)ことで、各呼び出しのコストが分かります。
  • max_tokens とモデルを適切なサイズにし、焦点を絞ったプロンプトで入力を抑えましょう。
  • 安定した接頭辞が繰り返される場合は、プロンプトキャッシュを追加してください。
  • トークンと料金およびコストとレイテンシを参照してください。

ステップ4 — 望ましくない経路に対処する

  • 一時的なエラー(429/5xx)はバックオフ付きで再試行します(上記)。400系は再試行しないでください。
  • 拒否を適切に処理しましょう。
  • エージェント的なものにはタイムアウトコスト/反復の予算を設定してください。

検証

実行してみましょう。ストリーミングされた出力、トークン使用量の行、そして意図的にエラーを発生させた場合(例: 不正なキー → クラッシュではなくきれいなメッセージ)の適切な挙動が見られるはずです。

次へ