Loading...
    • 開発者ガイド
    • API リファレンス
    • MCP
    • リソース
    • リリースノート
    Search...
    ⌘K
    はじめに
    Claude の紹介クイックスタート
    モデルと料金
    モデル概要モデルの選び方Claude 4.6 の新機能移行ガイドモデルの廃止料金
    Claude で構築する
    機能概要Messages API の使用停止理由の処理プロンプトのベストプラクティス
    コンテキスト管理
    コンテキストウィンドウコンパクションコンテキスト編集
    機能
    プロンプトキャッシング拡張思考適応型思考エフォートメッセージのストリーミングバッチ処理引用多言語サポートトークンカウントエンベディングビジョンPDF サポートFiles API検索結果構造化出力
    ツール
    概要ツール使用の実装方法きめ細かいツールストリーミングBash ツールコード実行ツールプログラムによるツール呼び出しコンピュータ使用ツールテキストエディタツールWeb フェッチツールWeb 検索ツールメモリツールツール検索ツール
    Agent Skills
    概要クイックスタートベストプラクティスエンタープライズ向け SkillsAPI での Skills の使用
    Agent SDK
    概要クイックスタートTypeScript SDKTypeScript V2(プレビュー)Python SDK移行ガイド
    ストリーミング入力リアルタイムでレスポンスをストリーミング停止理由の処理権限の処理ユーザー承認と入力フックによる実行制御セッション管理ファイルチェックポイントSDK での構造化出力Agent SDK のホスティングAI エージェントの安全なデプロイシステムプロンプトの変更SDK での MCPカスタムツールSDK でのサブエージェントSDK でのスラッシュコマンドSDK での Agent Skillsコストと使用量の追跡Todo リストSDK でのプラグイン
    API での MCP
    MCP コネクタリモート MCP サーバー
    サードパーティプラットフォームの Claude
    Amazon BedrockMicrosoft FoundryVertex AI
    プロンプトエンジニアリング
    概要プロンプトジェネレータープロンプトテンプレートの使用プロンプト改善ツール明確かつ直接的に例を使う(マルチショットプロンプティング)Claude に考えさせる(CoT)XML タグを使うClaude に役割を与える(システムプロンプト)複雑なプロンプトを連鎖させる長文コンテキストのヒント拡張思考のヒント
    テストと評価
    成功基準の定義テストケースの開発評価ツールの使用レイテンシの削減
    ガードレールの強化
    ハルシネーションの削減出力の一貫性を高めるジェイルブレイクの軽減ストリーミング拒否プロンプト漏洩の防止Claude をキャラクターに保つ
    管理とモニタリング
    Admin API 概要データレジデンシーワークスペースUsage and Cost APIClaude Code Analytics APIゼロデータリテンション
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    ガイド

    停止理由の処理

    Agent SDKの結果メッセージから拒否やその他の停止理由を直接検出する

    結果メッセージのstop_reasonフィールドは、モデルが生成を停止した理由を示します。これは、拒否、最大トークン制限、その他の終了条件を検出するための推奨方法です(ストリーム解析は不要です)。

    stop_reasonは、ストリーミングが有効かどうかに関係なく、すべてのResultMessageで利用可能です。include_partial_messages(Python)やincludePartialMessages(TypeScript)を設定する必要はありません。

    stop_reasonの読み取り

    stop_reasonフィールドは、成功とエラーの両方の結果メッセージに存在します。メッセージストリームを反復処理した後に確認してください:

    from claude_agent_sdk import query, ResultMessage
    import asyncio
    
    async def check_stop_reason():
        async for message in query(prompt="Write a poem about the ocean"):
            if isinstance(message, ResultMessage):
                print(f"Stop reason: {message.stop_reason}")
                if message.stop_reason == "refusal":
                    print("The model declined this request.")
    
    asyncio.run(check_stop_reason())

    利用可能な停止理由

    停止理由意味
    end_turnモデルは正常にレスポンスの生成を完了しました。
    max_tokensレスポンスが最大出力トークン制限に達しました。
    stop_sequenceモデルが設定されたストップシーケンスを生成しました。
    refusalモデルがリクエストの実行を拒否しました。
    tool_useモデルの最終出力がツール呼び出しでした。ツール呼び出しは通常、結果が返される前に実行されるため、SDKの結果ではこれは一般的ではありません。
    nullAPIレスポンスが受信されませんでした。例えば、最初のリクエストの前にエラーが発生した場合や、結果がキャッシュされたセッションから再生された場合です。

    エラー結果の停止理由

    エラー結果(error_max_turnsやerror_during_executionなど)にもstop_reasonが含まれます。値は、エラーが発生する前に受信された最後のアシスタントメッセージを反映します:

    結果バリアントstop_reasonの値
    success最終アシスタントメッセージの停止理由。
    error_max_turnsターン制限に達する前の最後のアシスタントメッセージの停止理由。
    error_max_budget_usd予算を超過する前の最後のアシスタントメッセージの停止理由。
    error_max_structured_output_retriesリトライ制限に達する前の最後のアシスタントメッセージの停止理由。
    error_during_execution最後に確認された停止理由、またはAPIレスポンスの前にエラーが発生した場合はnull。
    from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
    import asyncio
    
    async def handle_max_turns():
        options = ClaudeAgentOptions(max_turns=3)
    
        async for message in query(prompt="Refactor this module", options=options):
            if isinstance(message, ResultMessage):
                if message.subtype == "error_max_turns":
                    print(f"Hit turn limit. Last stop reason: {message.stop_reason}")
                    # stop_reason might be "end_turn" or "tool_use"
                    # depending on what the model was doing when the limit hit
    
    asyncio.run(handle_max_turns())

    拒否の検出

    stop_reason === "refusal"は、モデルがリクエストを拒否したことを検出する最も簡単な方法です。以前は、拒否を検出するには部分メッセージストリーミングを有効にし、StreamEventメッセージを手動でスキャンしてmessage_deltaイベントを探す必要がありました。結果メッセージのstop_reasonを使用すれば、直接確認できます:

    from claude_agent_sdk import query, ResultMessage
    import asyncio
    
    async def safe_query(prompt: str):
        async for message in query(prompt=prompt):
            if isinstance(message, ResultMessage):
                if message.stop_reason == "refusal":
                    print("Request was declined. Please revise your prompt.")
                    return None
                return message.result
        return None
    
    asyncio.run(safe_query("Summarize this article"))

    次のステップ

    • リアルタイムでレスポンスをストリーミング:message_deltaを含む生のAPIイベントに到着時にアクセス
    • 構造化出力:エージェントから型付きJSONレスポンスを取得
    • コストと使用量の追跡:結果メッセージからトークン使用量と課金を把握

    Was this page helpful?

    • stop_reasonの読み取り