Loading...
    • Руководство разработчика
    • Справочник API
    • MCP
    • Ресурсы
    • Примечания к выпуску
    Search...
    ⌘K
    Первые шаги
    Введение в ClaudeБыстрый старт
    Модели и цены
    Обзор моделейВыбор моделиЧто нового в Claude 4.6Руководство миграцииУстаревшие моделиЦены
    Разработка с Claude
    Обзор функцийИспользование Messages APIОбработка причин остановкиЛучшие практики промптирования
    Возможности модели
    Extended thinkingAdaptive thinkingУсилиеБыстрый режим (preview)Структурированные выходные данныеЦитированияПотоковая передача сообщенийПакетная обработкаПоддержка PDFРезультаты поискаМногоязычная поддержкаEmbeddingsЗрение
    Инструменты
    ОбзорКак реализовать использование инструментовИнструмент веб-поискаИнструмент веб-загрузкиИнструмент выполнения кодаИнструмент памятиИнструмент BashИнструмент управления компьютеромИнструмент текстового редактора
    Инфраструктура инструментов
    Поиск инструментовПрограммный вызов инструментовПотоковая передача инструментов с детализацией
    Управление контекстом
    Контекстные окнаСжатиеРедактирование контекстаКэширование промптовПодсчет токенов
    Файлы и ресурсы
    Files API
    Agent Skills
    ОбзорБыстрый стартЛучшие практикиSkills для предприятийИспользование Skills с API
    Agent SDK
    ОбзорБыстрый стартTypeScript SDKTypeScript V2 (preview)Python SDKРуководство миграции
    Потоковый вводПотоковая передача ответов в реальном времениОбработка причин остановкиОбработка разрешенийОдобрения пользователей и вводУправление выполнением с помощью hooksУправление сеансамиКонтрольные точки файловСтруктурированные выходные данные в SDKРазмещение Agent SDKБезопасное развертывание AI агентовИзменение системных промптовMCP в SDKПользовательские инструментыПодагенты в SDKКоманды с косой чертой в SDKAgent Skills в SDKОтслеживание затрат и использованияСписки задачПлагины в SDK
    MCP в API
    MCP коннекторУдаленные MCP серверы
    Claude на платформах третьих сторон
    Amazon BedrockMicrosoft FoundryVertex AI
    Инженерия промптов
    ОбзорГенератор промптовИспользование шаблонов промптовУлучшитель промптовБудьте ясны и прямолинейныИспользуйте примеры (многошаговое промптирование)Дайте Claude думать (CoT)Используйте XML тегиДайте Claude роль (системные промпты)Цепочка сложных промптовСоветы для длинного контекстаСоветы для Extended thinking
    Тестирование и оценка
    Определение критериев успехаРазработка тестовых случаевИспользование инструмента оценкиСнижение задержки
    Укрепление защиты
    Снижение галлюцинацийУвеличение согласованности выходных данныхСмягчение jailbreaksПотоковая передача отказовСнижение утечки промптаДержите Claude в образе
    Администрирование и мониторинг
    Обзор Admin APIРезидентность данныхРабочие пространстваUsage and Cost APIClaude Code Analytics APIZero Data Retention
    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, потому что вызовы инструментов обычно выполняются до возврата результата.
    nullОтвет API не был получен; например, произошла ошибка до первого запроса, или результат был воспроизведен из кэшированной сессии.

    Причины остановки в результатах ошибок

    Результаты ошибок (такие как 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Последняя наблюдаемая причина остановки или null, если ошибка произошла до получения какого-либо ответа API.
    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"))

    Следующие шаги

    • Потоковая передача ответов в реальном времени: доступ к необработанным событиям API, включая message_delta по мере их поступления
    • Структурированные выходные данные: получение типизированных JSON-ответов от агента
    • Отслеживание затрат и использования: понимание использования токенов и выставления счетов из результирующих сообщений

    Was this page helpful?

    • Чтение stop_reason
    • Доступные причины остановки
    • Причины остановки в результатах ошибок
    • Обнаружение отказов
    • Следующие шаги