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.
Streaming alat butir halus tersedia secara umum di semua model dan semua platform. Ini memungkinkan streaming nilai parameter penggunaan alat tanpa buffering atau validasi JSON, mengurangi latensi untuk mulai menerima parameter besar.
Saat menggunakan streaming alat butir halus, Anda mungkin menerima input JSON yang tidak valid atau sebagian. Pastikan untuk mempertimbangkan kasus tepi ini dalam kode Anda.
Streaming alat butir halus tersedia di semua model dan semua platform (Claude API, Amazon Bedrock, Google Vertex AI, dan Microsoft Foundry). Untuk menggunakannya, atur eager_input_streaming ke true pada alat yang ditentukan pengguna mana pun di mana Anda ingin streaming butir halus diaktifkan, dan aktifkan streaming pada permintaan Anda.
Berikut adalah contoh cara menggunakan streaming alat butir halus dengan API:
client = anthropic.Anthropic()
with client.messages.stream(
max_tokens=65536,
model="claude-opus-4-7",
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?",
}
],
) as stream:
for event in stream:
pass
final_message = stream.get_final_message()
print(final_message.usage)Dalam contoh ini, streaming alat butir halus memungkinkan Claude untuk streaming baris puisi panjang ke dalam panggilan alat make_file tanpa buffering untuk memvalidasi apakah parameter lines_of_text adalah JSON yang valid. Ini berarti Anda dapat melihat parameter stream saat tiba, tanpa harus menunggu seluruh parameter untuk buffer dan validasi.
Dengan streaming alat butir halus, chunk penggunaan alat mulai streaming lebih cepat, dan sering kali lebih panjang dan berisi lebih sedikit jeda kata. Ini disebabkan oleh perbedaan dalam perilaku chunking.
Contoh:
Tanpa streaming butir halus (penundaan 15 detik):
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'
...Dengan streaming butir halus (penundaan 3 detik):
Chunk 1: '{"query": "TypeScript 5.0 5.1 5.2 5.3'
Chunk 2: ' new features comparison'Karena streaming butir halus mengirim parameter tanpa buffering atau validasi JSON, tidak ada jaminan bahwa stream yang dihasilkan akan selesai dalam string JSON yang valid.
Khususnya, jika alasan berhenti max_tokens tercapai, stream mungkin berakhir di tengah parameter dan mungkin tidak lengkap. Anda umumnya harus menulis dukungan khusus untuk menangani saat max_tokens tercapai.
Ketika blok konten tool_use streaming, event content_block_start awal berisi input: {} (objek kosong). Ini adalah placeholder. Input aktual tiba sebagai serangkaian event input_json_delta, masing-masing membawa fragmen string partial_json. Kode Anda harus menggabungkan fragmen ini dan mengurai hasilnya setelah blok ditutup.
Kontrak akumulasi:
content_block_start dengan type: "tool_use", inisialisasi string kosong: input_json = ""content_block_delta dengan type: "input_json_delta", tambahkan: input_json += event.delta.partial_jsoncontent_block_stop, parsing string yang terakumulasi: json.loads(input_json)Ketidakcocokan tipe antara input: {} awal (objek) dan partial_json (string) adalah dengan desain. Objek kosong menandai slot dalam array konten; string delta membangun nilai nyata.
import json
import anthropic
client = anthropic.Anthropic()
tool_inputs = {} # index -> accumulated JSON string
with client.messages.stream(
model="claude-opus-4-7",
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 dan TypeScript menyediakan helper stream tingkat lebih tinggi (stream.get_final_message(), stream.finalMessage()) yang melakukan akumulasi ini untuk Anda. Gunakan pola manual di atas hanya ketika Anda perlu bereaksi terhadap input sebagian sebelum blok ditutup, seperti merender indikator kemajuan atau memulai permintaan hilir lebih awal.
Saat menggunakan streaming alat butir halus, Anda mungkin menerima JSON yang tidak valid atau tidak lengkap dari model. Jika Anda perlu melewatkan JSON yang tidak valid ini kembali ke model dalam blok respons kesalahan, Anda dapat membungkusnya dalam objek JSON untuk memastikan penanganan yang tepat (dengan kunci yang masuk akal). Sebagai contoh:
{
"INVALID_JSON": "<your invalid json string>"
}Pendekatan ini membantu model memahami bahwa konten adalah JSON yang tidak valid sambil menyimpan data yang salah bentuk asli untuk tujuan debugging.
Saat membungkus JSON yang tidak valid, pastikan untuk meloloskan dengan benar tanda kutip atau karakter khusus dalam string JSON yang tidak valid untuk mempertahankan struktur JSON yang valid dalam objek pembungkus.
Referensi lengkap untuk event yang dikirim server dan tipe event stream.
Jalankan alat dan kembalikan hasil dalam format pesan yang diperlukan.
Direktori lengkap alat skema Anthropic dan string versi mereka.
Was this page helpful?