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?
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. Ваш код должен конкатенировать эти фрагменты и разобрать результат после закрытия блока.
Контракт накопления:
content_block_start с type: "tool_use" инициализируйте пустую строку: input_json = ""content_block_delta с type: "input_json_delta" добавляйте: input_json += event.delta.partial_jsoncontent_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 для обеспечения правильной обработки (с разумным ключом). Например:
{
"INVALID_JSON": "<your invalid json string>"
}Этот подход помогает модели понять, что содержимое является недействительным JSON, сохраняя при этом исходные некорректные данные для целей отладки.
При обёртывании недействительного JSON убедитесь, что вы правильно экранируете кавычки или специальные символы в строке недействительного JSON, чтобы сохранить допустимую структуру JSON в объекте-обёртке.
Полный справочник по событиям, отправляемым сервером, и типам событий потока.
Выполнение инструментов и возврат результатов в требуемом формате сообщений.
Полный каталог инструментов схемы Anthropic и их строки версий.