Loading...
    • Разработка
    • Администрирование
    • Модели и цены
    • Клиентские SDK
    • Справочник API
    Search...
    ⌘K
    Первые шаги
    Введение в ClaudeБыстрый старт
    Разработка с Claude
    Обзор возможностейИспользование Messages APIОбработка причин остановки
    Возможности модели
    Расширенное мышлениеАдаптивное мышлениеУсилиеБыстрый режим (бета: предварительный просмотр)Структурированные выходные данныеЦитированияПотоковые сообщенияПакетная обработкаРезультаты поискаПотоковые отказыМногоязычная поддержкаЭмбеддинги
    Инструменты
    ОбзорКак работает использование инструментовИнструмент веб-поискаИнструмент веб-загрузкиИнструмент выполнения кодаИнструмент памятиИнструмент BashИнструмент управления компьютеромИнструмент текстового редактора
    Инфраструктура инструментов
    Поиск инструментовПрограммный вызов инструментовДетальная потоковая передача инструментов
    Управление контекстом
    Контекстные окнаСжатиеРедактирование контекстаКэширование промптовПодсчёт токенов
    Работа с файлами
    Files APIПоддержка PDFИзображения и зрение
    Навыки
    ОбзорБыстрый стартЛучшие практикиНавыки для предприятийНавыки в API
    MCP
    Удалённые MCP-серверыMCP-коннектор
    Инжиниринг промптов
    ОбзорЛучшие практики промптингаИнструменты промптинга в Console
    Тестирование и оценка
    Определение успеха и создание оценокИспользование инструмента оценки в ConsoleСнижение задержки
    Укрепление ограничений
    Снижение галлюцинацийПовышение согласованности выводаЗащита от джейлбрейковСнижение утечки промптов
    Ресурсы
    Глоссарий
    Примечания к выпуску
    Claude Platform
    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
    • 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
    • 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
    Инфраструктура инструментов

    Детальная потоковая передача инструментов

    Потоковая передача входных данных инструментов посимвольно для приложений, чувствительных к задержкам.

    This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.

    Детальная потоковая передача инструментов доступна на всех моделях и всех платформах. Она обеспечивает потоковую передачу значений параметров использования инструментов без буферизации или валидации JSON, снижая задержку при начале получения больших параметров.

    При использовании детальной потоковой передачи инструментов вы можете получать недействительные или частичные входные данные JSON. Убедитесь, что ваш код учитывает эти граничные случаи.

    Как использовать детальную потоковую передачу инструментов

    Детальная потоковая передача инструментов доступна на всех моделях и всех платформах (Claude API, Amazon Bedrock, Google Vertex AI и Microsoft Foundry). Чтобы использовать её, установите eager_input_streaming в значение true для любого пользовательского инструмента, для которого вы хотите включить детальную потоковую передачу, и включите потоковую передачу в вашем запросе.

    Вот пример использования детальной потоковой передачи инструментов через API:

    Was this page helpful?

    • Как использовать детальную потоковую передачу инструментов
    • Накопление дельт входных данных инструмента
    • Обработка недействительного JSON в ответах инструментов
    • Следующие шаги
    curl https://api.anthropic.com/v1/messages \
      -H "content-type: application/json" \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -d '{
        "model": "claude-opus-4-6",
        "max_tokens": 65536,
        "tools": [
          {
            "name": "make_file",
            "description": "Write text to a file",
            "eager_input_streaming": true,
            "input_schema": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string",
                  "description": "The filename to write text to"
                },
                "lines_of_text": {
                  "type": "array",
                  "description": "An array of lines of text to write to the file"
                }
              },
              "required": ["filename", "lines_of_text"]
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "Can you write a long poem and make a file called poem.txt?"
          }
        ],
        "stream": true
      }'

    В этом примере детальная потоковая передача инструментов позволяет Claude передавать строки длинного стихотворения в вызов инструмента make_file без буферизации для проверки того, является ли параметр lines_of_text допустимым JSON. Это означает, что вы можете видеть параметр по мере его поступления, не ожидая буферизации и валидации всего параметра.

    При детальной потоковой передаче инструментов фрагменты использования инструментов начинают передаваться быстрее и часто бывают длиннее и содержат меньше разрывов слов. Это связано с различиями в поведении разбивки на фрагменты.

    Пример:

    Без детальной потоковой передачи (задержка 15 с):

    Chunk 1: '{"'
    Chunk 2: 'query": "Ty'
    Chunk 3: 'peScri'
    Chunk 4: 'pt 5.0 5.1 '
    Chunk 5: '5.2 5'
    Chunk 6: '.3'
    Chunk 8: ' new f'
    Chunk 9: 'eatur'
    ...

    С детальной потоковой передачей (задержка 3 с):

    Chunk 1: '{"query": "TypeScript 5.0 5.1 5.2 5.3'
    Chunk 2: ' new features comparison'

    Поскольку детальная потоковая передача отправляет параметры без буферизации или валидации JSON, нет гарантии, что результирующий поток завершится допустимой строкой JSON. В частности, если достигнута причина остановки max_tokens, поток может завершиться в середине параметра и быть неполным. Как правило, вам необходимо написать специальную поддержку для обработки случаев, когда достигается max_tokens.

    Накопление дельт входных данных инструмента

    Когда блок содержимого tool_use передаётся потоком, начальное событие content_block_start содержит input: {} (пустой объект). Это заполнитель. Фактические входные данные поступают в виде серии событий input_json_delta, каждое из которых несёт фрагмент строки partial_json. Ваш код должен конкатенировать эти фрагменты и разобрать результат после закрытия блока.

    Контракт накопления:

    1. При content_block_start с type: "tool_use" инициализируйте пустую строку: input_json = ""
    2. Для каждого content_block_delta с type: "input_json_delta" добавляйте: input_json += event.delta.partial_json
    3. При content_block_stop разберите накопленную строку: json.loads(input_json)

    Несоответствие типов между начальным input: {} (объект) и partial_json (строка) является намеренным. Пустой объект отмечает слот в массиве содержимого; строки дельт формируют реальное значение.

    import json
    import anthropic
    
    client = anthropic.Anthropic()
    
    tool_inputs = {}  # index -> accumulated JSON string
    
    with client.messages.stream(
        model="claude-opus-4-6",
        max_tokens=1024,
        tools=[
            {
                "name": "get_weather",
                "description": "Get current weather for a city",
                "eager_input_streaming": True,
                "input_schema": {
                    "type": "object",
                    "properties": {"city": {"type": "string"}},
                    "required": ["city"],
                },
            }
        ],
        messages=[{"role": "user", "content": "Weather in Paris?"}],
    ) as stream:
        for event in stream:
            if (
                event.type == "content_block_start"
                and event.content_block.type == "tool_use"
            ):
                tool_inputs[event.index] = ""
            elif (
                event.type == "content_block_delta"
                and event.delta.type == "input_json_delta"
            ):
                tool_inputs[event.index] += event.delta.partial_json
            elif event.type == "content_block_stop" and event.index in tool_inputs:
                parsed = json.loads(tool_inputs[event.index])
                print(f"Tool input: {parsed}")

    SDK для Python и TypeScript предоставляют вспомогательные методы потока более высокого уровня (stream.get_final_message(), stream.finalMessage()), которые выполняют это накопление за вас. Используйте ручной шаблон выше только тогда, когда вам нужно реагировать на частичные входные данные до закрытия блока, например для отображения индикатора прогресса или раннего запуска нижестоящего запроса.

    Обработка недействительного JSON в ответах инструментов

    При использовании детальной потоковой передачи инструментов вы можете получать недействительный или неполный JSON от модели. Если вам нужно передать этот недействительный JSON обратно модели в блоке ответа об ошибке, вы можете обернуть его в объект JSON для обеспечения правильной обработки (с разумным ключом). Например:

    {
      "INVALID_JSON": "<your invalid json string>"
    }

    Этот подход помогает модели понять, что содержимое является недействительным JSON, сохраняя при этом исходные некорректные данные для целей отладки.

    При обёртывании недействительного JSON убедитесь, что вы правильно экранируете кавычки или специальные символы в строке недействительного JSON, чтобы сохранить допустимую структуру JSON в объекте-обёртке.

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

    Потоковая передача сообщений

    Полный справочник по событиям, отправляемым сервером, и типам событий потока.

    Обработка вызовов инструментов

    Выполнение инструментов и возврат результатов в требуемом формате сообщений.

    Справочник по инструментам

    Полный каталог инструментов схемы Anthropic и их строки версий.