# Claude Agent SDKの便利だけど知られていない機能
🌍 エージェントが延々とツールを呼び続けて止まらない...そんな経験はありませんか?
max_turns を使えば、ツール使用回数に上限を設定して、エージェントの暴走を防げます。
📌 タイトル:max_turns はツール使用ターンのみカウント
🔗 URL:
🧩 概要
`max_turns` はエージェントのツール使用ラウンドトリップのみをカウントし、テキストのみの応答はカウントしません。デフォルトは無制限です。上限に達すると `ResultMessage` の `subtype` が `error_max_turns` になります。重要なポイントとして、上限到達後もセッションIDは保持されるため、セッションを再開してより高い上限で続行することが可能です。
🛠 使い方
```python
# Python
result = await
prompt="このプロジェクトのテストを修正してください",
max_turns=10, # ツール使用10回まで
)
if result.subtype == "error_max_turns":
print(f"ターン上限に到達: {result.num_turns}ターン")
print(f"セッションID: {result.session_id}")
# より高い上限で再開
result = await
prompt="続行してください",
max_turns=20,
resume=result.session_id,
)
```
```typescript
// TypeScript
const result = await
prompt: "Fix the tests in this project",
maxTurns: 10,
});
if (result.subtype === "error_max_turns") {
// Resume with higher limit
const resumed = await
prompt: "Continue",
maxTurns: 20,
resume: result.sessionId,
});
}
```
🏗 本番システムへの組み込み方
・タスクの想定複雑度に基づいて適切なターン上限を設定し、無限ループを防止します
・`error_max_turns` を検知して自動的にセッションを再開するリトライロジックを実装します
・ターン数をメトリクスとして収集し、タスクの複雑度やエージェントの効率を分析します
・段階的にターン上限を引き上げるエスカレーション戦略を構築します
💡 ユースケース
🛡 ユーザー向けアプリで、1リクエストあたりのエージェント実行時間を制限する
🔄 最初は少ないターンで試し、必要に応じて自動的に上限を引き上げる段階的実行
📊 ターン数の統計を取って、プロンプトやツール設計の改善に活かす
⚠️ 注意点
・テキストのみの応答はカウントされないため、実際のAPI呼び出し回数とは異なる場合があります
・デフォルトは無制限なので、本番環境では必ず上限を設定することを推奨します
・上限が低すぎるとタスクが中途半端に終わる可能性があるため、タスクに応じた適切な値を選んでください
✨ 「ツール使用回数だけカウント」という仕様は意外と知られていません。この特性を理解して活用することで、より正確なリソース管理ができます!
#
ClaudeAgentSDK# #
AIAgent#